2016年4月24日 星期日

進出場的方法也能最佳化


程式交易小學堂─期貨投機事業的王道
承繼自上篇「函數:十進位轉二進位」。
說實在的,這篇文章在我自己的心中就像是在引導讀者走向 Curve over fitting。這個方法,基本上這麼做跟把圖表攤出來,搞 DataMining 也滿接近了 XD

過去,我們會在策略的測試中使用"參數"最佳化,但是不同的交易方法,就寫很多個訊號,一個一個慢慢對個別交易訊號做參數最佳化,不論你的目的是找出在歷史上表現最優秀的參數,還是為了檢查參數對績效的敏感度。現在,我們可以把所有你知道的進出場"方法",做各種可能組合的最佳化。當然,個別方法中的參數也能一併最佳化。



以下是把進場與出場方法的訊號分別建置,做好最佳化準備,然後再一起放上圖表搞起最佳化大亂鬥。

進場方法最佳化用的訊號(! EntryMethodsOptimize):
input: combinValue(1);
input: entryMethods(3);
var: j(0), enMark("");
array: EntrySwitch[]("");


enMark= _Decimal2Binary(combinValue, entryMethods);
array_setmaxindex(entrySwitch, entryMethods+1);
for j= 1 to entryMethods begin
  if StrLen(enMark) > entryMethods then break;
  EntrySwitch[j]= MidStr( enMark, j, 1);
end;



{All EntryMethods here...start}

if entryMethods>=1 then begin
  if EntrySwitch[1]= "1" then begin
    //進場方法#1
  end;  
end;



var: MA(0);

if entryMethods>=2 then begin
  if EntrySwitch[2]= "1" then begin
    //進場方法#2
  end;
end;



if entryMethods>=3 then begin
  if EntrySwitch[3]= "1" then begin
    //進場方法#3
  end;
end;
{All EntryMethods here...end}


出場方法最佳化用的訊號(! ExitMethodsOptimize):
input: combinValue(1);
input: exitMethods(5);
var: j(0), exMark("");
array: ExitSwitch[]("");


exMark= _Decimal2Binary(combinValue, exitMethods);
array_setmaxindex(exitSwitch, exitMethods+1);
for j= 1 to exitMethods begin
  if StrLen(exMark) > exitMethods then break;
  ExitSwitch[j]= MidStr( exMark, j, 1);
end;



{All ExitMethods here...start}

if exitMethods>=1 then begin
  if ExitSwitch[1]= "1" then begin
    //出場方法#1
  end;
end;  


if exitMethods>=2 then begin
  if ExitSwitch[2]= "1" then begin
    //出場方法#2
  end;
end;  


if exitMethods>=3 then begin
  if ExitSwitch[3]= "1" then begin
    //出場方法#3
  end;
end;


if exitMethods>=4 then begin
  if ExitSwitch[4]= "1" then begin
    //出場方法#4
  end;
end;  


if exitMethods>=5 then begin
  if ExitSwitch[5]= "1" then begin
    //出場方法#5
  end;
end;  
{All ExitMethods here...end}


把以上兩個訊號放到圖表上:


然後開啟訊號的 參數最佳化。conbinValue 就是各種方法組合情況的對應值,透過這個數值的最佳化,把各個放進這訊號裡的"方法",逐個測試 開、關 的狀況,entryMethods、exitMethods 則是告訴它有幾個進場、出場方法要測試:


如果你慢慢搞懂這個作法的運作過程,那麼,轉個彎,延伸一下,券商版也能做出 Portfolio backtester 了。不過,我認為早點買專業版會是比較明智的選擇。

最後容我提醒一下,當你在這個架構中放進比如 3種進場、5種出場,會測試多少種可能組合?是 2的 (3+5) 8次方之多,如果 10種進場、30種出場呢?那是 2的 40次方啊!如果再帶上每個個別進出場方法的參數最佳化,你應該會先需要弄一台超級電腦來幹這件事 XD

熱門文章