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