對我來說,要能達到正確自主學習、獨立思考的做交易與面對困難
經歷過 驗證(Validation)這一關是我認為最重要的
甚至比起你掌握什麼技術、掌握什麼建模能力都來得更重要
當然,掌握技術能幫助能在初期維持更長的自信、好奇心
了解更多知識、掌握更多術語,讓你感覺更有底氣知道各套理論的優缺點
但是真正要讓你更上一階,走在對的路上,驗證能力 才是最重要的
因為 validation 太重要了,我真的很習慣用英文,所以後續用英文代表
什麼是 validation 呢?就是掌握理想和實際的落差的能力
簡單來說,很多人都關注在 回測 與 前測,或模型上線 之後的差異,有沒有一致
但對我來說,最重要的事情是,你的策略在上線之後 ,和你的前測的差別!
在早期許多 Prop shop(獨立交易的公司)一直有一個傳統
到現在在敝社也保持這個傳統,就是任何菜鳥和新人都是先從 validation 做起
就算他有技術工作,每周也要分 5 個小時學習在簡單的模型上做 validation
如果是文職,例如敝社的 sales,也要能看懂 validation 的基本報告
假設你用時間 1 - 100 天進行回測、調校,然後在 101 天上線使用
然後交易策略在 101 - 120 天進行了 20 天的交易
那麼,你在 101 - 120 天的交易,是否和你現在回測 100 - 120 天相同?
如果有差異,差異在哪裡?這個差異怎麼處理,就是 validation 的能力
假設交易策略都沒什麼問題,而差異若主要來自實際交易的話
通常可能來自於四個方面:
1. 重複發生的不穩定來源:交易成本的變化
2. 偶爾發生的不穩定來源:價格的跳多、跳空
3. 鮮少發生的不穩定來源:市場突然關閉、券商突然出問題、伺服器出狀況
4. 不該發生的不穩定來源:交易程式的問題、整體風控的問題
validation 就是找出真實和理想的差距,到底源自何處
我們應該要盡可能讓理想貼近現實,所以不該發生的都要解決
甚至要看出來,為什麼自己會有 (4) 這樣不該發生的情況
是不是自己有什麼偏見,硬要程式簡潔、硬要邏輯清晰
而 (1) 到 (3) 的部分,就是需要思考怎麼樣能巧妙地在可控範圍中盡量處理掉
通常 在 (1) 到 (4) 中,很大機率都是在和你的習慣做衝突
例如,要解決跳多、跳空,一種方法就是交易很多個標的
但是對於一般人來說,總覺得交易很多個標的很難控制、可能如何如何
這就是你要慢慢從你的習慣思維去找出癥結,到底是什麼原因阻礙你
尤其是對於那些很愛建模的人,沒事就要想盡辦法生出各種神奇交易策略
或是想盡辦法想解釋市場狀況,我覺得這些都可能會阻礙你養成良好的 validation 能力
因為 在這些人眼中,validation 要處理的,正是他們想要忽略掉的
忽略交易成本啦、忽略預測誤差啦、忽略偶爾的小 Bug (還吐舌頭,裝無辜)
然後 validation 要處理得好,通常也需要用很多權宜之計(workaround)
對於那些堅持要能解釋的,你讓他處理 validation 看看,他很可能處理不來
因為他找不到解釋,因為他已經習慣去學那些「有巨大貢獻的理論」
對他來說,沒有理論基礎他根本連嘗試都不敢
當你開始了解 validation 的成因,以及嘗試預測未來可能需要怎樣的 validation 的時候
你就能開始針對實際交易和理想結果的差異程度訂出 潛在威脅等級表
威脅等級意味著,你已經可以預測到未來有多大的 validation error 需要處理
我們公司是用代號,每個等級有一個代號,不容易在程式命名或流水號發生重複
例如 validation 完發現 P1 問題,就要立刻處理,模型與關連策略全部下線
P1 通常主要是 (4) 不該發生,同時發現潛在威脅
(能猜出未來可能送出大單、瘋狂開倉 ... 之類的)
P2 通常是 (3) 鮮少發生,通常能有預備措施,但是預備措施可能勾起程式問題
P3 通常是 (1)-(2) ,例如交易成本逐漸偏高(模型可能過於分散、潛在投資組合風險太高)
是不是計算時間太長 (600 ms 突然變成 1500 ms)
Memory 開始越來越多,過了日光節約時間 Memory 就每天保持異常成長
是不是有東西沒清乾淨、算乾淨?
是不是有 information leakage(在理想情況中因為處理不當,而用到未來的訊息)
不要笑,我有參與過一個台大專門接金融機構 IT 案子的師生團隊
滿滿的 info leak .... 你說,這樣子的系統怎麼用?再會發論文又有何用?
這些的處理,通常都需要大量的 workaround 或雜事(例如值班要 on call .. 等
從 validation ,你才能看到自己在應用你的交易策略理論和邏輯的時候
是不是有什麼先天的理論上的偏見和傾向,這些透過 validation 才能處理