淺談策略失效的原因與因應之道(一)

傳統量化(策略)交易延續統計意義的最後一哩路

(分享會講稿整理)

在開始今天的主題分享之前,我們先來回想一下,我們一般在傳統量化交易大概都是怎麼開始入這個門的。

一般我們都會先透過我們在技術分析書籍裡面學到的或是現實生活中看盤經驗觀察到的現象作為一個開始,接著我們會選定一個程式交易平台,像是常見的 Excel / Multicharts / TradeStation / AmiBroker / WealthLab 等等,現在最流行的可能還有 Python

然後我們就開始在我們熟悉的商品上(像是台指期)寫所謂的 “策略” 或是 “模型”。

比如說葛蘭碧八大法則,我們會先在K線圖表上劃一條均線,然後訂定一些進出場規則,例如均線上做多,均線下面放空,離均線太遠就出場,接近均線再重新進場

藉由這樣模型的撰寫,我們就完成了一個所謂的交易策略(程式)

然後我們會透過我們前面所選定的程式交易平台裡面提供的回測工具來對我們的模型進行一些回測或是最佳化的動作,目標是找到一個好的參數。

比如我們剛剛說的葛蘭碧均線系統,我們會透過程式交易平台給我們的回測工具來找出哪個參數在我們的策略裡會讓我們在過去十年的獲利最大

這個時候我們會開始接觸到一些統計學概念的東西,像是 Sharpe Ratio / Z-Score / Profit Factor / MDD / 期望值 / 標準差 等等, 大致上這些評價指標主要的目的都是為了描述兩個概念,一個是期望值,另一個則是風險。

在部分平台內亦有提供一些比較進階的穩健度測試工具,像是蒙地卡羅分析或是移動窗格最佳化分析(WFO/WFA)等等

不過一般來說,在經過一連串的回測與分析之後,其實上面各種回測報告中的統計數據我們大概也都裝模作樣的隨便看看而已,不一定真的會進一步地去應用這些數據。

事實上我們唯一會看的只有下面這個東西。

是的,螢光毛毛蟲

在經過了各種回測最佳化之後,我們終於弄出了一條像樣的螢光毛毛蟲

你心裡一定會想,<<X!,我果然是個天才啊>>。

好像這個世界上只有你找到了交易的真理跟聖杯,

你覺得跟程式交易真是相見恨晚,如果有早一點踏入程式交易就好了,好像如果你早一點與程式交易相遇,那個回測報告裡的獲利數字本來應該都要進你口袋的一樣……….

你可能還會馬上跑去跟你媽跟你老婆說,你打算過一陣子就要把工作辭了…. 連晚上做夢都會笑…

可是通常不用多久,我們就會發現<代誌不是憨人想的那麼簡單>

反正交易的修煉就是不斷地遇到問題,累積問題,解決問題。

在經過前面這樣策略的研發跟心碎的過程之後,如果我們還沒有死心,還想再繼續撐下去,我們可能還會遇到各種問題,如同上圖我們所看到的,單一策略本身除了基本的進出場條件, 像是加碼的問題,停損的問題,策略上下架,過度最佳化的問題等等。而多策略(也就是投資組合)也會遇到一些像是相互搭配(互補)的問題,比例配置的問題?

我們可能暫時也還沒有答案,很多問題就這樣先放著了。

或是頂多把一些我們覺得可會對這些問題有幫助的解決方法,給寫進策略裡,然後我們會發現,策略可能本來只有10行,隨著時間過去,沒幾年就變成上百行了。

隨著商品越來越多,策略越來越多,問題也就越來越多,策略行數也越來越多。

回到今天的主題,今天的主題是什麼?

今天先來講最大條的問題,也就是想最大多數人在量化交易這條路上撐不下去,心碎失敗最大的主因 ~策略失效~

策略失效為什麼會失效,以及因應之道是什麼。

其實可怕的不是策略失效,而是策略失效了,我們渾然不知,或是不知道該怎麼處理

既然要來談策略失效,那我們就先來看看策略失效長什麼樣子?

策略失效到底長什麼樣子,基本上很簡單,就是會讓我們心裡感覺不爽的樣子

我們會發現螢光毛毛蟲開始不往上走了,可能一直不上不下,或是開始往下走

開始很久不賺錢了,甚至開始賠大錢了

進一步觀察我們自己的情緒,好像已經很久沒有開心的感覺,甚至開始迷茫了

如果用比較學術一點的說法,就是我們可以從策略的統計或回測報表上看到一些數字已經開始變化

像是MDD的擴大,或是 Profit Factor的下降,這些都是策略開始失效的現象

前面我們說的是策略失效的現象,而我們主要是從權益曲線與回測報表來做觀察。

那策略失效發生的主要原因是什麼

我們可以想一想,權益曲線是由什麼所組成的,很簡單,就是由一個策略掛在一個商品上來跑出來的

所以很顯然,問題不是出在策略上,就是出在商品

第一個是策略本身設計或引用的資料,有的策略可能是過度最佳化(OverFitting)的產物,畢竟我們在進行策略研發的時候,商品的歷史資料已經算是固定了,這樣的研發方式本身就已經有點看答案寫考卷的味道,會出現overfitting的狀況也不會讓人感覺很意外,美其名這叫做"你觀察到的現象或經驗",卻也可能只是陷入了自己的一廂情願。或是策略中可能引入了不穩定的第三方資訊(這通常比較容易出現在股票類商品的量化交易策略,像是引入了公司惡意發布的虛假資訊,如有問題的資產負債表或是財務報表等)

第二個造成策略失效的原因是市場失靈,或者我們說市場供需或是特性上的轉變,像是中國人從原本不愛咖啡到現在因為西方文化的影響開始愛喝咖啡,造成了全球咖啡市場成長,咖啡期貨價格的驟升。因為地球暖化、氣候變遷、大洪水等等造成了農產品的栽種收成產生巨變。或是2019年讓人遺憾的非洲豬瘟肆虐造成了豬肉期貨價格的飆漲等等

這些都是造成策略失效,影響權益曲線特性變異的可能原因。

但究竟是什麼原因造成了策略失效,是由策略端還是商品端產生其實不一定重要也不可考,更重要的是我們已經從圖表的權益曲線或是回測報告上觀察到了這樣的現象

其實我覺得<策略失效>的討論只能算是把這件事情說了一半,因為他只描述了策略由好的變成壞的那一邊,卻忽略描述了策略由壞的變成好的那一邊,所以筆者認為如果能再補上另外一個詞,這個討論才會變得比較完整,不過筆者在網路上搜尋了一下,發現尚沒有一個既有的詞被使用來形容情況由壞的變成好的這個部分,所以筆者自己私自幫他取了一個詞叫做 “策略覺醒”。 也就是當你去觀察權益曲線,他從不上不下或往下的狀況,突然又恢復往上走了,筆者就稱其為”策略覺醒”。

所以情況不一定是變壞,也有可能變好,不過變化或浮動本身在我們的認知,都可以被看成是風險的一種。

在統計學的討論裏我們可以稱這樣的變化是一種”偏差”(BIAS),也就是實際上跑出來的與我們預期的統計預測之間的差異。

而多數的傳統量化策略交易會失敗最大的原因其實就是因為偏差的產生。當偏差隨著時間越來越大,而我們卻沒有相對應的處理機制,放任偏差的放大,就是造成策略交易會失敗最大的原因。

事實上,策略剛上線時還是有統計關聯的,因為回測的結果令你滿意,所以你將他上線了,這個時候你的策略也就是你的交易訊號其實還是符合所謂的統計學上的概念的。

可是隨著市場的變動,每天世界上有各種不同的新消息新元素被加進來,新的交易越來越多,而你又沒有將新的資訊送回系統做修正,舊有的統計結果可靠度就會持續下降,這也是為什麼很多人會發現策略一開始上線還是會有一段甜蜜期,但獲利效率或穩定度卻會隨著時間流逝而下降。

我們在學機械化交易的時候,最常說到的一個好處就是,電腦會幫我們守紀律,嚴守停損,克服心魔,可是其實成也紀律、敗也紀律,如果系統裡發生了上面說的偏差狀況,你就會發現所謂的守紀律反而是雙面刃,他會幫你嚴守停損,卻也會很有紀律地幫我們持續虧損。

那針對前面所講的策略失效或是策略覺醒的情況,我們應該要用怎麼樣的方式來做因應

前面我們提到了一個東西叫做"偏差",其實重點就只有一個,我們該透過怎麼樣的方法來消除偏差

消除偏差的目的其實就是要幫系統將統計意義重新找回來

在接下來的討論我們主要會看下面這兩種框架。

在傳統量化交易裡面,我們該怎麼來達到消除偏差的目的,最常見的就是大家常聽到的 Walk Forward Optimization,或叫做移動窗格最佳化,他主要是透過重複性地進行參數重新最佳化來達到這個目的,通常在一般常見的程式交易平台裡面也大多有內建基礎版本的WFO/WFA。

另一個方法則是在2016年因為AlphaGo在全球掀起的一陣風潮,即使是現在這陣風潮也都仍舊持續在我們日常生活中發燒的,也就是人工智能,機器學習架構。事實上機器學習架構並不算是太新的東西,他的很多基本的知識跟演算法大約在1950年就已經開始被討論了,只是因為當時的設備與網路的不發達,讓很多概念都不容易被實作與討論,所以沉寂了幾十年。直到前幾年 AlphaGo一戰成名,這個東西才開始又廣泛被拿出來討論跟應用。 關於偏差修正這樣的題目,其實在很多工程系統中,像是車載避震系統、數位通訊系統、車身防滑穩定系統,都有很相似的討論,萬法規一,概念相近,也就是我們說的回授或回饋機制,透過 feedback的機制來進行偏差修正的目的。