如何檢驗程式交易的可信度
在評估一個系統的測試指標之前,應該先檢驗測試結果的可信度。這就像相信一個人說的話之前,先必須相信這個人。
可能找到一個交易系統,也可能是自己開發了一個交易系統,但是不論對提供這個系統的人,
包括自己,有多少信任,都要堅持先檢驗測試結果的可信度。
如果因為盲目的相信或僥倖心理,跳過去這個過程,這無異於給資金安全埋下一個定時炸彈。
交易系統測試結果的可信度評估主要有以下幾個方面:
一、這個系統是不是「黑盒子」?如果是,不論是什麼理由,其結果都不可信。
這雖然有些絕對,但僥倖心理是交易之大忌。
這有點像在坐飛機時幫陌生人捎帶東西一樣:那東西打不開,但一定是炸彈嗎?
也不能下定論。如果認為不能帶陌生人的東西上飛機,也不應該相信一個「黑盒子」系統。
二、檢驗系統測試條件與實際交易的符合程度。如果不符,各種績效指標就不用看了。認為至少要檢查以下幾點:
a.測試資料是否涵蓋了至少一個大的牛市和一個大的熊市,一般至少要十年以上。
見過很多系統,測試指標很漂亮,可仔細一看,測試結果是基於指定的某段時間,
譬如從2000年到2005年,這時就要打個問號了,因為2000年以前的資料不難得到啊,
為什麼不從1990年或更早開始呢?對於大多數要賣錢的交易系統,這樣做是不難理解的。
一般來講,測試涵蓋的時間越長,測試的可信度越高。
b.測試是否把交易佣金從利潤中扣除。否則,可能在為證券公司打工。這一點對於交易頻繁的系統尤其重要。
c.測試是否把交易的滑價(slippage)從利潤中扣除。
譬如測試的某個交易是在40元買入的,在實際交易中可能買不到,可能要花40.10元,
有的市場甚至可能要40.50元。這一毛或五毛的價差是不是扣去了?
好的系統測試會根據被測市場的流通性假設一個合理的滑價。越是短線的交易系統,滑價造成的影響越大。
還見過幾次這樣的情形:很好的測試結果,滑價預計得比較低,但當前市場的流通性確實很好,滑價好像是合理的。
但總覺得結果好得讓人不敢輕易相信。仔細一想,發現了問題:
這個市場只是最近這兩年才熱起來的,以前的日成交量很低,但測試結果是按照當前的日成交量來估算滑價的。
如果按以前的日成交量來算滑價,系統的績效就遠不如第一次看到的那樣好。但是起碼這是合理的結果。
在測試時堅持合理的假設,會減少在實際交易中出現的沒有預想到的損失。
另一個需要注意的情形是如果系統是一個突破型的系統,例如在股票突破五日最高點時買進,
這時市場上可能有很多交易者都盯著那個點買入,在價格突破時會有很多人進場作多,
這時即使是日成交量很大的股票都可能會出現大的滑價,在測試中這些都需要考慮進去。
三、檢查測試結果是否具有統計意義上的可信度。如果統計意義上的可信度很低,別的指標不用看了。統計的指標有:
a.交易次數。至少要超過30,才能滿足一般的統計要求。
結果的不確定性是與交易次數(統計上的樣本大小)的平方根成反比的。
因此,系統交易的次數越多,這些交易所表現的系統績效的確定程度就越高,也就是結果越可信。
b.系統的利潤是不是集中在少數幾個交易上。
如果一個系統的贏利有十萬元,但其中的七萬來自於某兩次交易,
那麼應該把這兩次交易去除看你能不能對系統的其他次交易的結果滿意,
因為很有可能你在實際交易中碰不到這種「滿貫」型的交易。
在系統測試軟體的系統分析報告中,除了「獲利因數」(Profit Factor)外,
還有一項「經調整的獲利因數」(Adjusted Profit Factor),就是針對這種情況而設的。
四、系統是否被「過度最佳化」(Over-optimized)。可以看以下兩點得到初步印象:
a.看系統有幾個最佳化參數。參數越多,過度最佳化的可能性越大。
一般來講,超過兩個就很危險了。如果手頭有系統測試軟體,你可以做個簡單的試驗:
選一個股票或期貨,用兩個移動平均的交叉作買入和賣出的信號,
然後對這兩個移動平均的日數做最佳化(例如從10日到160日,5日一階),
很有可能在最佳化的結果中能找到很不錯的。如果再加一個參數,
譬如說停損點或獲利目標(Profit Target),那麼今天就可以找到不少誘人的系統。但是會用這些系統去交易嗎?
b.看系統交易程式中是否有「魔術」數位。如果有,就要問為什麼用這個特定的數字。
譬如,程式中用了一個20天的移動平均,一般我都會問為什麼用20天而不是10天?
如果是10天的移動平均會是什麼結果?30天又是什麼結果?
c.看系統的交易策略是否簡單。越是邏輯簡單的系統,一般來說,越不容易被過度最佳化,
也越能經得起時間的考驗。海龜交易法則就是一個簡單系統的典範。
基於期貨市場價格的季節性漲跌的系統也是很簡單易懂的。很多人不相信大家都知道的交易策略能持久地獲利。
這個問題的關鍵,是不能簡單地以為知道了交易策略就萬事大吉了。
交易策略可以大家都一樣,但每個人的交易計畫,包括資金管理和交易管理,和每個人的性格與自律程度
,以及對市場的瞭解,則千差萬別。好比人人都知道怎樣在牆上釘個釘子:
買個錘子啊!聽起來最簡單不過了,三歲小兒都知道。為什麼很多人還是敲不好呢?原因很多。
可能買了個自己使不動的錘子(交易系統不符合個性),可能不知道有些牆是要先探到磚縫的才好敲的
(對市場不瞭解,選錯了市場或選錯了時段),也可能是釘子敲得太少(缺乏經驗,對市場沒感覺),
或者是用力過猛把釘子敲彎了(想一夜暴富,結果過度交易搞破產了),等等。
總之,交易策略可以簡單,但要指望通過交易達到穩定地獲利卻不容易。
回到「過度最佳化」的主題上,如果要做進一步的分析,一般會看系統指標在不同參數下的分佈。
對於好的系統,這種分佈的形狀應該像高原。
假設系統只有一個參數,即某個移動平均的日數。而且,為簡單起見,我們只看系統的總獲利。
可以看到,雖然總獲利在參數為45時最好,但用其他值時的獲利也很不錯。或者說這是個可以「穩定」獲利的系統。
如果像懸崖,說明系統對於參數的變化太敏感,你就要小心了。
五、看系統的交易策略是否有實際意義。也就是說,系統的交易邏輯必須能夠被合理解釋。
好的交易系統捕捉市場的某些可量化的特性,如果系統的邏輯無法合理地解釋成市場的某種特性,那麼這個系統是不可信的。
舉個例子說,假設某人發現在黃金突破20天高點之後的三個月聯想電腦總是會上漲,
於是開發出一個系統在黃金突破20天高點時買入聯想電腦的股票。
這個系統可能可以通過以上所有的可信度檢驗而且每年能給100%的回報,
但是,在有足夠的想像力能夠解釋為什麼聯想電腦的股票跟金價會有這種關係之前,將不會用這個系統進行實戰交易的。
只有在通過了以上所述的可信度檢驗後,討論系統測試的績效指標才有意義。
如果是自己進行交易系統的開發,在交易策略的選擇,最佳化,和測試的過程中就必須把可信度的問題考慮在內。
但交易系統的開發與測試有更多的內容和需要注意的地方,需要另一個專題來討論。
页:
[1]