量化投資中有沒有完美的參數尋優方式?

一些一直在思考的東西,大家一起聊聊?

1.有沒有最完美的參數尋優方式?有沒有最完美的參數選擇方式?

2.有沒有最完備的參數尋優方式?有沒有最完備的參數選擇方式?
3.參數尋優時對於不同的時間周期,多長的回測數據具有說服力?
4.對於整體樣本,是否有必要區分樣本內和樣本外,若有必要,那麼樣本內和樣本外的長度分別是多少合適?
5.如何避免過度優化?
6.給出不同參數下的資金曲線,選取什麼目標函數來進行參數選擇?為什麼選擇該種目標函數,是否有更加有效的目標函數?
7.給定目標函數的情況下,如何選取最穩定的參數(參數區間),選定參數的過程能否量化?
8.外推時,參數表現不好怎麼辦?再重新改進參數、調整策略?
9.有沒有不依靠參數的策略?或參數自適應的策略?可否實戰?靠譜否?
10.參數尋優的本質到底是什麼? 直觀解釋是什麼?

有的問題沒有定論,我也一直思考,見仁見智,大家可以一起來交流。


這個問題肯定是見仁見智的,沒有什麼定論。我這裡給出兩個分享和討論,一個是自己的一點思考,另一個是MATLAB技術論壇會員fosu_cdm(論壇ID)陳道民(Chandeman)以前就我的這幾個問題發過的一個文章。兩個分享供大家參考,見仁見智,沒有定論,歡迎斧正、討論、交流。大家互相學習。

1.
參數優化、過擬合問題芻議(by李洋faruto

在量化投資中,定量投資模型的設計好壞無疑是成功的關鍵,單純從數學角度來看,一個交易系統(交易模型)僅僅是一個從行情序列到資金曲線的映射:

f(ts, para) = E

其中f是一個交易系統,ts是某一個投資標的(股票、期貨、期權、外匯等等)的行情時間序列,para是交易系統的參數組,E是資金曲線。

任何一個模型幾乎都會有參數(包括所謂的自適應模型)。

有參數的話,那麼就會碰到參數尋優、過擬合等問題。

參數優化基於歷史數據進行的策略優化。而歷史並不能完全重演。歷史中表現優秀的參數,在未來交易中未必會表現很好。

先來看下幾種常見的參數優化的方法:

1In
Sample-Out Sample

分割回測分析區間,將In Sample 區間的優化參數應用於Out Sample區間,分析收益、風險是否穩定的回測分析法。具體形式見下圖:


這種來源於數據挖掘中的方法,看起來很美,但在量化投資中應用會碰到一堆的實際問題:In Sample和Out Sample樣本大小的確定,合理有效地確定,針對不同的模型,日內、隔夜模型;長、中、段線模型。

2Forward
Test
前進分析法Walk
Forward Analysis (WFA)

具體形式見下圖:


WFA與DataMining中的CV過程本質是一樣,但DM中CV方法很有效,可以在一定程度上避免over fitting問題,但是DM中的數據形式算是比較固定化的,CV折數的確定也可以進行可列的嘗試。

但在量化中,情形卻大不通,策略類型的多樣化(主要是長、中、短周期的不通導致不通模型的平倉持倉周期不通),那麼問題就來了,在使用WFA的過程中,無法有效的給出針對不同類型的模型的一個合理的滑動窗口的確定方案,所以WFA僅僅是看上去很美。

到具體測試環節,以前針對一些常見的模型(ORB,均線等等),我系統性的詳細做過一些WFA的測試,結果也不盡人意,由於金融市場中的行情都是人交易出來的,所以量化交易系統要比DM中的模型複雜很多,參數的分布區域也是隨時間變化的一個函數,WFA並不能非常有效的避免過擬合 和
選出合理參數區間。

anyway,WFA作為參數魯棒性的輔助測試方法工具還是可以使用。

在最後交易層面,在最終確定實際交易參數(組)時,可能可能好多團隊或Quant會選擇那些所謂的「參數平原」,來避免「參數孤島」。比如下面的參數分布的某些區域。

但實際上這種方式也是有指的商榷和思考的地方,我做過相關測試,如果把時間參數看出自變數,把參數的穩定區域看出因變數,你會發現:不同模型的參數穩定區域會隨著時間的變化發生遷移,即那些我們曾篤信的參數穩定區域會隨著市場節奏和市場參與主體的變化而變化,那些在過往測試中穩定的區域,未來也非常有可能變得極其不穩定。

或者換句話說,如果你的目標函數不是個穩態函數,你找到的參數分布區域也不一定是穩態的,那麼什麼樣的目標函數是穩態函數呢?理論層面可以根據泛函分析進行相關的分析和驗證,但在實戰層面這個沒有定論,哪怕是看起來很好的sharpe ratio指標。

那麼到最後在實戰層面,參數的選擇有可行且有效的解決方案嗎?這個我也仍然在思考,我當下能給大家分享的解決方案是:

參數分散化、在盤子足夠大的情況下盡量將參數打散,不要單純篤信那些所謂的歷史參數穩定區域。

2.
關於參數優化的一些膚淺認識(by陳道民Chandeman

難得周末,DOTA打得多也厭煩,還是寫點什麼吧,免得大學浪費掉了。
最近李洋兄(@faruto)又發起了一次關於參數優化的相關問題的探討,我也來湊合湊合吧。

一,關於參數問題

參數問題可以描述為:f(M,S,P)=Output ,即對於M(或者是品種及品種組合),使用S交易策略(或組合),採用P參數(或組合),得到output輸出(包括收益、勝率、盈利因子等等)。由於M是歷史數據,S是你所使用的交易策略,那麼在給定的M和S下,output就依賴於P的輸入。

在此基礎上,那麼過度擬合就表現為,

f(Mi,S,P)=f(Mj,S,P)+e ,即在給定的策略S和最優化參數P下,不同的M(對於同一個市場或同一個品種,Mi 和Mj 我們也可以理解為訓練集合測試集。 )有不同的output,並且其誤差 e 趨於正無窮或超過我們可接受的範圍。
二,關於模式問題
討論參數優化問題,其實可以在一定程度上理解為希望在給定的S和P下,在不同的M下測試得到的output具有一致性,即把M給常數化。我們的解決方法是把M給抽象掉,引進模式識別,從而跳出M的視野,找到不同M的共性,然後從pattern的角度來考量參數優化的問題,即f(S,P;pattern(i))=output 。這樣一個好的策略S或者參數P在不同的pattern中所得到的output應該是相對穩定的(或者至少在有利的pattern中表現出色,在不利的pattern其風險(最大資金回撤深度和長度)應該是在我們的控制範圍之內的,並且基於歷史統計的有利pattern發生的概率要顯著大於不利的pattern發生的概率),我們可以用標準差std(output(i)) (實際中,我們往往只需要output中的某些信息而已,例如收益、盈利因子或者最大資金回撤等等)來描述其穩定性程度。因此,參數的尋優就表示為在參數Pj下,

Min(std(output(i,j))) 。 我們在實際中往往需要對原始樣本進行隨機化處理,然後進行大量的模擬和比較。

這時我們還需要關注ei,sum(ei)應該落在我們可接受的範圍之內,並且奇異的ei越少越好。


當然在實際操作當中,有很多細節需要處理:

(1)如何定義pattern,這個依賴於各自的交易理念、規則和交易級別等等;

(2)如何識別你定義的pattern,大家需要去看看神經網路演算法和模式識別方面的東西,強烈建議看看faruto在MATLAB論壇錄的一個關於SVM神經網路的視頻(好像是09年錄的,當時我還在念高中啊...);

(3)行情的隨機化處理,可以參考一下錢德的超越技術分析一書當中介紹的幾種方法;三,一些問題的初步回答
1.有沒有最完美的參數尋優方式?有沒有最完美的參數選擇方式?
2.有沒有最完備的參數尋優方式?有沒有最完備的參數選擇方式?

我們使用的參數尋優和選擇的方式,是基於pattern比較下的尋優和選擇方式,當然這種方法也不盡完善,還有很多問題,就當作是一種交流吧。

3.
參數尋優時對於不同的時間周期,多長的回測數據具有說服力?
我們並不關心回測樣本的大小,而更關心樣本所包含的pattern的數量,一個能夠在更多的pattern中存活的參數或者策略,我們更放心去使用它,因為它可以適應未來行情的變異,即pattern的轉換。
4.對於整體樣本,是否有必要區分樣本內和樣本外,若有必要,那麼樣本內和樣本外的長度分別是多少合適?
我們一般並不直接從整體樣本中劃分訓練集和測試集,而直接把原樣本作為訓練集,並將其隨機化處理後的數據作為測試集,我們可以隨機構造巨量的行情數據。
5.如何避免過度優化?
這個問題我覺得要先對過度優化進行定義噢,一般情況下把訓練集的測試結果和測試集的測試結果不一致認為是一種過度優化的結果。但我們的作法是在pattern條件下考慮兩者是否一致。舉個例子說,如果某個策略S對某一類的行情有很好的表現,但也有它的軟肋時,那麼當樣本內和樣本外的pattern不一致時,很可能它的最優參數的差異可能很大。這時的結果不一定是過度擬合的結果,只不過是遇上不利的行情而已,當然這個問題不僅僅是個參數優化的問題,還是個策略設計的問題。
6.給出不同參數下的資金曲線,選取什麼目標函數來進行參數選擇?為什麼選擇該種目標函數,是否有更加有效的目標函數?
這應該是個參數優化目標的選擇問題,我們一般用的主要評價指標是Min(MaxDrowDownDuration),當然也可以給定一定限制條件,例如盈利因子大於2,等等。
7.給定目標函數的情況下,如何選取最穩定的參數(參數區間),選定參數的過程能否量化?
我們往往是直接選擇最優的那一個,當然這個與我們的事前的參數控制工作有關。
8.外推時,參數表現不好怎麼辦?再重新改進參數、調整策略?
(1)不改變參數下,重新校驗前面的pattern的識別
(2)在(1)校驗後如果效果仍然不行,則對參數重新調整
(3)前面工作仍然無法奏效時,需要對策略進行修改
(4)來論壇拋磚引玉,學習別人的思想和方法
9.有沒有不依靠參數的策略?或參數自適應的策略?可否實戰?靠譜否?
其實不依賴參數的策略不一定好吧,一個策略的生命和靈活性就體現在參數的調整過程中,當然這也涉及策略類型的相互轉換問題,一下子講不清楚,建議看一下Browm的Technical Analysis For the Trading
Professional一書,好像有中文版的。
10.參數尋優的本質到底是什麼? 直觀解釋是什麼?
這個問題還真不好回答啊......


如果根據地球生命出現以來幾十億年的歷史數據,挑選出在未來一億年內能一直存活的物種,你會挑選什麼?老虎,鱷魚,羚羊還是藍藻?

我想正如物種的生存一樣,交易中想要長久盈利,應將策略構建於市場難以撼動的基本特徵上。

而參數選擇的層面,相較於「尋優」,我覺得稱之「避劣」更合適。就像,你很難知道是東北虎還是孟加拉虎將來在地球上生存得更久,但大概基因突變的白虎會最先消失。

當然了,無論東北虎還是別的虎,在地球上最後肯定活不過藍藻。


沒有穩定的最佳。


回答所有問題之前,先做個鋪墊:

一、交易的終極目標是尋求長期穩定盈利,我認為這個目標是通過三個模塊實現的——策略、組合和資金管理,每個模塊都發揮了盈利、控虧和穩定的作用,但是不同模塊發揮的作用比例不同,比如策略主要發揮的是盈利。

二、因為這個問題只問到參數組合,代表提問者並沒有思考到組合和資金管理問題,只是想通過策略就簡單達到穩定盈利的目標。

三、我認為參數只是交易中一個環節而已,而且不是核心環節。站在非核心環節談交易問題,就好比站在是否有香菜的角度談一碗牛肉麵好不好吃,不考慮牛肉、湯底、面等等環節,總覺得有些地方自己也沒辦法說清楚,拋磚引玉,供大家參考。


1.有沒有最完美的參數尋優方式?有沒有最完美的參數選擇方式?

我認為沒有。在策略研究最早階段,我試過WFA等多種方法,尋找參數規律,但未找到穩定方案。

根據後期研究經驗,假設只是通過參數尋找穩定盈利,建議考慮以下問題:

a、策略參數不能超過3個,否則有過渡擬合風險

b、策略能否通過嚴格壓力測試,參數只是最初級的壓力測試水平

c、最優參數表現是動態的和不可預知的,但是最優參數區間是可以預知的


舉個例子,假設策略是單一參數,參數範圍1—10。經過壓力測試,顯示穩定盈利的參數波動範圍是3-5,未來穩定盈利的參數是哪一個這是不可預知的,但是可以確定穩定盈利參數應該是在2-6之內的某個參數(即將歷史穩定盈利參數範圍擴大一部分)。


由於最優參數不可預知,所以我認為最好的處理方案是通過資金管理(即交易系統的模塊之一)來處理參數不可預知問題。

具體處理方案包括整體資金頭寸分配和單一參數交易時的加減倉。舉個例子,穩定盈利參數範圍是2-6之內,那麼參數2和6分配20%的資金,參數3、4、5分配60%的資金。

最後說明一點,最優盈利參數區間也是會發生變化的,但是其變化範圍和時間會比較長,可以通過WFA等方式,逐步調整最優區間。


3.參數尋優時對於不同的時間周期,多長的回測數據具有說服力?

這個問題也是我的早期研發問題之一。

我認為回測數據不在於長度,而在於測試範圍。

a、時間長度我認為3年足夠,測試十幾年的數據毫無必要

b、測試範圍一定要覆蓋多參數、多周期、多品種。

其中多參數和多周期的壓力測試級別較低,多品種推薦選擇相關性低的品種,建議考慮外盤股指和大陸期指組合的壓力測試。


4.對於整體樣本,是否有必要區分樣本內和樣本外,若有必要,那麼樣本內和樣本外的長度分別是多少合適?
沒必要。

我認為單一品種樣本內和樣本外不屬於壓力測試範疇,而是應該屬於資金管理範疇。

這個問題與提問者的出發點距離較遠,就不詳細說明。


5.如何避免過度優化?

如果策略能夠通過壓力測試,結合資金管理和組合,過渡優化的風險會大大降低。

如果僅僅局限在最優參數問題上,即使是再好的策略,實盤的時候過度優化的問題早晚會暴露。


6.給出不同參數下的資金曲線,選取什麼目標函數來進行參數選擇?為什麼選擇該種目標函數,是否有更加有效的目標函數?
最大回撤、交易頻率、勝率等幾個常用指標足夠,不需要過度關注細節。

交易不是由參數一個環節決定的,而是策略、組合和資金管理三個環節同時運作決定的,如何連接各個環節,保證運作的穩定性才最重要


7.給定目標函數的情況下,如何選取最穩定的參數(參數區間),選定參數的過程能否量化?
在確定能夠通過壓力測試的前提下,選擇表現最穩定的組合,實盤的時候,最穩定的資金多放點資金,在最穩定附近的參數也放一些資金。

8.外推時,參數表現不好怎麼辦?再重新改進參數、調整策略?
參數是最初級的壓力測試,如果所有參數組合表現都不穩定,就是策略有問題


9.有沒有不依靠參數的策略?或參數自適應的策略?可否實戰?靠譜否?
我沒見過不依靠參數的策略,技術水平有限。


10.參數尋優的本質到底是什麼? 直觀解釋是什麼?

參數尋優的本質是還沒有意識到交易系統是個多模塊問題。

再多的點也不可能描述一個平面,同樣的道理,參數問題即使思考再多,不考慮後續其他模塊的問題,也不能解決交易穩定的問題


同意樓上幾位的觀點:不可能有最優的參數的存在,木有最優,只有更優吧~

然後談一談對參數優化的一些看法:

最優參數的存在是聖杯存在的充要條件,所以不太可能有最優參數的存在

窗口期利用震蕩期,或許可以得到生存能力較強的參數

利用參數平原對優化結果進行選擇可以得到魯棒性較強的參數

參數調整很大程度取決於主體跟客體,聽說自從開了夜盤賭場後好多EA都不靈光了-_-#

外推的表現與參數調整可以嘗試建立懲罰函數,如模擬退火演算法

有不同觀點歡迎指正~~~


1. 有沒有最完美的參數尋優方式?有沒有最完美的參數選擇方式?


我非常誠懇的告訴你,答案是沒有,但是! But
!! However !!! 對於不同的模型,確實有些方法會更快更精確更容易實現,注意這三個更啥啥可能是指三個不同的優化方法,最重要的是你需要什麼,比如你對跑程序時間的要求,對於精確性的要求等等。


從優化方法來說,發展已經相當多樣化。主要分兩大宗:

最先發展起來的是迭代法,準確的說源自數學界的大神高斯(Cerk
Fruedrucg Gauss). 高大爺在給學生的一封信里解了個四維方程組,結果用到了迭代的思想就成為優化的一個門派,服! 簡單來說其中的演算法就是給一個最優參數的估計,然後通過計算預估值的誤差來改進這個參數,每次迭代後改進的參數作為下次迭代初始參數。比較常見的有梯度類方法,遺傳演算法等等。

另一種叫做啟發式演算法,這就需要點統計或者蒙特卡洛的思想在裡面了,簡單來說最初給很多的參數估計,然後找到最短路徑,也就是這一批參數里找一個最優的,之後進行下一次篩選,這些賦值過程可以服從不同的概率分布,下一次篩選的賦值也可以與前一次結果有關聯。這類演算法包括模擬演算法以及量子化演算法等等


2.有沒有最完備的參數尋優方式?有沒有最完備的參數選擇方式?


(首先,誰能告訴我這跟第一個問題有啥區別!就一個字不同!這是想搞量化還是玩大家來找碴!!!)


我非常誠懇的告訴你,答案是沒有,但是! But
!! However !!!,通過分析不同的模型(策略)特點以及優化方法,是會有彩蛋的哦 ^-^

做個對比,舉個栗子!


A 。最速下降法(steepest decent method) 是最簡單的一種梯度演算法,給一個初始預估值,迭代搜索會沿著梯度方向尋找,類似於下圖的路徑



B。粒子群優化法(particle swarm optimisation)

粒子群優化法源於對動物行為的觀察,假設給定的一批參數估計值,他們互相之間是有聯繫的,用拓撲的方式看就像下圖


其中每一個圓相當於一組參數值的解,通過考慮各個解得權重和假設他們的聯繫,來多次賦值比較得出最優的那一組解。

所以你可以看到,即使是在演算法中,我們也不能說得出的解是最完備的,只能說得出了一個比其他賦值和迭代更好的解。在實際應用中,很多創造性的思維可以應用。


比如,A最速下降法的優點是速度快,但是對非線性問題的收斂性很差,初始值選擇很難,適用性很窄。


B 粒子優化法適用性很強,但是要確認賦值區域,而且運算很慢。

但是如果我們結合A 和B, 用B 方法得出一組最優賦值,作為A 方法的初始值,就可以得出優於兩種方法的組合拳,而且運算時間和可控性都很好。

這些新方法的研究很多都是站在巨人的肩膀上,關鍵在於研究以及找到適合本身的交易策略。


3.參數尋優時對於不同的時間周期,多長的回測數據具有說服力?

這個問題就仁者見仁了,但是這個問題本身就站在了一個錯誤的立場,為什麼要用回測數據來證明模型和參數的說服力,而不用回測數據來探討參數的魯棒性呢?

比如說回測數據增加一個單位量,可以檢測參數的改變數,以此來推測策略是否穩定,對於能夠穩定盈利的策略,參數是不應該有大起大落的


4.對於整體樣本,是否有必要區分樣本內和樣本外,若有必要,那麼樣本內和樣本外的長度分別是多少合適?


(呃,如果要區分樣本內和外,那還叫隨機的樣本么?)

我非常誠懇的告訴你,答案是沒有,但是! But !! However !!! 如果區分開來有啥不同的話,那可能就是你的問題了。。。


5.如何避免過度優化?


對於一個數學優化問題,方法其實多如牛毛。 你可以在數據中加入uncertainty, 或者定一個distribution 用蒙特卡洛試試,此答案蜻蜓點水,我就算拋磚引玉了。。。


6.給出不同參數下的資金曲線,選取什麼目標函數來進行參數選擇?為什麼選擇該種目標函數,是否有更加有效的目標函數?


The objective function: 最常用的做法就是 least square method, 就是和線性回歸里定的一樣,當然你可以自己定阿,看你的目的是什麼,想找最好的portfolio
可以比
sharp ratio, 想防風險最小化波動性,當然你也可以都算進去給不同的權重,看個人風格


7.給定目標函數的情況下,如何選取最穩定的參數(參數區間),選定參數的過程能否量化?


我就給你點提示,在數學上可行,你可以最優化參數區間的,就是選定參數的過程可以算做對於下一個優化的優化(有點拗口。。。),但是迭代法是不行的,粒子演算法或多目標規劃很多都是實現了這個過程的

8.外推時,參數表現不好怎麼辦?再重新改進參數、調整策略?


普通人看錶象,聰明人看規律

9.有沒有不依靠參數的策略?或參數自適應的策略?可否實戰?靠譜否?


你可知道在統計學裡有兩大派:一個是大家都在用的回歸分析,另一個就是分類,通過數據不告訴你任何係數,只告訴你是或者否,自己做一個Stochastic
Filter, 不會給你任何參數,就告訴你同志們上還是同志們撤。。。推薦Bayes" theorem,
就是概率論里條件概率那一套,做Filter, 斯坦福的統計學家們現在還在用,R有源代碼的,簡單粗暴。


10.參數尋優的本質到底是什麼? 直觀解釋是什麼?


最優參數的使用就是對模型策略和優化方法的信任,另外送你一句話,支撐我學了很多年數學

「 All the mathematical models are wrong,
but some are useful」


最好的參數屬於歷史,不屬於當下。


拋磚引玉,慢慢改。這裡的參數是作為變數的參數,假設模型固定的情況下。好像其他答案說的都是建立模型比較困難,比如時間,最優時間得不到,其實是沒辦法把時間正確的放在模型裡面表示出來,那這樣就不要把它放進模型了,這樣模型就可以得到最優參數了。既然問題只是問的找最優參數,可以假設模型固定,模型固定的情況下,最優參數還是基本上可以得到的。得不到的情況應該是工程能力或者數據不夠,而不是理論不夠。
一,如果參數是指可以控制的部分,完美方式肯定有了,為啥這樣說,基本上模型都可以解,只是有的費點勁,有的要近似一下。沒有說能解出來的是解錯的,只有是模型設計的不對的。跟做應用題一樣,方程列對了,觀測夠多,總是能解出來的。
第二個,完備不確定是啥,是說參數解總是能收斂到求解空間嗎,如果是就不能,總是有求出來的參數是超出要求的啊,比如一個投資要求投資額度100w,手頭只有20塊錢,策略就掛了。
三,回測就是一個最短時間單位就可以了,比如那種leave one out的方法就是每次測一個,不過是測很多次哦。
四,樣本內是求參數的,樣本外是測試參數的,既然只是求個參數,也不是一定要分的。
五,避免過度優化方法很多,基本就是盡量覆蓋所有數據的可能性,不要模型太複雜之類。這個有很多在網上
六,啥是資金曲線回頭查查,不過更加有效很難界定,如果知道更加有效那還不用就可能是覺得太麻煩了吧。
七,目標函數定了,就求解優化問題了吧,不量化怎麼求解?
八,不好就改看看,要不也沒辦法。
九,有不用參數的,不過要hyper參數,數據夠多就挺靠譜,但是問題太複雜了模型也不好解。
十,本質就是解方程,或者不等式,直觀解釋就是怎麼推敲出事情的本質。


有。題主你給我一百萬。我教你。

開玩笑的。當然沒有。連數學本身都不是完美的。參數優化人為痕迹這麼嚴重的事物,怎麼可能有完美的呢。

不過還是認真回答一下題主的N個問題。

1.有沒有最完美的參數尋優方式?有沒有最完美的參數選擇方式?

沒有。


2.有沒有最完備的參數尋優方式?有沒有最完備的參數選擇方式?

沒有。


3.參數尋優時對於不同的時間周期,多長的回測數據具有說服力?

看情況。


4.對於整體樣本,是否有必要區分樣本內和樣本外,若有必要,那麼樣本內和樣本外的長度分別是多少合適?

本質沒區別。但為了信心,有必要。(別笑,量化投資,對策略的信心很重要)。看情況。


5.如何避免過度優化?

沒絕對的辦法。目前看,勉強能用的3點:

1. 現實的邏輯足夠強。

2. 參數盡量少。

3. 樣本盡量多。

重要性依次排列。


6.給出不同參數下的資金曲線,選取什麼目標函數來進行參數選擇?為什麼選擇該種目標函數,是否有更加有效的目標函數?

目標函數難道不是很主觀的么?有人在乎收益,有人在乎最大回撤,有人在乎sharp。


7.給定目標函數的情況下,如何選取最穩定的參數(參數區間),選定參數的過程能否量化?

能量化。這裡講不清楚。


8.外推時,參數表現不好怎麼辦?再重新改進參數、調整策略?

如果沒有現實邏輯支撐,基本上決策就是拋硬幣。

如果有現實邏輯支撐,仔細檢查現實邏輯是否改變。


9.有沒有不依靠參數的策略?或參數自適應的策略?可否實戰?靠譜否?

當然有。可以。靠譜。但我不會告訴你啊。


10.參數尋優的本質到底是什麼? 直觀解釋是什麼?

這是個哲學問題。我的理解是,本質是為了用模型逼近世界運行的規律。可以參考拙作:

為什麼回測效果非常好的策略實盤卻不行? - 知乎用戶的回答


以上。


No free lunch theorem: 對所有問題作平均時, 所有尋優演算法的表現都是一致的, 換句話說就是各種優化演算法的總體效能無法定義優劣. 雖然把問題集限制在某一類的尋優問題時, 可能會發現某個演算法對該類問題表現很好. 但量化投資的領域相當廣. 有涵蓋很多一堆概念(對沖, 波動率, 定價, 作市), 極難歸類為一類問題, 所以實在不應該特意去找什麽量化投資的完美演算法

簡言之, 應當要考慮的是目標函數的強健性跟抗噪性等, 而不是演算法.

1. 目標函數驗證的狀況要廣泛, 其涵蓋範圍也要有合理邏輯. 舉例來說, 若是你有一個策略, 只在中石化測試的夏普值就不怎可靠, 但若是在所有化工類股測試的夏普值平均, 抑或甚至涵蓋世界各國所有的化工類股, 可靠度就會大增了.
但應該不會有在全世界所有類股的股票都表現很好的策略, 所以這涵蓋範圍就太廣了

2. 目標函數要能忽視極端的收益, 舉例來說, 某個策略在一段時間翻了兩三倍, 這段時間就應該當作中彩票而不是策略有用, 其收益值就直接刪去不用. 可以在目標函數設一個門檻值, 短時間收益過高就不計

3. 目標函數要納入回復損失所需的時間. 即損失100元後, 要多少時間才能賺回這100元. 若是你某天損失了33%, 那就需要賺回50%才能回復損失. 若是一個策略要花十天才能賺到這50%, 那在這每一天都在賭會不會又遇到同樣的損失, 若是又遇到一次33%的損失, 那整整需要70%的超高收益率才能彌補損失. 因此以最快速度回復損失才能避免這種情形

4. 參數少. 這是奧卡姆剃刀原則, 因為每個參數的存在, 都假設了一個因素的存在. 模型基於的假設越多, 模型正確的機率越少.參數多導致正確率低的這過程本身說不定也能建模, 但我沒頭緒怎建模

另一提, 我沒在用in-sample out-of-sample法跟WFA法, 因為有限長的時間序列再怎分切也就三五組數據. 方法中第1點的提昇涵蓋範圍, 就可以藉由非常多組的數據降低過擬合的機率, 但怎選擇涵蓋範圍就看個人的造化了, 範圍中的實例要有某種可替代性或相似結構, 例如玉米跟小麥屬同類, 殼牌跟埃克森屬同類, 才能反映出策略本質內涵. 這點來看in-sample out-of-sample法跟WFA法使用上還是比較簡易


任何一個所謂完美的參數擇股,一旦被公布了容易被失效。所以你想要找到好的參數擇股條件就慢慢的、不斷的、重複去測試吧,我自己就是在果仁網(http://www.guorn.com)通過不斷測試,不斷剔除,至少已經測試過100個多策略了,沒有最好,只有更好,而且也分時間段。


細分問題好多,我主要回答第一個問題吧,我個人認為沒有最佳參數優化方法,甚至根本就沒有絕對的最佳參數。最佳參數一定是特點品種特定時間段特定策略下的最佳參數。

參數優化其本質就是通過模擬過去試圖預測未來,未來既然不確定,行情會不斷變化和發展,最佳參數也勢必不斷變化。

所以我們只能謀求階段性較優參數,而最佳參數就是聖杯,是浮雲,一切都是浮雲吶。


這個問題確實是沒有定論,在這裡我只能為你提供一些參數尋優的技巧:經驗、抽樣、局部平滑和移動平滑,希望能在量化投資中幫助到你。

一、最優化的數學方法和統計方法

(一)數學中的優化方法

在數學中,對於可導函數,可以完美的定義最優化問題:

如果存在一個解x*,使得

則叫做上述問題的全局最優解。同樣可以在某個局部區域定義局部最優解。

數學問題中,處理上述問題的常見方法有幾種,我們不展開介紹,主要簡述其以導數為核心手段的優化思路。

1、拉格朗日乘數法

對於處處可導的函數,可以通過引入拉格朗日乘子來將含有n個變數和k個約束條件的約束優化問題轉化為含有(n+k)個變數的無約束優化問題,直接求導求解。拉格朗日乘子背後的數學意義是其為約束方程梯度線性組合中每個向量的係數。

2、梯度下降法(Gradient Descent)

也叫做最速下降法,如果函數可導,就可以算出梯度,朝梯度下降方向尋找極小值,朝梯度上升方向尋找極大值。可以通過步長逐步搜索,直到函數變化值非常小,停止搜索得到極值。

3、牛頓法(Newton』s Method)和擬牛頓法(Quasi-Newton Methods)

對導數泰勒展開,相當於應用二階導數尋找極值方向,收斂速度更快。

4、共軛梯度法(Conjugate Gradient)

和梯度下降法類似,僅需要一階導數信息,但是克服了收斂慢的缺點,算是解大型非線性最優化最有效的演算法之一。在各種優化演算法中,共軛梯度法是非常重要的一種。

(二)統計意義上的優化

對於凸函數,數學層面的演算法會非常有效,但是對於奇異函數的尋優,就需要各種統計意義上的演算法找到相對最優的解。

1、遺傳演算法(Genetic Algorithm)

由美國的J.Holland於1975年首先提出的啟發式演算法。遺傳演算法是一種智能隨機搜索演算法。遺傳演算法仿照自然界中生物的進化過程,種群的進化遵從自然選擇和適者生存,更適應環境的個體有更大機率存活和繁衍,適應性差的個體則會被淘汰,攜帶較高適應性基因的父母進行繁殖可能產生適應性更強的後代。遺傳演算法模擬上述過程,其一般流程如下:

2、模擬退火(simulated annealing algorithm)

基於1953的Metropolis思想,由S.Kirkpatrick,C.D.Gelatt 和 M.P.Vecchi在1983年所發明。

模擬退火演算法是一種貪心演算法,但是在搜索過程中引入了隨機因素,以一定的概率接受一個比當前要差的解,因此就為跳出局部最優解到達全局最優解創造了可能。因此模擬退火演算法也是一種啟發式演算法。

其基本思想是把某類優化問題的求解過程與統計熱力學的熱平衡問題進行對比,試圖通過模擬高溫物體退火的過程來找到優化問題的全局最優解或近似全局最優解。金屬退火原理是將金屬加溫至充分高,再讓其徐徐冷卻,加溫時,金屬內部粒子隨溫升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最後在常溫時達到基態,內能減為最小。

3.蟻群演算法(Ant System, Ant Colony System)

是由義大利學者Dorigo、Maniezzo等人於20世紀90年代提出來的啟發式演算法。

將蟻群演算法應用於解決優化問題的基本思路為:用螞蟻的行走路徑表示待優化問題的可行解,整個螞蟻群體的所有路徑構成待優化問題的解空間。路徑較短的螞蟻釋放的信息素量較多,隨著時間的推進,較短的路徑上累積的信息素濃度逐漸增高,選擇該路徑的螞蟻個數也愈來愈多。最終,整個螞蟻會在正反饋的作用下集中到最佳的路徑上,此時對應的便是待優化問題的最優解。

螞蟻找到最短路徑要歸功於信息素和環境,假設有兩條路可從蟻窩通向食物,開始時兩條路上的螞蟻數量差不多:當螞蟻到達終點之後會立即返回,距離短的路上的螞蟻往返一次時間短,重複頻率快,在單位時間裡往返螞蟻的數目就多,留下的信息素也多,會吸引更多螞蟻過來,會留下更多信息素。而距離長的路正相反,因此越來越多的螞蟻聚集到最短路徑上來。比如下圖:

兩隻螞蟻從A點出發,一隻走AD,一隻走ACD,每個單位時間走一步,考慮9個單位時間之後,第一隻走到了終點D,第二隻剛走到C,僅僅是一半的路程。

第一隻螞蟻開始返回,等到第二隻螞蟻走到D時,第一隻返回到了起點,這時過了18個單位時間。這時,AD中每一步的留下的信息素是ACD路徑中信息素的兩倍。36個單位時間後,第二隻螞蟻剛返回起點,ACD每個點上留下2個信息素,但是ABD上留下4個信息素。然後蟻群在AD上增派螞蟻,ACD上依然一隻螞蟻,再經過36個單位時間後,兩條路線上的信息素比例為4:1,這樣隨著時間的增加,蟻群在AD上增派的螞蟻越來越多,信息素也越來越多,最終所有螞蟻都放棄ACD,選擇AD。

螞蟻具有的智能行為得益於其同時具有多樣性和正反饋的行為規則。在覓食時,多樣性使螞蟻不會走進死胡同而無限循環,是一種創新能力;正反饋使優良信息保存下來,是一種學習強化能力。兩者的巧妙結合使智能行為湧現,如果多樣性過剩,系統過於活躍,會導致過多的隨機運動,陷入混沌狀態;如果多樣性不夠,正反饋過強,會導致僵化,當環境變化時蟻群不能相應調整。

蟻群演算法可以用來解決經典的TSP(Travelling Salesman Problem)問題。

AS演算法中,需要定義信息素強度,能見度,隨機選擇比例等一系列符號體系:

經典蟻群演算法可以輕鬆應對城市小於75的問題,這些年,蟻群演算法有大量的變種,越來越完善,可以解決更大型問題。經過對比,在大型TSP問題中(最多包括132個城市),蟻群演算法表現要優於遺傳演算法和模擬熄火。

二、CTA策略的最優化原則

(一)CTA中的優化

在上述的簡介中我們看到數學方法的優化往往是針對凸函數,從導數或者梯度的角度進行尋優;統計方法的優化可以放大到複雜函數,用啟發式的演算法,不斷以概率的方式尋找或有的全局最優解,概率最大的意義是給了局部非優解一定容錯率,讓解可以以概率收斂到更優的解。

CTA策略中,我們優化的目標其實是策略業績(收益率、回撤、夏普比率、勝率、賠率),函數就是我們的交易規則(包含我們設定的參數),變數就是給定區間內所有的K線信息。我們期待對歷史的K線建立交易模型,然後對於未來再現的K線可以進行運算,得到優異的業績函數取值。

CTA策略的優化中,前面介紹的方法有一些不適用,因為我們並不是對一個確定的函數進行優化,而是對一組自變數是隨機數據的函數進行優化。

(二)統計學習原理介紹

這個指標最直觀的解釋是,估計誤差有兩部分組成,第一部分是估計值的方差,這個衡量估計模型的穩定型,模型越穩定,方差越小;第二部分是估計值的偏差,這個衡量估計模型的對訓練數據的精確度,模型越複雜靈活,這個值越小。方差和偏差是硬幣的兩面,如果我們擬合簡單的線性結構,估計值不會隨著訓練樣本的變化而顯著變化,方差必然小,但是肯定會和真實值之間有一定的差異,也就是方差比較大,估計不夠準確(除非真實結構就是穩定的線性結構),對於新的樣本點,這有可能造成MSE偏大;反之,如果我們用比較靈活地模型,類似階近鄰估計,這個估計對訓練樣本而言,偏差非常小,但是估計值本身的方差肯定會比較大,因為數據一變,階近領估計的結果就會大幅度變動,這也有可能造成新樣本點MSE的偏大。所謂的過度擬合(Overfitting),其實就是說對訓練數據過度建模,在訓練數據中偏差幾乎為零,但是這個模型本身不穩定,方差很大,樣本一變,估計值的變化會很大,進而造成對於未知值的均方誤差很大。參數很多的結構化估計趨近於非參數的靈活局部估計,都會有過度擬合的傾向。

(三)CTA策略的尋優難題

CTA策略的參數尋優問題,看起來很簡單,但問題的本質其實和前面介紹的理論背景息息相關,這個問題是數學的,又是統計的,同時更是藝術的。

回到CTA策略的本質,想想我們在構造一個什麼樣的東西。

1、變數

CTA策略中,最本質的變數其實是價格,和數學問題相比,這個價格變數是隨機的,和一般統計問題相比,這個變數是個近似連續的隨機過程(每個tick都是一個隨機變數)。

當我們引入CTA這個語言體系,其實是已經假設要對趨勢進行刻畫和跟隨,tick層面的數據無法進行有效的趨勢跟隨,因此把tick數據抽樣成給定周期的K線數據,就是非常重要的一步。因此我們的面對的變數,可以看做是個離散時間的隨機過程。但是,我們處理這個隨機過程的方法並不是追求平穩性變換,最終根據隨機過程各個變數在時間層面的穩定性,發掘出整體的概率結構。

2、目標

CTA最核心的假設是,大部分時候隨機過程在震蕩,少部分時候,出現明顯的方向性趨勢,我們的目標就是根據方向性趨勢的出現進行趨勢研判的預測(gen sui),獲取收益,如果預測(gen sui)錯誤,或者方向回調,就止損出場,等待新的信號。

針對這個假設我們構造的交易系統,其實就是一個用來解決上述問題的函數,這個函數的輸入雖然是一維隨機過程,由於我們要使用隨機過程的時間信息,實際上是個高維向量,我們針對高維向量通過交易函數(入場、止損)計算出來對應的交易業績。

CTA參數尋優最尷尬的地方在於我們對線底層的隨機結構一無所知,儘管有效市場假說等從隨機過程的角度給出了解釋,但是交易是否賺錢很難用統計檢驗去驗證。統計假設檢驗可以以一定的概率證偽某種特定的隨機結構,但無法證實,證實接受可能是檢驗的功效不足無法證偽,也就是假設檢驗很難證實一個確定的結構,隨機遊走只是一種猜想。CTA賺錢僅僅是說某些局部的趨勢結構具有延續性,整體上趨勢結構的盈利空間,大于震盪結構的止損空間,因為樣本不足,這個函數結構很難直接去證偽。

回到CTA參數尋優,我們面臨的問題並不是數學優化中梯度下降快速找到最優解的問題,也不是統計估計中根據隨機結構平衡方差和偏差得到最優估計的問題。真正的問題在於我們面對一個數據隨機,但是我們對隨機結構並不知曉的估計,同時我們的估計損失函數是一個複雜的交易系統(哪怕最簡單的均線系統,也不是一個簡單的數學函數),如果我們在樣本內暴力尋優,可能可以讓估計偏差最小,但是這個交易系統的穩定性非常差,因此大邏輯上可以做到的只能是讓交易函數儘可能保持簡單,m≤3,保證估計函數的方差較小,然後通過適當的優化,減少估計偏差。

3、手段和方法

1)控制參數個數

一個優秀的交易系統,可變的參數應該是2,最多不要超過3,這一方面控制了交易系統的複雜度防止高度擬合,也防止在更高維度估計參數引起的高維詛咒。因為交易系統本身對K線進行了降維處理,參數的個數類似於變數的個數。

2)避免業績孤島

對於m≤3的CTA策略,由於涉及的計算並不是特別複雜,因此我們總是可以對參數進行窮舉式運算得到各種可能的業績值,這時候最主要的問題就是最優的業績是歷史偶然事件,還是真正我們所捕捉到的隨機結構?這個時候最核心的方法是看最優業績周圍的參數分布,如過周圍參數的業績是平滑和漸進的,那麼最優業績是可信的,否則只是偶然事件不可信。

3)重視經驗參數

漫長的技術分析發展史中,技術分析師們根據交易實踐矯正了很多有實際用途的參數,比如5/10/20這種或者7/14/21這種和周、兩周、月等曆法對應的實踐,又比如1/2/3/5/8/13/21/34/55這種Fibonacci數列,經驗參數本身就是避免過度擬合的方法之一,如果經典參數和平滑業績相對應,那一般是可以接受的。

三、客觀上的主觀:現代統計學技巧

(一)抽樣法

為了避免過度尋優,也提升適當計算效率,對於整個尋優的參數尋優進行啟發式抽樣演算法,也是一種有效的辦法,這和模擬熄火這種方法類似,但是更加簡單直觀。

常見演算法是:

上述方法是量邦天語定義的後驗方法,運行時日誌如下:

上述方法是量邦天語定義的後驗方法,運行時日誌如下:

(二)局部線性估計

局部線性估計是一種非常重要的現代非參數統計方法,其核心思想是在每個局部用線性結構來擬合目標函數,但是整體上保持靈活性和動態性,從而平衡估計函數的方差和偏差。我們將局部線性估計應用於參數尋優,最核心的思想是暴力尋優後,把參數當做自變數,把業績當成函數值,然後對業績曲面進行局部線性估計平滑,從而掌握參數曲面的整體形態,更好應用前面提到的幾個參數尋優原則。

局部線性估計的平滑結果受核權重函數的影響並不大,但是受平滑窗寬的影響非常大,包含進平滑的樣本點個數決定了業績曲線的光滑度,會產生平滑不足或者過度平滑的問題。

精確最優的平滑窗寬需要知道模型隨機誤差的分布信息,實際上這些信息完全不可知。通常的窗寬用一種經驗演算法來確定,假設隨機誤差是正態分布,並用到業績樣本標準差信息。

(三)移動平滑估計

如果是抽樣解決效率和精度問題,局部線性估計提高尋優結果的可讀性,移動平滑方法從根本上改變尋優的思路,通過對樣本的切割,把尋優數據和評估數據加以區分,沿著樣本移動若干次之後,對若干對參數的樣本外業績進行綜合評估,這有些借鑒Cross Validation的統計學思想。

四、分散依然是唯一免費的午餐

有些時候,人們喜歡把多參數和多策略、多品種、多周期並列為同一級別的四多,獲取實際意義上的分散。乍看參數尋優並不屬於品種、策略思路和周期一個維度的問題,是要通過尋找分個彼此高下的問題,但是我們建議,不妨在一定的程度上,把參數也當做一個策略維度,進行配置,對於兩個距離較大,但是業績都還不錯的參數取值而言,這種分散相當於更加穩健的策略結構,有些機器學習boosting的思路。最重要的是,多參數和多策略、多周期,其實也是一種平衡關係。

想了解更多,歡迎移步至京東量化平台:京東量化平台-為投資者提供數據支持、策略開發到策略輸出的量化生態服務。

歡迎各位加入京東金融官方交流群:456448095,各路大咖坐鎮,有任何問題和建議均可詢問與討論交流。


不在合理邏輯框架下的參數優化都是自欺欺人。邏輯第一,統計第二,參數優化第三。其實做到前兩步,參數優化已經不重要。


參數尋優是個死胡同,把重點放在尋找市場的本質吧。


歷史行情與未來行情相比,占的比例小的可憐,是無法從這點信息量中取得全局最優解的.預知未來那是上帝的事情.


1.有沒有最完美的參數尋優方式?有沒有最完美的參數選擇方式?

沒有吧。有最快的,但最好的……其實或許應該考慮修改策略或者目標使得參數更穩定。


2.有沒有最完備的參數尋優方式?有沒有最完備的參數選擇方式?

完備……這個怎麼理解呢,沒懂。


3.參數尋優時對於不同的時間周期,多長的回測數據具有說服力?

如樓上,交易越多越好。不過也看目的,你是想證明一個參數的好壞有自相關呢,還是想找到一個參數在各種情況下一直好呢?這實盤起來是兩類策略~


4.對於整體樣本,是否有必要區分樣本內和樣本外,若有必要,那麼樣本內和樣本外的長度分別是多少合適?

如果你把樣本外當實盤自覺的只看一次,回測不管啥樣就塵埃落定,那就有意義,如果反覆看樣本外數據調參數,那就和沒分一樣唄。


5.如何避免過度優化?

如果一個策略回測好而實盤總不好,改策略吧孩子……交易這個東西和機器學習是不一樣的,比如圖像識別,這玩意是存在答案的,我們知道模型好的話訓下去能訓到正確率接近100%,如果有一個程序說自己可以優化到很準確的預測價格你信嗎……反正我不信……當一個程序干成了一件不可能的事情的時候,說明一個局部最小比全局最小的cost function還要小……這種情況下,不引入外部信息則不可能找到那個全局最小……


6.給出不同參數下的資金曲線,選取什麼目標函數來進行參數選擇?為什麼選擇該種目標函數,是否有更加有效的目標函數?

這個問題很有意思……常用的有賺錢多少,夏普比,風險回報比啥的。再考慮一下交易量,太少的回測木有意義。但是吧,一般來說你會發現各個指標相關性很強(如果不是恭喜你)……反正我現在自己依然用賺錢的多少來衡量好不好……基本上來說,類似於一個假設檢驗,線越直,實盤時候你越好判斷這東西是不是失效了(總體變了)。


7.給定目標函數的情況下,如何選取最穩定的參數(參數區間),選定參數的過程能否量化?

不要選孤立的參數,可以做一兩次次模糊然後再選參數。再就是多選幾個……如果你回測能測出自己的交易對市場的影響的話,就模擬一下,否則就選相關性差的……參數空間不太大的話這東西也不需要啥演算法。參數空間很大的話……我勸你把參數空間弄小一點……


8.外推時,參數表現不好怎麼辦?再重新改進參數、調整策略?

說明策略和人品中有一樣出了問題……反覆調參數而不改變方法一定是沒用的,改策略可能有用吧……看你是什麼樣子的策略……如果能更深入的理解策略為啥可以賺錢α為啥有效可能能比回測更有效的幫你過濾掉一堆隨機好的策略。


9.有沒有不依靠參數的策略?或參數自適應的策略?可否實戰?靠譜否?

這個看你……理論上來說你可以把參數優化弄成實時自動的,然後參數就自適應了……或者你想通某個參數是幹啥用的,取值應該取決於啥,然後就也可以把這個參數去掉了……弄好了就可以實盤唄……靠譜不靠譜看你弄對了沒……這玩意也沒啥特殊的……


10.參數尋優的本質到底是什麼? 直觀解釋是什麼?

本質就是撞人品lol 直觀解釋就是希望局部最優和全局比較優住在一起,以及思考為啥他倆是or不是好基友。


再優的參數也只能代表過去,誰又能肯定以後還能繼續走出完美的資金曲線


越複雜死越快,簡單才是美。觀察才是第一位的,堆參數是個很白痴的行為。一切源於觀察,統計,抽象。
最後,好用就行。你非要勝率百分之七十以上。不如去研究控制倉位,保得住本金,贏穩賺的部分。


參數有10種。


一種有實際意義。

假設參數alpha =大資金的出逃率,定義為:

alpha =frac{	ext{單筆500萬以上流出資金量}}{	ext{總的資金流出量} }

這類參數不需要尋優,需要的是精確測量。

一種無實際意義,或者有實際意義但無法測量。

這種參數就需要尋優。實操層面,尋優就是選、用優化演算法。蟻群、退火、PSO等等都屬此類。


推薦閱讀:

Python 在金融領域的主要應用是什麼?有哪些分類以及什麼類型的金融公司會來應用?

TAG:金融 | 程序化交易 | 高頻交易 | 量化交易 |