2017年8月29日 星期二

訊號:智能版收盤前清倉(當沖專用)

在跟好友的討論中產生出來的當沖策略用的臨收盤前出場的"訊號"。不過,這篇文章的題目加上了智能版,總是要比過去分享過的東西多聰明一點點才行嘛 XD

因應交易多商品的需求,每一種商品的收盤時間都很可能不一樣。至少,想讓這個臨收盤出場能隨著個別商品的 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 去做。如果能自動取得該商品的交易所時區,也許就能用本地的電腦時間去做更好的控制了。

暫時,這是一個姑且用之的自適應版本。