2018年2月4日 星期日

函數(_isTrading):判斷商品當下是否有在交易中

由於正在往國外期貨做更多的努力,也陸陸續續碰到很多問題,維運方面或是策略、管理對不同市場、商品的自動適應都有。

這是為了在做出下單動作的時候,先判斷一下目前該商品,是否處於可交易的狀態?因為我自己已經發生多次,輸出部位的文字檔改變了,卻在該商品沒有交易的時段 XDDD


函數: _isTrading。回傳:True / False。
var: intrabarpersist volToday(0), intrabarpersist volUpdateTime(0),
     intrabarpersist TimeValue(0), intrabarpersist isTrading(false);


if LastBarOnChart then begin
  
  value1= currentTime_s;
  value2= HoursFromDateTime( ELTimeToDateTime_s(value1) );
  value3= MinutesFromDateTime( ELTimeToDateTime_s(value1) );
  value4= SecondsFromDateTime( ELTimeToDateTime_s(value1) );
  TimeValue= value2*3600 + value3*60 + value4;
  
  once volToday= q_ask*q_bid + q_totalvolume; 

  if (q_ask*q_bid+q_totalvolume) <> volToday then begin
    volUpdateTime= TimeValue;
    volToday= (q_ask*q_bid+q_totalvolume);
  end;
  
  _isTrading= TimeValue-volUpdateTime < 60 and volUpdateTime <> 0 
              and q_bid*q_ask <> 0 and q_bid <> q_ask;

end;



原理主要是利用 委買價、委賣價,與當日成交量這三個資訊的變化,來判斷目前是否有在交易中?這不是用目前時間來做判斷,與 QuoteManger 那邊的商品交易時段設定比較沒有關係。

這個函數的缺點是會有一些延遲性(請看 code 中的紅色),也有可能該商品實際上是有在交易,但是因為市場太清淡導致判斷成沒有交易中,也有可能實際上已經停止交易了,卻還以為仍可交易。優點是可以把市場交投清淡視為不要進場的判斷,也可以適用在不同的商品。

本來我希望用委買量、委賣量來做判斷,而不是委買價、委賣價,但我使用 Touchance 為報價來源,在 MultiCharts 9.1 上取到的 q_bidsize、q_asksize 一直是 0,所以~