凌晨發文,因為 9/1 美國休市,有時間當然寫下文同大家分享,希望對真心想學好quant trading既朋友有幫助。另外阿James已急不及待想出下一段片,剪埋啲片就KO,敬請期待 (我都好期待,因為有朋友話佢把聲好J,好斯文。第二日返工我就俾左而個 messages佢睇,但佢唔好男)。對唔住,深夜寫文係諗到乜寫乜,失禮晒。
今次而篇Alpha文係可以講係其中一篇必睇的Alpha文,重要性同第1篇Alpha文一樣。之前幾篇分別講左點樣有效搵Alpha,同點用唔同策略的Alpha聚合去提高成個portfolio的sharpe ratio。
以上兩個points關注既係點樣「發現」Alpha。但係交易世界裡頭,「發現」而個字係事後先可以知道,因為「發現Alpha」唔同你發現一個金礦,佢係現兜兜一個礦係度,而你「發現」的Alpha可能係overfit出來的,唔做過trade可能都唔知係堅定流的; 另外,亦都唔同做高頻交易可以係好短時間內就知個策略及infra係咪有能力食到成千上萬單交易的微量profits,知道個Alpha係實實在在。如果你係做日線頻率交易,好可能要等幾日什至更長時間先知一單交易是否成功,咁就算而單交易本身係賺錢,亦唔代表做落去一定會有Alpha (可以只係Beta,唔止散戶,好多對沖基金都係只有Beta),一定會贏到個大市,因為好多時個Alpha係交易過程中,係一個未知之數。
所以,好多行內traders/PM其實諗完點搵Alpha後,下一步係諗:
1. 如果Alpha係真的話,點樣令Alpha decay無咁快
2. 如果自己本身係overfit左個Alpha,但又唔知的話,點樣一路trade落去個陣個績效都勉強追到個市 (而度醒目的trader/PM,其實應該諗自己成個交易系統做到幾多單trades後,個realistic sharpe ratio已經追唔到theoretical benchmark,咁就可以提早知道overfit左,再加野減野轉策略,因為明顯個系統唔work。而個做法好多新手trader/PM 都心照不宣)
入正題,今日就係介紹一個方法,去大幅度減輕上面兩個問題影響,如果有睇過Robert Carver書的,你應該要仔細睇而篇文,因為有d經驗係從佢書中未必可體會到,要真係trade過先明。之前都略略提過少少,除左策略「種類」多樣性外,仲有另一種多樣性可以提升策略的Sharpe ratio,而個就係:
「交易策略參數的多樣性」
我諗有唔少朋友都聽過,但首先第一個問題我以前教juniors個陣都遇過,就係班juniors你望佢地個樣好似唔太信而個方法有用。 可能佢地覺得optimize之後直接用最勁個組parameter set就可以,唔明點解要搞到咁麻煩?
咁講,如果未用過而種方法去做交易,其實又真係唔知work唔work。係而度,我無辦法可以將我每日用緊的交易策略的參數公開,但係我可以同大家做一個簡單實驗,你就知係真係有用。
係做實驗前,先簡單講解一下參數多樣性的原理:
參數多樣性 -> 與其只用一個交易策略的某一組特定(優化)參數組去進行交易,參數多樣性傾向在一個交易策略下用多組不同參數進行交易,藉以令整個交易策略達至更加穩定的正向績效結果。
講人話就係,我地根本唔知邊組參數至岩未來市場。就算某組參數以前既表現有幾勁,都唔代表之後一定穩賺,因為市場每刻都變化緊。所以與其將所有雞蛋放係同一個籃度(淨係用一組參數),不如將啲參數分散開黎用 - 即係同時run住幾組唔同既參數。咁樣做有兩個好處:
用簡單的例子黎睇:若只有 20 日突破策略,係大多頭市況當然運行得好,但若果行情轉向或速度有變(如一個更快或更慢的趨勢),好可能就令到原本 20 日的參數設置變得不適應於新市況。如果同時使用 10 日、20 日、40 日等多種突破週期,當行情變快,短週期參數會更早抓到趨勢;行情速度變慢時,長週期參數係波動期間或許能更少被假突破洗出。這使總體績效更穩定,而最緊要係,幾個參數變異都係捕捉緊一種Alpha,就係市場突破。
另外一個關鍵在於,一個參數組內的多個參數變種當然會唔一樣,但交易策略的邏輯必須保致一致,例如用快線穿慢線的交易策略是想捕捉momentum的話,參數組入面的參數變種必須仍要保持例如 10 MA cross above 20 above, 15 MA cross above 30 MA etc,唔可能變成有 20 MA cross above 10 MA。
道理講完,但好多時道理係未必足夠大家去相信同去試驗新的principle,咁我地做個實驗:
個實驗是咁的:
我想測試一下參數多樣化點樣幫我實現更好既整體交易組合穩定性,特別係係風險調整後報酬率同回撤方面既影響。如是者,我用Python測試以下內容:
數據我用由2000年到2024年ES1(標普500期貨日頻率)既數據,然後:
首先,testing 1: 我用python 做出 100組簡單移動平均線交叉策略既參數組合,例如2日均線vs 10日均線、10日均線vs 50日均線等。根據啲咩去做出而d combinations? 好簡單,你有學過stat都應該聽過咩係 np.random.shuffle 及 np.random.seeds(42),係42,個個都用42我為勉大家覺得我係屈左個數,我都跟大家用42。如果唔識python的朋友,可簡單理解為而兩個np functions既作用就係用相對隨機的方法去產出testing 1及2的參數組。策略需要同時進行做多和做空,每次交易成本約為2個基點(來回)。
然後,黎到testing 2: 再創建100組簡單移動平均線交叉策略的參數組合,但而次對testing 1中的每一組參數,例如第一組參數2日均線vs 10日均線,再創建4個子參數組合,所以每一組參數總共有5個子參數組合(包括其本身),所以一共係500組參數組。睇返testing 2頭先講過既個組,入其餘4個子參數組合是原參數的0.75倍、0.5倍、1.25倍和1.5倍版本(如果結果不是整數則向上取整)。例如,2日均線vs 10日均線會產生:2 0.75=1.5 向上取整為2日均線 vs 10 0.75=7.5向上取整為8日均線。所以第二個子參數組合是2日均線vs 8日均線。第三個子參數組合=1日均線vs 5日均線,第四個子參數組合=3日均線vs 13日均線,第五個子參數組合是3日均線vs 15日均線,第一個子參數組合當然是原參數組合本身,即2日均線vs 10日均線。資金平均分配在這5個子參數組合中。需要同時進行做多和做空,每次交易成本約為2個基點(來回)。
最後,計算兩個testings的每組參數的整體報酬率 (mean and median)、夏普比率、最大回撤、持倉曝險、交易次數。
可以好明顯睇到,在扣除交易成本後,testing 2因為每個參數都係5個sub參數組(連自己),所以係而個樣本中一共有500個sub parameters組,得出來的結果對比testing 1 只有100個參數組的綜合metrics,不論係mean returns﹑median returns (升左26%)﹑sharpe ratio (升左~13%)及MDD(降低左~26%) 都有好明顯既增長改進。講多句,就算改左個seeds numbers,都會有類似的明顯改進,sub parameters N數越大改進的performance越consistently stable,如非TC出現問題。

上面而幅Median Performance Metrics己經夠晒說服力,睇唔明或唔信既朋友真係無辦法了。sample size comparison 越大而幅圖越可靠。
另外幾幅metrics圖 (MDD及Sharpe ratio distribution of testing 2 又係完全大勝 testing 1):


而個係又係另一個行內會用的方法,今日分享俾大家了,希望您地可以好好利用,做到屬於自己的一套好Alpha系統。過程不容易的,但肯努力同行岩路,應該會越黎越好。
最後,除左策略參數上的變化外,仲有較少人用的係交易指標的多樣化,例如你有一個mean reversion的策略想實行,與其靜係用BBand,你可以加埋percentage band / OU Process 等指標,每個指標平均分一半訊號weightings,然後再用continuous position sizing 去俾個weightings,穿某個level就可以入/exit。同參數多樣化道理類近。
至於加到幾多係多樣化,其實好多時我的rule of thumb係5-10組已經足夠,但人人策略唔同,都係要試出黎,同埋好睇你本身打算一個策略,一份錢,分幾多份入市,簡單講想分10分你可以linear計出有10組。而個留俾大家去試出一個岩自己的threshold。
提提大家進階alpha plan 仲有一個位。
Cheers,
阿程
(真‧搵Alpha策略系列 8)