因為要交易多商品,造成在下單設定上的困擾。當你要同時交易 50、100、200、300個商品的話,想一下光是下單機上的設定,就非常痛苦了。為了降低這個痛點,之前與下單大師溝通,並得到大力協助下,才能使用 order 模式的方式,讓多商品的交易得以實現:不需要設定超多數量的"策略",也不需要設定一大堆的"商品"!僅需3~5個下單文字檔,就能駕馭你的一籃子商品了。
以下是多商品交易時,輸出下單文字檔的範例,因為這牽涉到所有商品-策略訊號的統合器的設計,無法提供一如過去分享的單一 fuction。
for j= 1 to howmany begin
change[j]= _tPosition[j] - _lastPos[j];
if pos(change[j])>=1 then begin
dealPrice= iff( change[j]>0, Watcher_ask[j], Watcher_bid[j] );
timeFormat= FormatDate( "yyyy/MM/dd", computerDateTime )+" "+
FormatTime( "HH:mm:ss", computerDateTime );
ActionContent= text( " ", Watcher_Description[j], " :",
" ", _sign(change[j],2,0), " @", dealPrice:12:6,
" (",_sign(_tPosition[j],2,0),")",
" t$", _commaFormat(tEquity,0) );
_writeLog( logPATH+"ActionLog_"+AccountName+".txt", ActionContent );
if OrderTXTs>1 then begin
if TimeValue-orderTime[txtIndex]>1 then begin
timeFormat= FormatDate( "yyyy/MM/dd", computerDateTime )+" "+
FormatTime( "HH:mm:ss", computerDateTime );
orderFormat= text("STK_US,", Watcher_Exchange[j],"_",Watcher_Symbol[j],
",A,Y#", timeFormat,",", change[j]:0:0,",", dealPrice:0:2 );
orderFileName= text(OrderPATH,AccountName,"_",NumToStr(txtIndex,0),".txt");
_writeTXT( orderFileName, orderFormat );
_writeLog( f_orderLog, " " + orderFormat );
_lastPos[j]= _tPosition[j];
orderTime[txtIndex]= TimeValue;
txtIndex= iff( txtIndex>=orderTXTs, 1, txtIndex+1 );
end;
end;
end;
end;
我們需要對上方的 code 做一點點的解釋:
以下是陣列:
● _Watcher_ask[j]:各個商品現在的 ask 價
● _Watcher_bid[j]:各個商品現在的 bid 價
● Watcher_Exchange[j]:各個商品所屬的交易所
● Watcher_Synbol[j]:各個商品的商品代號
● _tPosition[j]:各個商品的目前部位
● _lastPos[j]:各個商品的之前部位
● _change[j]:各個商品當下的部位變化值
● orderTime[]:記錄每個下單文字檔上次被寫入時間
以下是變數:
◎ orderTXTs:總共使用幾個下單文字檔
◎ txtIndex:用來指向寫到哪個下單文字檔
◎ dealPrice:用來寫入 log 與 下單文字檔的成交價
◎ orderFormat:寫入下單文字檔的內容(這裡是下單美股到 IB-盈透證券的)
◎ orderFileName:下單文字檔的路徑與檔名
我交易多商品的架構分成三層:
第一層是商品-訊號以產生每個策略的部位,使用 Portfolio Trader 去執行。
第二層是商品整合,每個商品下可能會有多個訊號一起執行,所以需要把各商品的訊號部位價總,可以使用圖表(PT也可)。
第三層是輸出下單文字檔與一籃子商品的持有部位狀態,這就使用圖表來做,上述的 code 就在這一層裡面。
以上這些工作,除了真實的送單到券商需要下單大師去執行外,全部都在 MultiCharts 裡完成,基本上只要第一層是用 PT 去執行的話,要監視並交易個 1000個商品以上,不是問題。但你要熟捻陣列與 intrabar persisit 的運用。
第一層是商品-訊號以產生每個策略的部位,使用 Portfolio Trader 去執行。
第二層是商品整合,每個商品下可能會有多個訊號一起執行,所以需要把各商品的訊號部位價總,可以使用圖表(PT也可)。
第三層是輸出下單文字檔與一籃子商品的持有部位狀態,這就使用圖表來做,上述的 code 就在這一層裡面。
以上這些工作,除了真實的送單到券商需要下單大師去執行外,全部都在 MultiCharts 裡完成,基本上只要第一層是用 PT 去執行的話,要監視並交易個 1000個商品以上,不是問題。但你要熟捻陣列與 intrabar persisit 的運用。
在理解了以上的 code 之後,應該可以看出,其實使用到陣列就是為了在一籃子商品中,用迴圈做逐個執行:把每個商品的交易動作,輸出到幾個文字檔(輪流使用),直接告訴下單大師對哪個商品買賣多少數量,這就是 order 模式。
對你來說,最重要的就是必須知道你要下單的券商的商品代號規則,依每一家券商而有差異,不見得同一個商品在不同券商的商品代號就會一樣!在上述 code 中,因為是下到 IB 的美股現貨,最重要就是這一段的紅字部分:
orderFormat= text("STK_US,", Watcher_Exchange[j],"_",Watcher_Symbol[j], ",A,Y#", timeFormat,",", change[j]:0:0,",", dealPrice:0:2 );
這個輸出下單文字檔的原理,也應用在STO。交易選擇權本來就是多商品,PUT / CALL 多個履約價隨時調換。
串接下單大師 2.5 的設定: https://youtu.be/r94WCubbAIk
串接下單大師 4.0 的設定: https://youtu.be/4iZguVsrMxA