如果你有一個交易的構想,你最好先用歷史資料測試一下,然而你一旦開始歷史回溯測試,最佳化的陷阱就開始等著你。

  若能正確使用,則最佳化是件好事,因為能夠了解績效如何隨參數而改變,總比忽略它們要好。檢視績效如何隨參數而改變,能夠看出該績效是來自於隨機效應或曲線密合,還是真正來自於某系統的優勢。

  最簡單避免過度最佳化的方法,就是測試的時間要夠長。本文介紹一個包寧傑「分段」的最佳化方法。Robert Pardo在「交易策略評估與最佳化第二版」則大力提倡「推進模擬」的方法。

以下摘自「海龜投資法則:揭露獲利上億的成功秘訣」作者:克提斯.M.費斯

最佳化

  有一種效應,我稱之為最佳化悖論,這是測試結果與實際結果出現差距的另一項原因。這項悖論引起極大混淆,特別是那些對於電腦模擬不熟悉的交易人。最佳化是使用某一系統交易時、選擇特定計算數值的過程。這些數字叫做參數。舉例來說,長天期移動平均的天數就是一個參數,而短天期移動平均的天數則是另一個參數。最佳化是找出最佳、最適宜的數字來做為這些參數。許多交易人認為最佳化是件壞事,因為它會導致曲線密合、出現差勁的績效。我認為這是胡說八道。

  若能正確使用,則最佳化是件好事,因為能夠了解績效如何隨參數而改變,總比忽略它們要好。檢視績效如何隨參數而改變,能夠看出該績效是來自於隨機效應或曲線密合,還是真正來自於某系統的優勢。最佳化只是一個過程,讓人發現各種參數對於結果的影響,然後,使用這份資訊,來決定實際交易時應該使用哪一個參數。

  之所以會有人認為最佳化不好或很危險,是因為他們不了解這個最佳化悖論,而且,他們看過不適當的最佳化造成統計 。

最佳化悖論

  最佳化悖論是說,參數最佳化會讓系統比較可能在未來展現優良績效、但是比較不可能像模擬結果那麼亮麗。因此,最佳化增加系統績效優異的可能性,同時又降低歷史模擬數據的預測準確性。我認為許多交易人對於這個悖論了解不夠,害怕把系統過度最佳化或曲線密合,因此避免將系統最佳化。

  適當使用最佳化所得來的參數值,應該能夠增加未來在實際交易時獲得優良績效的可能性。以波林格突破系統為例,該系統有兩個參數。圖表11-1顯示進場門檻參數(波動通道寬度)從1個標準差到4個標準差時,MAR指數的變化。(圖略)(阿e注,應該是包寧傑帶狀,使用350天平均線與2.5個標準差,突破上緣買進,跌破下緣作空,當收盤價越過通道中央的移動平均線峙,就要出場)

  請留意在本模擬當中,通道寬度為2.4個標準差時,MAR指數到達頂點。凡是低於2.4或高於2.4的進場門檻,測試結果都會得到較低的MAR指數。(阿e注:MAR是績效指數,越高績效越好)

  現在,回到最佳化是有利的這個前提上。假設我們未曾考慮將通道寬度最佳化,而是斷然指定通道寬度為3。因為我們想起高中統計課教過,常態分配中,有99%以上的數值落在離平均數三個標準差之內。如果未來和過去很類似,則我們就會拿出更多資金,並且讓我們的交易經歷更大的連續虧損(遠大於2.4標準旁的進場門檻所遇到的虧損程度)。為讓你了解兩者的差距有多大,請想想在十年半的測試期當中,在同一連續虧損下,2.4標準差的獲利是3.0標準差的八倍,報酬率是54.5%,而3.0標準差的報酬率只有28.2%。

  不進行最佳化,等於是坐視不管,把一切交給機會。看過這項參數的影響後,我們便更加了解進場門檻參數和績效變化的關係,以及其結果是如何容易受到該參數的影響。我們知道,如果通道太窄,你得頻繁交易。這會損及績效;如果通道太寬,則你將一直等待、錯過許多趨勢所帶來的機會,這也會損及績效。只因害怕過度最佳化或曲線密合,就不做這項研究,你將因此喪失改善交易績效的大好機會,也無法看出哪些系統在未來有獲利潛力。以下段落將繼續介紹更多參數,你會看到隨著這些參數的改變,同樣地出現高峰形狀。


以下摘自「包寧傑帶狀操作法」作者:包寧傑

  ...某些第一原理的忠誠信徒認為,絕對不該修改最初的格式,但我認為沒有必要這麼頑固。測試過程中,在某種程度內從事最佳化(optimization),然後抱著謹慎的態度進行調整,避開一些可能的陷阱,那就應該沒問題。

  最佳化的相關議題,顯然已經超過本書準備處理的範圍,但任何有關技術指標與交易系統的討論,都不可能完全避開這個主題。最佳化程序佈滿可怕的陷阱,即使是最精明的投資人也難免受害。最佳化是一種有用的工具,但經常被濫用,而且是不知不覺的濫用。濫用的結果,使得最佳化程序只不過變成過去資料的精確陳述,不再是預測未來的有用工具。這也是前文討論的一種拍馬、奉承陷阱。

  所謂最佳化程度,就是尋找某特定方法的「最佳」參數值。現在,最佳化程序都由電腦執行,但在個人電腦普及化之前,這種程序是透過手工計算。最單純、最常見的最佳化程序,發生在移到平均穿越系統,此處,我們希望最佳化的參數是移動平均長度。首先,設定一個較短的均線長度,根據過去某段期間的歷史價格資料,標示移動平均穿越系統在該期間內提供的所有買進與賣出訊號,計算這些訊號的獲利能力、交易筆數、最大損失、最大獲利……等評估因子。然後,採用一個稍長的均線長度,再計算買、賣訊號的獲利能力、交易筆數……等。總之,繼續調整均線長度,重複計算買、賣訊號的交易結果。然後,把所有的結果編列為表格,尋找獲利能力最高的移動平均長度參數值。

  對於一般實務運用的交易系統,最佳化程序都非常複雜。舉例來說,假定某套系統採用包寧傑帶狀與一項技術指標。如果我們按照2的倍數來設定移動平均長度,那麼10期到50期之間總共有21種可能長度;同樣的,如果按照2的倍數來設定技術指標計算期間,4期到20期之間總共有9種可能性--於是就產生21x9=189種不同參數組合。接著還必須考慮帶狀寬度與技術指標門檻,假定各為3種,總共就有189x3x3=1701種不同參數組合。所以,我們瞭解實際測試的複雜程度。

分段

  分段 (sectioning)可以避免最佳化程序的常見錯誤:套入曲線;換言之,所設定的最佳參數值只適用於測試資料。

  把準備測試的歷史期間劃分為幾段,每段都進行獨立的測試。舉例來說,假定我們準備測試的歷史期間為十年,由1990年到1999年,最佳化程序可以分別在三個不同的三年期內進行,每期的第一年做為助跑期,最佳化程序執行於第二年與第三年(譯按:交易訊號完全來自第二年與第三年,第一年助跑期只提供資料-- 舉例來--一在第二年初,計算移動平均顯然需要利用第一年的價格資料,「擠壓」也需要退用第一年的資料,所以第一年至少有某段期間不適合提供交易訊號)。三個不同的三年期為 1990年-1992年、1992年-1994年與 1994年-1996年。

  在這三個不同期間分別完成最佳化程序之後,可以決定三組最佳參數值,然後利用 1996年-1999年的歷史資料,測試相關交易系統的績效;同樣的,1996年只做為助跑期,實際測試則利用1997年-1999年的資料(請注意,實際測試進行的1997年、1998年與1999年,完全沒有與最佳化期間重疊)。如果交易系統確實有效的話,三組參數值的測試結果應該很類似;類似的程度愈高,意味著把這套系統運用到將來的成功機率也較高,這也就是所謂的交易系統 「穩健性」(robustness)。

  註:先取得1990年-1992年的最佳化參數,再取得1992年-1994年與 1994年-1996年。然後將這三個參數分別測試1997年-1999年的資料,如果三組最佳化參數的測試結果很類似,那這些參數比較有效。

全站熱搜

jesse0606 發表在 痞客邦 留言(4) 人氣()