一直以來,MultiCharts 的原廠都說 Portfolio Trader 是不支援 IOG的,近日友人發信到原廠詢問得到的回應也依然是如此。但是,聽聞有人利用 PT 執行策略並且外接下單機,這就讓我感到很有趣了!
我們在 PT 內,的確可以在 Strategy 下掛多個訊號,讓其中一個訊號不做任何買賣動作,單純的只是做 GVSet 或是寫出文字檔,但如果 PT 並不支援 IOG 的話,那這些擔任輸出資訊功能的訊號,將會無法"即時"的部位資訊傳送出去,而需要等到像是換棒這樣的 event 才能動作... 很明顯的,輸出部位資訊如果需要等到換棒的延遲程度,有誰能受得了 XD
那... 有人用 PT 跑策略卻外接下單機,到底是怎麼回事呢?以下,是我做的測試,請直接先看影片,使用兩個相同設定的策略,一組用 PT 執行,一組用圖表執行,再另外開一張圖表做資訊外傳的接收以比較來自圖表與來自PT的差異。
因為兩個策略的時間週期分別是 2小時與 3小時,如果真的需要換棒這樣的 event 才能驅動,那我們不應該看到因報價變動就看到 i_openEquity 的近乎即時的更新在接收後顯示的圖表(畫面右上)上。
如果你也想在你的電腦上做這樣的測試,以下是我做這個測試相關資源包:下載點
這裡先附上丟資訊出來的 code:
[IntrabarOrderGeneration= true]
input: group("c"), ID(0);
var: GVName(""), show("");
array: intrabarpersist MP[3](-987), intrabarpersist Equ[3](-99999999);
if LastBarOnChart then begin
MP[2]= MP[1];
Equ[2]= Equ[2];
MP[1]= marketposition * currentcontracts;
Equ[1]= i_OpenEquity;
GVName= text( group, NumToStr(ID,0) );
GVSetNamedDouble("MP"+GVname, MP[1]);
GVSetNamedDouble("Equ"+GVname, Equ[1]);
FileAppend( "F:\test\"+GVName+"_FA.txt", text( currenttime_s:0:0, ", MP=", MP[1]:0:0, ", Equ=", Equ[1]:0:0, newline ) );
_writeTXT( "F:\test\"+GVName+"_WT.txt", text( currenttime_s:0:0, ", MP=", MP[1]:0:0, ", Equ=", Equ[1]:0:0, newline ) );
show= text( GVName, newline, "MP= ", MP[1], newline, "Equ= ", Equ[1] );
text_delete(value77);
value77= text_new_bn(barnumber, GetAppInfo(aiHighestDispValue),"");
TEXT_SetString(value77, show);
TEXT_SetBGColor(value77, black);
TEXT_SetStyle(value77, 1, 0);
TEXT_SetSize(value77,16);
TEXT_SetAttribute(value77,1,true);
TEXT_SetColor(value77, yellow);
end;
ps. 在後續的測試中,似乎 RecalacLastbarAfter 指令,在 PT 中是完全不起作用的 =_=