2018年9月27日 星期四

函數(_priceTWS):適應台股最小跳動的價格轉換

台灣股票的最小跳動間距,算是自外於國際現況,會因為股價高低而有不同的最小跳動,相關規則可參考:https://dh3p7.app.goo.gl/vBs5

這個函數的用途在於,我們在編寫交易策略的時候,常常會有指定價位的 stop 或是 limit 交易指令,如果我們指定的價格(比如:往上碰到5日均線時買進,往下觸到布林通道下緣出場)沒有經過處理轉換,又剛好下單機是採掛價送單的話,就會出現掛價不存在而遭退單。

就算你是看股票現貨做股票期貨也是一樣的狀況,所以,我們會需要一個函數來幫忙把指定價格轉換成在該價格對應到符合最小跳動規格的正確數字。


函數 _priceTWS,參數:輸入你要指定的價位,傳回數值。
input: price(Numeric);
var: tick(0), grand(0);

switch( price ) 
begin

  case >1000:
    begin
      tick= 5;
      grand= 1000;
    end;

  case 500 to 999.9:
    begin
      tick= 1;
      grand= 500;
    end;

  case 100 to 499.9:
    begin
      tick= 0.5;
      grand= 100;
    end;

  case 50 to 99.999:
    begin
      tick= 0.1;
      grand= 50;
    end;

  case 10 to 49.999:
    begin
      tick= 0.05;
      grand= 10;
    end;

  case <10:
    begin
      tick= 0.01;
      grand= 0;
    end;

end;



_priceTWS= grand + round( (price-grand)/tick, 0) * tick;



使用舉例:

var: MA1(0), MA2(0), MA3(0);
var: toBuy(0), toSell(0);

MA1=  Average( C, 5 );
MA2= Average( C, 20 );
MA3= Average( C, 60 );

toBuy= _priceTWS( maxlist( MA1, MA2, MA3 ) );
toSell= _priceTWS( minlist( MA1, MA2, MA3 ) );

if marketposition=0 and Close>MA1 and MA1>MA1[1] then
  buy next bar toBuy stop;

if marketposition>0 then
  sell next bar toSell stop;