PDA

View Full Version : help about wrting custom indicators



hnp2500
09-07-2013, 05:55 PM
Hi
I have a general question:
Is there any manual on how to develop a custom indicator using any existing indicator in vtl?
How can i access to source code of existing developed indicators in vtl such as macd?
regards
Hooshang

Hassan-HS
09-07-2013, 10:06 PM
Welcome ;)



Definitely you can develop your own indicator using:
1- VTL client (http://www.hybrid-solutions.com/support/index.php?/Knowledgebase/Article/View/2567) in this case you have to use the on array functions
2- VTL server (http://www.hybrid-solutions.com/support/index.php?/Knowledgebase/Article/View/2566) in this case you have to use the technical analysis system development kit (TASDK) functions.

Examples:


The following samples calculate MACD based on custom array and print the result of record 50 :
1- VTL client (http://www.hybrid-solutions.com/support/index.php?/Knowledgebase/Article/View/2567) - MacdOnArray (http://www.hybrid-solutions.com/support/index.php?/Knowledgebase/Article/View/3487)





Public Sub main()
Dim HighAry ()
Dim LowAry ()

Dim OpenAry ()
Dim CloseAry ()
Dim result()
Dim SignalPeriod
Dim FastEMA
Dim SlowEMA
Dim Signal

SignalPeriod = 9
FastEMA = 12
SlowEMA = 26
CopyHigh 0, 1, Bars (0), HighAry
CopyLow 0, 1, Bars (0), LowAry
CopyOpen 0, 1, Bars (0), OpenAry
CopyClose 0, 1, Bars (0), CloseAry

MACDOnArray OpenAry, HighAry, LowAry, CloseAry, CInt (SignalPeriod), CInt (FastEMA), CInt (SlowEMA), Result, Signal
MsgBox "The indicator value of the record 50 : " & Result(50)

End Sub




2- VTL Server (http://www.hybrid-solutions.com/support/index.php?/Knowledgebase/Article/View/2566) - MACD (http://www.hybrid-solutions.com/support/index.php?/Knowledgebase/Article/View/3067)






Public Sub main()
'Variables
Dim _symbolInfo As VTLGeneral.CSymbol=ClientCode.GetSymbolByName("GOLD")
Dim DB As New VTLGeneral.Database()
Dim RecordCount As Integer
Dim m_Recordset As VTLGeneral.RecordSet
Dim _historyData As object()
Dim output As String
Dim Record As Integer
Dim m_Date As VTLGeneral.Field
Dim m_Open As VTLGeneral.Field
Dim m_High As VTLGeneral.Field
Dim m_Low As VTLGeneral.Field
Dim m_Close As VTLGeneral.Field
Dim j As Integer = 0
Dim i As Integer = 0
Dim _recordCount As Integer =100

m_Recordset = DB.CreateRecord
m_Open = New VTLGeneral.Field
m_High = New VTLGeneral.Field
m_Low = New VTLGeneral.Field
m_Close = New VTLGeneral.Field

DB.RecordCount = _recordCount
RecordCount = _recordCount

'Initialize Recordsets
m_Open.initialize(_recordCount, "Open")
m_High.initialize(_recordCount, "High")
m_Low.initialize(_recordCount, "Low")
m_Close.initialize(_recordCount, "Close")


'load high, low ,open and data
_historyData = ClientCode.GetChartHistory(_symbolInfo.ID, VTLGeneral.ENUM_PERIOD.Day,VTLGeneral.ENUM_HISTORY _TYPE.HIS_HIGH, _recordCount)

For i = 1 To _recordCount-1
m_High.setValue(i,_historyData(i))
Next

_historyData = ClientCode.GetChartHistory(_symbolInfo.ID, VTLGeneral.ENUM_PERIOD.Day,VTLGeneral.ENUM_HISTORY _TYPE.HIS_LOW, _recordCount)

For i = 1 To _recordCount-1
m_Low.setValue(i,_historyData(i))
Next

_historyData = ClientCode.GetChartHistory(_symbolInfo.ID, VTLGeneral.ENUM_PERIOD.Day,VTLGeneral.ENUM_HISTORY _TYPE.HIS_OPEN, _recordCount)

For i = 1 To _recordCount-1
m_Open.setValue(i,_historyData(i))
Next

_historyData = ClientCode.GetChartHistory(_symbolInfo.ID, VTLGeneral.ENUM_PERIOD.Day,VTLGeneral.ENUM_HISTORY _TYPE.HIS_CLOSE, _recordCount)

For i = 1 To _recordCount-1
m_Close.setValue(i,_historyData(i))
Next

m_Recordset.addField(m_Open)
m_Recordset.addField(m_High)
m_Recordset.addField(m_Low)
m_Recordset.addField(m_Close)

'MACD indicator
Dim _indRecord As New VTLGeneral.RecordSet()
Dim osc As New VTLGeneral.Oscillator()

_indRecord = osc.MACD(DB,m_Recordset,5) _indRecord = osc.MACD(DB,m_Recordset,5)


output = CSTR(_indRecord.getValue(_indRecord.getName(1), 50) )

GUI.MsgDialog(output)


End Sub

b_morar
09-12-2013, 07:58 AM
Dear Sir,


Please update us if every thing is clear now or not, and let me know if you need any further assistance.