2013年11月14日 星期四

簡單特別的交易系统 Part 2 (程式碼)

EasyTrader ArtNo 050
Range Break 區間突破交易系統
這是一個古老的系統,相信所有寫程式交易的練習題都有作過,它基於價格的擴張,收縮特點,來建立買賣信號。

1.交易的時間週期為日線圖.
2.波動率VE=昨日高點-昨日低點
3.設立買入/停損指令:買入價=開盤價+0.7*波動率。停損價=買入價-0.5*波動率
4.設立賣出/停損指令:賣出價=開盤價-0.7*波動率。停損價=賣出價+0.5*波動率
{原作為日線交易 ,改為 150分K 留倉 ,來回成本 1200 ,回測期間 2001~2013/10/31}
inputs: LongEntryR(0.7),LongExitR(0.5),ShortEntryR(0.7),ShortExitR(0.5),HLRange(100) ;
Vars: VE(0);

if date <> date[1] then Begin
    if DataCompression > 1 then VE = High[1]-Low[1]
        else VE = HighD(1)-LowD(1) ;
end;

if VE > HLRange and VE < 240 then Begin {我先加了這行 濾網}
   Buy at Open + VE*LongEntryR stop ;
   ExitLong at Open - VE*LongExitR stop ;
   Sell at Open-VE*ShortEntryR stop ;
   ExitShort at Open+VE*ShortExitR stop;
end;





有機會找其他策略合作搭檔喔!
如果將昨日周規則變成濾網加入,改為15分鐘的回測可以獲得以下的結果



哇!! 又是一個有機會上戰場的策略 , 這告訴我們在策略撰寫學習的過程,不需要一成不變,濾網可以是策略,進出場規則也可以成濾網,就看讀者如何發揮創意囉 !

程式碼如下:(特別的顏色是與上述不同 , 有修改的部份 )
inputs: LongEntryR(0.7),LongExitR(0.5),ShortEntryR(0.7),ShortExitR(0.5),HLRange(100) ;
Vars: VE(0);

if date <> date[1] then Begin
   if DataCompression > 1 then VE = High[1]-Low[1]
      else VE = HighD(1)-LowD(1) ;
end;

if VE >= HLRange and VE < 240 then Begin

if Open + VE*LongEntryR > MaxList(HighW(1),HighW(0)) then 
    Buy at Open + VE*LongEntryR stop ;
Sell at Open - VE*LongExitR stop ;

if Open-VE*ShortEntryR < MinList(LowW(1),LowW(0)) then 
    Sell at Open-VE*ShortEntryR stop ;
Buy at Open+VE*ShortExitR stop;

end;
---------------------------------------------------------------------------------------------------------
過去在作同商品不同週期 以及不同商品相關性的濾網研究中,開發了一個如意多空網,我也將它拿來在此應用作不同時間週期的測試如下:

inputs: LongEntryR(0.7),LongExitR(0.5),ShortEntryR(0.7),ShortExitR(0.5),HLRange(100) ;
Vars: VE(0);

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

if date <> date[1] then Begin
   if DataCompression > 1 then VE = High[1]-Low[1]
       else VE = HighD(1)-LowD(1) ;
end;
if VE > HLRange and VE < 240 then Begin
   if _MagicQF001(1) > 0  then Buy at Open + VE*LongEntryR stop ;
   ExitLong at Open - VE*LongExitR stop ;
   if _MagicQF001(1) < 0 then Sell at Open-VE*ShortEntryR stop ;
   ExitShort at Open+VE*ShortExitR stop;
end;

if IsBalanceDay then SetExitonClose ;





加入如意多空網後在短週期的表現都有明顯提昇,是值得關注的輔助濾網

2 則留言:

  1. 再請教版主...TS的"Buy at Open + VE*LongEntryR stop;" = MC的"Buy next bar at Open + VE*LongEntryR stop;"??
    因為手邊沒有TS,麻煩版主了...謝謝!!

    回覆刪除