2014年4月16日 星期三

應用乖離率的逆勢策略 [程式碼]

EasyTrader ArtNo 138
乖離率(BIAS)是移動平均原理派生的一項技術指標,其功能主要是通過測算股價在波動過程中與移動平均線出現偏離的程度,從而得出股價在劇烈波動時因偏離移動平均趨勢而造成可能的回檔或反彈,以及股價在正常波動範圍內移動而形成繼續原有趨勢的可信度。

 乖離度的測試原理是建立在:如果股價偏離移動平均線太遠,不管股價在移動平均線之上或之下,都有可能趨向平均線的這一條原理上。而乖離率則表示股價偏離趨向指標的百分比值。

乖離率 =(當日收盤價-N日內移動平均收盤價)/N日內移動平均收盤價×100%
 其中,N日為設立參數,可按自己選用移動平均線日數設立,一般分定為6日,12日,24日和72日,亦可按10日,30日,75日設定。
乖離率的取值
 乖離率的數值的大小可以直接用來研究股價的超買超賣現象,判斷買賣股票的時機。由於選用乖離率周期參數的不同,其對行情的研判標準也會隨之變化,但大致的方法基本相似。以5日和10日乖離率為例,具體方法如下:

  1、一般而言,在弱勢市場上,股價的5日乖離率達到-5以上,表示股價超賣現象出現,可以考慮開始買入股票;而當股價的5日乖離率達到5以上,表示股價超買現象出現,可以考慮賣出股票。

  2、在強勢市場上,股價的5日乖離率達到-10以上,表示股價超賣現象出現,為短線買入機會;當股價的5日乖離率達到10以上,表示股價超買現象出現,為短線賣出股票的機會。
參考 MBA智庫 - 乖離率

我們利用以下的程式碼針對台指期的乖離作歷史回測
inputs: ExitType(1),TradeProfit(0.05),TradeStopLoss(0.03),NBarL(2),NBarS(2);
input: SlowLen(21),SHB(1),SLB(-1);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0);
vars:Bias(0);

MP = MarketPosition ;

if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)= 3 then isBalanceDay = True else isBalanceDay =False ;

PF = AvgPrice*TradeProfit ;
PL = AvgPrice*TradeStopLoss ;

if Average(Close,SlowLen) <> 0 then Bias = (Close-Average(Close,SlowLen))/Average(Close,SlowLen)*100 ;

if Bias Cross under SHB then Sell next bar at market ;
if Bias Cross over SLB then Buy next bar at market ;

{不同出場條件}
if ExitType = 1 then SetStopLoss(PL * BigPointValue) ;

if ExitType = 2 then Begin
   SetStopLoss(PL * BigPointValue) ;
   SetProfitTarget(PF * BigPointValue) ;
end;

if ExitType = 3 then Begin
   if MP > 0 and BarsSinceEntry = NBarL then ExitLong next bar at Market ;
   if MP < 0 and BarsSinceEntry = NBarS then ExitShort next bar at Market ;
end;

if ExitType = 4 then Begin
   SetStopLoss(PL * BigPointValue) ;
   SetProfitTarget(PF * BigPointValue) ;
   if MP > 0 and BarsSinceEntry = NBarL then Sell {ExitLong} next bar at Market ;
   if MP < 0 and BarsSinceEntry = NBarS then Buy {ExitShort} next bar at Market ;
end;

if ExitType = 5 then Begin
   Inputs: ATRs_L(3);
   Variables: PosHigh(0), ATRVal_L(0);
   ATRVal_L = AvgTrueRange(10) * ATRs_L;
   If BarsSinceEntry = 0 Then PosHigh = High;
   If MarketPosition = 1 Then Begin
      If High > PosHigh Then PosHigh = High;
     ExitLong ("ATR") Next Bar at PosHigh - ATRVal_L Stop;
  End else ExitLong ("ATR eb") Next bar at High - ATRVal_L Stop;

   Inputs: ATRs_S(3);
   Variables: PosLow(0), ATRVal_S(0);
   ATRVal_S = AvgTrueRange(10) * ATRs_S;
   If BarsSinceEntry = 0 Then PosLow = Low;
   If MarketPosition = -1 Then Begin
      If Low < PosLow Then PosLow = Low;
      ExitShort ("ATR_1") Next Bar at PosLow + ATRVal_S Stop;
  End else ExitShort ("ATR_1 eb") Next bar at Low + ATRVal_S Stop;
end;

if IsBalanceDay then setExitonClose ;

[台指期 60分K 留倉 2004/3/31 ~ 2014/3/31 交易成本 ]

出場條件2
參數→ExitType 2 , TradeProfit 0.04 , TradeStopLoss 0.045 , SlowLen 30 , SHB 4.5 ,SLB -1



出場條件 5
參數→ExitType 5 , SlowLen 30 , SHB 4.5 ,SLB -1 , ATR_L 4, ATR_S 12



出場條件 2 加入如意多空網



出場條件 5 加入如意多空網


MagicQS059

沒有留言:

張貼留言