2014年6月4日 星期三

國外當沖策略的台指期應用 [程式碼]

EasyTrader ArtNo 160
這是 Wen 大的網站提供的Emini S&P500 當沖策略測試,從內容來看是作為類似開盤區間突破(Open Range Breakout )的改良,並加上動量濾網 ;就如同以往 - 直接套用國外策略通常在台指期應用上都還需要調整 ~ 為了作測試研究,我將內容作了一些修改 ,並作說明


首先我將程式碼內的突破價格轉成指標 如下圖

inputs: AvgLenL(3),AvgLenS(3),Ratio(0.5);
Vars: LowOffsetL(0),HighOffsetL(0),MaxOffsetAvgL(0),MaxOffsetL(0),SumOffsetL(0) ;
Vars: LowOffsetS(0),HighOffsetS(0),MaxOffsetAvgS(0),MaxOffsetS(0),SumOffsetS(0) ;

if Date <> Date[1] then begin
    SumOffsetL = 0 ;
    For Value3 = 1 to AvgLenL Begin
       LowOffsetL = AbsValue(CloseD(Value3)-LowD(Value3)) ;
       HighOffsetL = AbsValue(CloseD(Value3)-HighD(Value3)) ;
       MaxOffsetL = MaxList(HighOffsetL,LowOffsetL) ;
       SumOffsetL = SumOffsetL + MaxOffsetL ;
   end;
   if AvgLenL <> 0 then MaxOffsetAvgL = SumOffsetL/AvgLenL*Ratio ;

   SumOffsetS = 0 ;
   For Value4 = 1 to AvgLenS Begin
       LowOffsetS = AbsValue(CloseD(Value4)-LowD(Value4)) ;
       HighOffsetS = AbsValue(CloseD(Value4)-HighD(Value4)) ;
       MaxOffsetS = MaxList(HighOffsetS,LowOffsetS) ;
      SumOffsetS = SumOffsetS + MaxOffsetS ;
   end;

   if AvgLenS <> 0 then MaxOffsetAvgS = SumOffsetS/AvgLenS*Ratio ;
end ;

Plot1(OpenD(0)+MaxOffsetAvgL,"OpenSetL") ;
Plot2(CloseD(1)+MaxOffsetAvgL,"CloseSetL") ;
Plot3(OpenD(0)-MaxOffsetAvgS,"OpenSetS") ;
Plot4(CloseD(1)-MaxOffsetAvgS,"CloseSetS") ;



接下來依據可能的測試需要加入參數,作成如下程式碼
input: TimeEntry(900),TimeExit(1310),LookBackL(25),AvgLenL(1),RatioL(2.08),LookBackS(46);
input: ,AvgLenS(2),RatioS(2.09),HighRatio(0.02),LowRatio(0) ,JudgeL(1),JudgeS(1) ;

Vars: MomtL(0),LowOffsetL(0),HighOffsetL(0),MaxOffsetAvgL(0),MaxOffsetL(0),LookBackSumL(0),LookBackAvgL(0),SumOffsetL(0) ;

Vars: MomtS(0),LowOffsetS(0),HighOffsetS(0),MaxOffsetAvgS(0),MaxOffsetS(0),LookBackSumS(0),LookBackAvgS(0),SumOffsetS(0) ;

{ 原作者為使用 data2 來取得日K資料, 這裡我改變方式來取得相同的資料 }
{當交易日變換時}

if Date <> Date[1] then begin
{計算買方環境回溯天數的收盤價的加總 }

LookBackSumL = 0 ;
For value1 = 1 to LookBackL Begin
   LookBackSumL = LookBackSumL + CloseD(value1) ;
end ;

{計算平均值 }
if LookBackL <> 0 then LookBackAvgL = LookBackSumL/LookBackL ;

{計算當作多方濾網的動量}
MomtL = CloseD(1)- LookBackAvgL ;

{ 原作者只作多單 ,我加上相反的邏輯來作空方進場設定 }
{計算賣方環境回溯天數的收盤價的加總 }
LookBackSumS = 0 ;
For value2 = 1 to LookBackS Begin
   LookBackSumS = LookBackSumS + CloseD(value2) ;
end ;

{計算平均值 }
if LookBackS <> 0 then LookBackAvgS = LookBackSumS/LookBackS ;

{計算當作空方濾網的動量}
MomtS = CloseD(1)- LookBackAvgS ;


{計算多方進場的突破參考價}
SumOffsetL = 0 ;

{ 計算多方 N天最大日偏移量加總 }
For Value3 = 1 to AvgLenL Begin
   LowOffsetL = AbsValue(CloseD(Value3)-LowD(Value3)) ;
   HighOffsetL = AbsValue(CloseD(Value3)-HighD(Value3)) ;
   MaxOffsetL = MaxList(HighOffsetL,LowOffsetL) ;
   SumOffsetL = SumOffsetL + MaxOffsetL ;
end;

{ 計算 N天最大日偏移量平均值}
if AvgLenL <> 0 then MaxOffsetAvgL = SumOffsetL/AvgLenL*JudgeL ;


{計算空方進場的跌破參考價}
SumOffsetS = 0 ;

{ 計算空方 N天最大日偏移量加總 }
For Value4 = 1 to AvgLenS Begin
   LowOffsetS = AbsValue(CloseD(Value4)-LowD(Value4)) ;
   HighOffsetS = AbsValue(CloseD(Value4)-HighD(Value4)) ;
   MaxOffsetS = MaxList(HighOffsetS,LowOffsetS) ;
   SumOffsetS = SumOffsetS + MaxOffsetS ;
end;

{ 計算 N天最大日偏移量平均值}
if AvgLenS <> 0 then MaxOffsetAvgS = SumOffsetS/AvgLenS*JudgeS ;

end ;

{ 加上時間濾網 }

if time > TimeEntry and time < TimeExit then Begin


{當動量為負值 [回落下降] 時,再突破進場 ,可使用日開盤價或前日收盤價當基準}
if MomtL < -LookBackAvgL*LowRatio and EntriesToday(date) <= 1 then
Buy ("LE") next bar at CloseD(1)+ MaxOffsetAvgL stop ;

{當動量為正值 [反彈上升] 時,等跌破進場 ,可使用日開盤價或前日收盤價當基準 }
if MomtS > LookBackAvgS*HighRatio and EntriesToday(date) <= 1 then
Sell ("SE") next bar at OpenD(0)- MaxOffsetAvgS stop ;

end;

{ 定時出場 }
if time = ExitTime then ExitLong next bar at Market ;
if time = ExitTime then ExitShort next bar at Market ;

{ 固定停損 }
if RatioL <> 0 then Value5 = MaxOffsetAvgL/RatioL ;
if MarketPosition > 0 then ExitLong next bar at EntryPrice-Value5 Stop ;
if RatioS <> 0 then Value6 = MaxOffsetAvgS/RatioS ;
if MarketPosition < 0 then ExitLong next bar at EntryPrice+Value6 Stop ;

{收盤出場 }
SetExitonClose ;

台指期 日內交易 回測週期 2004/5/25 ~ 2014/5/23 交易成本 1200



從報表來看 ,同樣是在 2011年以後,績效就停滯橫盤了

若是改成波段留倉策略的結果呢 ?


近一年的表現算是穩定成長喔
MagicQS077

2 則留言: