因應交易多商品的需求,每一種商品的收盤時間都很可能不一樣。至少,想讓這個臨收盤出場能隨著個別商品的 QM 設定而自動配合。
用 SessionLastBar 這個內建函數來協助判斷目前的 K 棒是否是交易時段的最後一根,再用這最後一根 K棒的結束時間作為基準,接著以 q_time 來計算距離這商品的收盤時間還有幾分鐘?當這個距離時間小於等於指定的時間長度(參數):平倉。
[IntrabarOrderGeneration=True]
input: minutesBeforeEndTime(5);
var: intrabarpersist isEndBar(false);
var: intrabarpersist now(0), intrabarpersist endTime(0);
isEndBar= sessionlastbar;
if isEndBar then begin
if marketposition>0 then sell this bar close;
if marketposition<0 then buytocover this bar close;
end;
if isEndBar and LastBarOnChart then begin
endTime= HoursFromDateTime( el_timetodatetime(time) )*60 + MinutesFromDateTime( el_timetodatetime(time) );
now= q_Time;//currentTime;
now= HoursFromDateTime( el_timetodatetime(now) )*60 + MinutesFromDateTime( el_timetodatetime(now) );
if endTime - now <= minutesBeforeEndTime then begin
if marketposition>0 then sell next bar market;
if marketposition<0 then buytocover next bar market;
end;
end;
需要注意的是,因為這裡計算離收盤時間還有幾分鐘用的是 q_time,如果在這段收盤前幾分鐘就清倉的時間內,都沒有 tick 進來的話,有可能 q_time 沒有更新而導致... 留倉!
過去,我曾經分享過給台指用的收盤前清倉的訊號,採用了 currentTime,用的是電腦時間,因為交易的標的擴展到多商品的時候,幾乎標的的交易所時間都跟我們的電腦時間是不同時區,不能用 currentTime 去做。如果能自動取得該商品的交易所時區,也許就能用本地的電腦時間去做更好的控制了。
暫時,這是一個姑且用之的自適應版本。