2013年7月23日 星期二

Multicharts跨圖表傳遞資料

 

在MultiCharts裡有時候會想要引用不同圖表的資料,這個資料可能是價格、計算的指標值、或是某一個圖表訊號的部位,例如B圖表想要參考A圖表策略的目前部位為何?

 

不同圖表間資料的傳遞可以利用下面內建的函數,

GVSetNamedDouble

GVSetNamedInt

GVGetNamedDouble

GVGetNamedInt

 

Set就是存值,Get就是取值。Int是存整數,Double是存小數。

 

以一個傳遞訊號部位的例子來說明,建立兩個indicator,一個是PositionSource,將部位值存起來。一個是PositionDestination,將部位值取出來。

 

PositionSource範例程式如下,

 

PositionSource

 

行號4,將IntrabarOrderGeneration開啟,原因是部位可能每個TICK就有變動,這要看你的Signal是不是用到,一般來說,如果用到SetStop這類函數,就要把這個IOG打開。

 

行號6,和上面同樣理由,宣告一個IOG的變數PositionSource

 

行號8,i_MarketPosition 和 i_CurrentContracts 是部位方向和部位口數,兩個值就是在Siganl裡寫的MarketPosition和CurrentContracts,因為這裡寫的是指標,所以就用前面+ i_的。兩個值相乘後存到PositionSource這個變數裡,例如作空一口值是-1,作多兩口值是2。

 

行號10,呼叫GVSetNamedInt函數,將PositionSource的值,存到前面引號內的變數名,這邊同樣也取作PositionSource,這個名字就是給其它圖表呼叫用的。另外,這個例子傳遞部位值使用整數Int就可以了。

 

PositionDestination範例程式如下,

 

 

PositionDestination

 

前面一樣設定相關IOG,行號8將PositionSource的值取出來,存到變數Position中,第二個參數的說明並不清楚,函數說明僅寫是ErrorCode,推測是取不到值發生錯誤該傳什麼值,這個填一個數字就行了。

 

應用上,這個部位也可以拿來再和自己的部位相加,或是取其它資料時再拿來運算。只是這個取的值,只有存最後的狀態而已,如果需求是要拿來回測就沒辦法了,要用一般多新增Data的方式才可以回測。

 

 

沒有留言:

張貼留言