交易策略與回測

2021/11/22閱讀時間約 3 分鐘
現在已經有不少的途徑,從簡單的去學MultiCharts的PowerLanguage語法,和經紀商買歷史數據,捏出個策略粗胚後再丟進去圖表跑績效評估。到你用python到雲端演算法交易平台Quantopian抓歷史資料,自己做回測。
回測本身並不是件壞事,你可以透過跑歷史數據的過程中來驗證你的想法是否正確。不過很快的我們就會面臨一系列事後看十分痛苦的過程:參數與策略最佳化。
但單純的參數最佳化很可能只是找到一個剛好最賺錢的組合而已。而價格其實是基於波動率跳動的過程,當隨機價格跳動的雜訊大於本身的規律時,你很有可能是最佳化了繞過歷史雜訊的路徑,而非找到價格變動的特徵。
但價格是基於波動率變動產生的,所以當波動改變時,原本參數就會開始失效。失效的策略自然就賺不到錢。這種針對資料最佳化的偏誤,我們稱為過度最佳化。
為了避免過度最佳化,我們就會開始驗證:「在A的時間序列數據能賺錢,在B時間序列也能賺錢」,到「不同的隨機時間內回測都能賺錢」。不斷地做回測,然後發現一件殘酷的事情:不管你怎麼調整參數,策略上線後績效就是會下降賺不到錢。
但其實這還是掉入同樣的思考巢臼,當你想找出個「避免過度最佳化的方法」,一旦研究方式並沒有改變,你依舊還是在找最佳化參數,那麼結果來說並不會解決問題。你只是從單純的幾年資料,變成用一堆隨機產生的歷史資料跑數據最佳化而已。
所以問題本身還是要回歸到:你要用回測來找到什麼?
如果你是要找規律,找到的東西應該是「普佳化」而非「最佳化」,例如回到均線交叉的策略,如果你認為一定倍率的長短均線組合,可以抓到價格走勢的特徵,那麼應該會出現特定倍率下,例如不同隨機基準的短均線,在7倍的組合都能賺到錢。而在雙因子的3D化表單上會顯現出高原而非孤島。並且在其他時間資料內,該區的高原並沒有消失,那麼這組7倍的倍率資料,才有可能是規律的特徵。
至於只有特定數據組合才賺錢的數據孤島,很可能只是剛好抓到極端行情幾次後的巧合結果;你抓到的可能是剛好賺錢的雜訊。或者看起來有利可圖,但扣掉交易成本後不會賺錢。那麼該數據也不會有用。
先利用回測找到市場的規律與特徵,再找簡單可行的進出方式。會比找到最佳參數來得重要。而變數選擇的隨機性也十分重要,基本上不連續密集的參數,作為隨機測量的變量,會比連續密集的參數,稍微不容易導致過度擬合與最佳化的問題。而利用一項隨機產生的變因,來驗證另一連續的變因是否符合規律,會比單純的找出最佳化前幾名再最佳化的過程中來得好。
所以我個人是有點懷疑完全讓程式自己跑隨機技術指標的組合,在找到一個乍看賺錢的機器學習演算法策略是否是有用的。誠然組合可能巧合地剛好有邏輯性,但也有可能是完全沒邏輯,例如KD>30,ADX<20進場做多,這樣的組合沒有邏輯,而只是參數剛好讓這組合賺錢,那麼基於垃圾進,垃圾出的原則,這組策略上線後不一定會有用。即使不斷地回測壞績效的組合會被淘汰,但結果來說你會得到一個你不知道程式怎麼挑選,而且策略變數、進出本身會變動,裡面是黑箱你不知道怎麼運作的策略。
這樣的演算法你賺錢不知道怎麼賺的,賠錢也不知道怎麼賠的,某種程度來說比一無所知還糟。
    Neko Ko
    Neko Ko
    這裡僅是捐書前的圖書寫紀錄書評之處。
    留言0
    查看全部
    發表第一個留言支持創作者!