飛狐金魔方大交易師智能交易使用教程(12)-歷史回測 [仁 心 慧 能]
前兩節我們介紹了測評報告,測評報告是由歷史回測產生的統計結果。
歷史回測(BackTest)的意義
編寫好交易策略后,不要以為就可以等著發財了,除非“確認”這套策略應該有效,不然毫無意義。有多種方式測試所準備應用的策略是否有效,可以直接用實戰來測試,但萬一失敗會很受傷,也可進行模擬交易,但費時費力。最有效的方法,就是先用歷史數據進行測試,通過了,再進行模擬交易或實戰測試。
用歷史數據進行測試,可以了解到交易策略在實際運用中可能遇到的狀況和大體的績效。一套策略如果不適用于過去的市場狀況,就更沒理由相信它適用于未來。在拿資金冒險之前,應該首先了解交易策略的各種可能的表現。
值得注意的是,歷史測試的績效并不等于未來績效,一套策略在測試過程中,即使表現完美,也不能保證在實際運用中不會發生嚴重虧損,但只要經過適當的測試,就可以了解到策略可能發生的最嚴重虧損的程度,避免實戰時才發現,自己的資金無法承受或交易風格不愿意承受這類損失,而導致被迫中途放棄一套原本可以成功的策略。
在測試過程中,應該把歷史數據分為兩部分,一部分用來調整交易策略或參數的數據,稱為樣本內數據;另外一部分對策略來說是全新的“陌生”數據用來做真正的測試,稱為樣本外數據。
在測試策略尤其是短線、高頻策略時,要重視交易成本,對于交易傭金和滑移價差,預估、設置必須符合實際。當市場出現突發消息、價格大幅波動時,滑移價差往往很大,此時實際交易的表現可能遠不如模擬交易。一些看起來不錯的策略,考慮傭金和滑價后卻虧錢。千萬不要忽視這些必然發生的成本,否則測試結果是不靠譜的。
由于歷史測試往往是以最近成交價作為開平倉價格,對于不活躍的缺乏流動性的品種來說,由于買賣價差大,最近成交價顯然不能作為能夠實際成交的價格,所以也應該設定較大的滑移價差。
運用歷史數據進行測試,其功能如同試婚,這并不保證婚姻成功,但這是一種很好的方式可以增進對雙方關系的信心,并避免一些不愉快的意外。通過歷史測試,可以了解該策略的運作程序與限制。
應注意兩個傾向,第一種想盡快賺錢而迫不及待地展開交易,因此很少用歷史數據測試其策略以驗證有效性。另一個傾向是認為,過去有杰出表現的策略在未來也一定能夠帶來利潤,過去績效越佳,用于實際交易時,博取豐厚利潤的機會也越大。上述兩種想法都同樣危險。
歷史數據
歷史數據的正確性,是確保真實交易信號的關鍵,是得出有意義結論的基礎。
測試所用的歷史數據,應該充分反映實際的市場狀況,包括各種可能發生的情形,需要知道該策略在上升趨勢、下跌趨勢、區間盤整、劇烈波動等各種市場狀況的表現。如果數據太少,很難判斷測試結果究竟是偶然因素造成的,還是交易策略確實有效。持倉時間越長,相應需要越長時間的數據。測試期間的交易筆數應足夠多,否則不能歸納出任何有意義的統計結論。
但是,數據越多未必意味著越好,回溯的時間越久,其結果可能越不能反映最近的市場動態。
為了數據的連續性,股票數據需要進行除權處理,期貨數據需要解決合約到期的問題。
期貨合約涉及到交易截止日前換月移倉的問題,由于合約間的基差,如果只是簡單地接上后續合約的價格數據,往往會出現跳空缺口,需要進行平準連續處理,生成人工合成的合約。
一種方法是對每個合約的價格序列進行持倉量或成交量加權平均,計算出該品種的價格指數,這種指數反映整個市場價格重心的走勢,避免價格跳空。它的優點是價格相當平滑,可以消除合約轉換之間的價格缺口,缺點是與實際可交易的合約價格并無關聯。可以利用指數來測試,再用實際合約價格產生交易信號,或者用指數產生交易信號,用實際價格來下單。這使得測試以及實際交易都很繁瑣,難以實現。
另一種方法是將不同時段的主力合約的價格序列直接進行連接。在實際交易中,我們希望交易流動性最好的主力合約,當之后的某個合約的成交量逐漸增加并大于當前成交量逐漸減少的主力合約時(一般是連續3天,對于會快速換月的品種例如股指則是1天),之后的這個合約成為新的主力合約,數據相應切換到這個新的主力合約。舊合約與新合約的價格往往存在一定的差異,這個差值有可能形成巨大的跳空缺口,使技術指標和交易信號的計算產生錯誤,需要對數據序列進行平準連續處理,我們的處理方法是把切換日前的數據統一加上切換日前的收盤價差,這樣就實現了兩個合約之間的平滑過渡。由于資金利息和商品期貨的倉儲費用,后續新合約的價格在多數情況下高于舊合約,加減差價的連續處理基本不會導致歷史數據變成零值或負值。這種處理我們也稱之為“復權處理”,在軟件中與股票類別共用復權處理菜單。在國內品種中,只有滬銅由于在04-06年初一直保持較大的負基差,導致其01、02年的復權處理數據出現負價格,如下圖所示:
注意,帶帽的S圖標表示經過復權處理的主連數據,點擊復權處理按鈕或在主菜單選擇不復權,則相同位置的S圖標不帶三角帽。鼠標移動到圖標可看到換月價差數據。
這種處理方式帶來的問題是,價格經過人為的加減修改,連續數據與其對應的實際合約數據相差某個數值。如果指標計算、交易信號或止盈止損用到價格的百分比時,會與實際情況不符,所以應注意策略中是否用了比值計算導致與當時真實狀況不一致的結果。只要不用比值的算法,例如,移動平均交叉,平均真實波幅ATR、價格形態或其它類似指標及其產生的交易信號,基本上完全相同,不受影響。
另外,當缺乏或忽略分筆明細數據時,應注意K線開高低收發生的先后順序對交易信號和結果的影響。在歷史測試中,有兩種方法解決此問題,第一種方法,限制一周期(bar)內僅能開倉一次,止損、止盈單則至次周期才有效,確保歷史測試的明確性和唯一性。但其缺陷是,行情波動劇烈時,在開倉的同一周期內,可能希望平倉或反手,如果必須等到次周期,可能會增加虧損、減少盈利。另一種是我們采用的方法,根據高、低價與開、收盤價的關系,來推測高、低價發生的先后順序。如果開盤價較接近最高價,則價格走勢是開盤價到最高價,再到最低價,再到收盤價;如果開盤價較接近最低價,則價格走勢是開盤價到最低價,再到最高價,再到收盤價。如果在同一周期內同時滿足止盈、止損條件,則按這個假設的走勢判斷是止盈平倉還是止損平倉。更為嚴格的假設是,同一個周期中達到止盈和止損,如果沒有真實分筆明細數據,一律作為止損處理。
更好的解決方案當然是以真實的帶買賣盤的分筆數據對K線進行插值計算。
有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友
可聯系技術人員 QQ: 511411198 進行 有償 編寫!(不貴!點擊查看價格!)
相關文章
-
沒有相關內容