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