2014年9月8日 星期一

背離指數 Divergence Index [程式碼]

EasyTrader ArtNo 199
在上漲趨勢中的回檔買入和在下跌趨勢中反彈賣出是我最喜歡的交易技術之一。我創建了背離指數來衡量這種回檔/反彈的強度。我相信在更強的趨勢的範圍內的強勁拉回可以作出的最好的買進交易。背離指數利用兩個動量指標的相乘積來衡量回檔。然後將計算出來的結果除以近期價格變化的變動方差。
背離指數 = 10 天動量 * 40 天動量 / (40 天價格變化的標準差)的平方
 將背離指數圖表化的一個特點是交易機會極其明顯。當10 天和 40 天的這兩個動量值都是相同的符號 (正或負) 時,所得到的背離指數是正值。

如果我們把兩個正數相乘,結果是正值。把兩個負數相乘,其結果也是正值。所以我們專注于當背離指數為負值時所產生的進場交易機會。如果一個動量是正值的而另一個動量是負值,這表明長短期趨勢的背離正在發生。所以當背離指數是負的時候,我們希望在較長期趨勢的方向進行交易。例如當背離指數小於 -10 且 40天的動量大於 0 ,可以建立多單。反之空單建立的條件是,當背離指數小於 -10 且 40天的動量小於 0 .


它值得注意且可以進一步的研究的是,背離指數也能幫我們去定義趨勢結束的時機。當指數值呈現很大的正值時,可能會出現市場的頭部或底部。或者,至少這現象可能會顯示市場的膠著盤整。如果市場長期和短期趨勢過度的擴張,這兩項動量值將顯示出極限值,從而導致背離指數也出現極大值。

在書中介紹的範例顯示出應用背離指數的策略表現很好,尤其是期貨市場 。用於期貨:凈利:7,198,775 最大流失金額:-1,550,895 K比率:0.26 夏普率0.73 ,期貨市場12 年測試有 11年獲利 
摘譯自 [ QUANTITATIVE TRADING STRATEGIES]
測試程式碼
input:EntryType(1),ExitType(0) ;
var:NBarL(2),NBarS(2),TradeProfit(0.053),TradeStopLoss(0.023),ATRs_L(5.4),ATRs_S(10.9);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0);
var:FastLen(10),SlowLen(40),HighBand(25),LowBand(10) ;
vars: FastMoment(0),SlowMoment(0),Divergence(0),FastDev(0),SlowDev(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 ;

{ 計算長短期週期動量 }
FastMoment = Close-Close[FastLen] ;
SlowMoment = Close-Close[SlowLen] ;

{ 計算 長短期價格變動標準差 }
FastDev = StdDev((Close-Close[1]),FastLen) ;
SlowDev = StdDev((Close-Close[1]),SlowLen) ;

{ 背離指數計算 }
if SlowDev*SlowDev <> 0 then Divergence = (FastMoment*SlowMoment)/(SlowDev*SlowDev) ;

if EntryType = 1 then begin
{ 5 根K Bar 內發生 背離指數 < -LowBand 且長期動量 > 0 多單進場 }
if MRO(Divergence < -LowBand,5,1) <> -1 and SlowMoment > 0 then Buy next bar at Market ;
{ 5 根K Bar 內發生 背離指數 < -LowBand 且長期動量 < 0 空單進場 }
if MRO(Divergence < -LowBand,5,1) <> -1 and SlowMoment < 0 then Sell next bar at Market ;

{ if MP > 0 and Divergence Cross under HighBand then ExitLong next bar at Market ;
if MP < 0 and Divergence Cross under HighBand then ExitShort next bar at Market ;}
end;

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
{*******************************************************************
Description : ATR Trailing Stop Long Exit
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
{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;

{*******************************************************************
Description : ATR Trailing Stop Short Exit
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
{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 ;
台指期 日K 留倉 回測週期 2004/8/2~2014/7/31 交易成本 1200

台指期 30 分K 留倉 回測週期 2004/8/2~2014/7/31 交易成本 1200

MagicQS109

2 則留言:

  1. 希望能給大家一些不同的元素想法,在交易策略開發上更有創新

    回覆刪除