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

0 留言:

張貼留言

如果有私人問題想請教,請透過網站右方『與站長聯絡』之表單,謝謝!

----------------------------------------------------------------------------------------------------
網站聲明(Disclaimer)
本教學網站內所提供之程式碼(包括函數、指標、訊號)屬開放程式碼,用意在於讓使用者學習程式語法之撰寫,使用者可以任意修改語法內容並調整參數。本網站所有之內容(包括文章、影片、歷史紀錄、程式碼、教材)限用於個人學習使用,請勿轉寄、濫用,嚴禁私自串接帳戶交易。
-------------------------------------------------------------------------------------------------