2014年3月27日 星期四

Larry Williams - 每月交易日(續) [程式碼]

EasyTrader ArtNo 127
上週四每月交易日一文發佈時提到了 3/24 為第三個交易日適合作多,不曉得有沒有讀者作為參考,試單 3/24 開盤 8550 到昨日 3/26 收盤 8711 也有 161點的績效 ,在設定合適停損與停利前提下勝率也將近 60% ,當然讀者手中也一定有很多更優於此的交易策略. Larry Williams只是要強調從交易日的觀點,市場確實有其一些特定的偏離性或說是潛規則存在

以下的測試程式碼加上暴力演算的最佳化方式,可以幫我們列出不同交易日搭配 N日離場或是不同停利/停損設定的績效表現
inputs: EntryType(1),ExitType(1),TradeProfit(0.05),TradeStopLoss(0.03),NBarL(3),NBarS(4);
input: TradeDayML(0),TradeDayMS(0);
vars: IsBalanceDay(False),MP(0),PF(0),PL(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 ;

{ 計算結算日後第 N 個交易日作多 }

if EntryType = 1 then Begin
if isBalanceday[TradeDayML] and Countif(isBalanceDay[TradeDayML] = true ,TradeDayML+1) = 1 then Buy next bar at market;
end;

{ 計算結算日後第 N 個交易日作空 }

if EntryType = 2 then Begin
if isBalanceday[TradeDayMS] and Countif(isBalanceDay[TradeDayMS] = true ,TradeDayMS+1) = 1 then SellShort next bar at market;
end;

if ExitType = 1 then Begin
   SetStopLoss(PL*BigPointValue) ;
end;

if ExitType = 2 then Begin
   if MP > 0 and BarsSinceEntry = NBarL then Sell next bar at Market ;
   if MP < 0 and BarsSinceEntry = NBarS then Buytocover next bar at Market ;
end;

if ExitType = 3 then Begin
   SetStopLoss(PL*BigPointValue) ;
   if MP > 0 and BarsSinceEntry = NBarL then Sell next bar at Market ;
   if MP < 0 and BarsSinceEntry = NBarS then BuytoCover next bar at Market ;
end;

if ExitType = 4 then Begin
   SetStopLoss(PL*BigPointValue) ;
   if MP > 0 and BarsSinceEntry = NBarL then Sell this bar on close ;
   if MP < 0 and BarsSinceEntry = NBarS then BuytoCover this bar on close ;
end;

if IsBalanceDay then setExitonClose ;

當跑出不同的交易日績效後 ,從歷史數據的觀察,我們可以選取自己喜好的日子作為策略或是濾網,以下測試報告為選取多空表現較佳的交易日作回測的結果





每月交易日 + 如意多空網







沒有留言:

張貼留言