2019年1月17日 星期四

Portfolio Trader 即時對外輸出資訊測試


一直以來,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 中是完全不起作用的 =_=


熱門文章