說實在的,這篇文章在我自己的心中就像是在引導讀者走向 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