精華 回測(cè)中如何處理K線(xiàn)跳空問(wèn)題 [MC]
-
MC用戶(hù)求助:
回測(cè)中如何處理K線(xiàn)跳空問(wèn)題
(原創(chuàng):Alex)K線(xiàn)跳空的問(wèn)題,對(duì)于主力合約來(lái)說(shuō),多數(shù)是由于換月造成的,其它情況則是由于市場(chǎng)巨大波動(dòng)造成的;對(duì)于這個(gè)問(wèn)題,我們只能在回測(cè)中想辦法使它對(duì)回測(cè)報(bào)告不產(chǎn)生影響,但是在實(shí)時(shí)行情中,這個(gè)沒(méi)有辦法自動(dòng)避免,也就是說(shuō),如果是主力換月,那么可能需要您提前平倉(cāng)處理一下,如果是市場(chǎng)巨大波動(dòng),那么這個(gè)是沒(méi)有辦法避免的。下面我們將對(duì)回測(cè)中出現(xiàn)的跳空進(jìn)行探討并且提出解決方案,使其過(guò)濾掉由于換月導(dǎo)致的回測(cè)報(bào)告不真實(shí)的部分。
一、關(guān)鍵字ChangeMarketPosition關(guān)鍵字ChangeMarketPosition可以在圖表上標(biāo)注一個(gè)指定名稱(chēng)、價(jià)格和手?jǐn)?shù)的指令信號(hào)。無(wú)論是否開(kāi)啟自動(dòng)交易,此關(guān)鍵字產(chǎn)生的指令信號(hào)不會(huì)發(fā)到經(jīng)紀(jì)商。完全的語(yǔ)句是ChangeMarketPosition(Delta, Price, Name),參數(shù)Delta表示指定要標(biāo)注在圖上的信號(hào)手?jǐn)?shù),參數(shù)Price表示價(jià)格,參數(shù)Name表示信號(hào)名稱(chēng)。
二、測(cè)試代碼 如下是在雙均線(xiàn)交易策略中加入了處理K線(xiàn)跳空的代碼。 inputs:?Price(?Close?),?FastLength(?9?),?SlowLength(?18?)?; variables:?var0(?0?),?var1(?0?)?; ? var0?=?AverageFC(?Price,?FastLength?)?; var1?=?AverageFC(?Price,?SlowLength?)?; ? condition1?=?CurrentBar?>?1?and?var0?crosses?over?var1?; if?condition1?then? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? ? ?? ?? ???Buy?(?"MA2CrossLE"?)?next?bar?at?market?; ? condition1?=?CurrentBar?>?1?and?var0?crosses?under?var1?; if?condition1?then? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? ? ?? ?? ???Sell?Short?(?"MA2CrossSE"?)?next?bar?at?market?; {以上都是雙均線(xiàn)交易策略部分,下面是所加入的處理K線(xiàn)跳空的代碼} ? if?open?next?bar>=close*1.008?or?open?next?bar<=close*0.992?then?begin {利用open next bar來(lái)獲取下一根bar的開(kāi)盤(pán)價(jià),并且將它與當(dāng)根bar的收盤(pán)價(jià)進(jìn)行比較,當(dāng)下一根bar的開(kāi)盤(pán)價(jià)超過(guò)當(dāng)根bar的收盤(pán)價(jià)0.008時(shí),表示向上跳空;當(dāng)下一根bar的開(kāi)盤(pán)價(jià)低于當(dāng)根bar的收盤(pán)價(jià)0.008時(shí),表示向下踏空} ? value2=0; for?value1=0?to?currententries-1?begin value2=value2+openentrycontracts(value1); end; {通過(guò)for循環(huán)來(lái)統(tǒng)計(jì)一下當(dāng)前未平倉(cāng)部位(也就是當(dāng)前持倉(cāng))總共有多少手?jǐn)?shù)} ? if?marketposition=1?then?changemarketposition(-value2,close,"sell"); {如果當(dāng)前持倉(cāng)value2手?jǐn)?shù)時(shí),并且產(chǎn)生跳空,那么在當(dāng)根bar的收盤(pán)價(jià)處執(zhí)行關(guān)鍵字ChangeMarketPosition(也就是在圖表上產(chǎn)生一個(gè)平倉(cāng)指令),指定的手?jǐn)?shù)是value2,方向是賣(mài)出,指令名稱(chēng)是”sell”} ? if?marketposition=-1?then?changemarketposition(value2,close,"buytocover"); end; {如果當(dāng)前持倉(cāng)是-value2手?jǐn)?shù)時(shí),并且產(chǎn)生跳空,那么在當(dāng)根bar的收盤(pán)價(jià)處執(zhí)行關(guān)鍵字ChangeMarketPosition(也就是在圖表上產(chǎn)生一個(gè)平倉(cāng)指令),指定的手?jǐn)?shù)是value2,方向是買(mǎi)入,指令名稱(chēng)是”buytocover”}?
-
MC回復(fù)討論一:
if?marketposition=1?then?changemarketposition(-value2,close,"sell");
{如果當(dāng)前持倉(cāng)value2手?jǐn)?shù)時(shí),并且產(chǎn)生跳空,那么在當(dāng)根bar的收盤(pán)價(jià)處執(zhí)行關(guān)鍵字ChangeMarketPosition(也就是在圖表上產(chǎn)生一個(gè)平倉(cāng)指令),指定的手?jǐn)?shù)是value2,方向是賣(mài)出,指令名稱(chēng)是”sell”}
?
“在圖表上產(chǎn)生一個(gè)平倉(cāng)命令”,即回測(cè)的時(shí)候會(huì)把跳空后的開(kāi)倉(cāng)的部位平掉,但是實(shí)盤(pán)中不會(huì)發(fā)送到交易所,只在本地執(zhí)行,這樣理解對(duì)吧?
?
-
MC回復(fù)討論二:
比如下一根bar(為方便敘述,下一根bar的編號(hào)為20)的開(kāi)盤(pán)價(jià)與當(dāng)根bar(為方便敘述,當(dāng)根bar的編號(hào)為19)的收盤(pán)價(jià)對(duì)比,有很大跳空,那么可以在當(dāng)根bar上執(zhí)行關(guān)鍵字changemarketposition,使圖表上當(dāng)根bar(bar的編號(hào)為19)上平倉(cāng),這種只會(huì)對(duì)圖表部位產(chǎn)生影響,不會(huì)實(shí)際發(fā)送委托單到交易所;通過(guò)這種方式,使回測(cè)績(jī)效更接近策略本身的邏輯;即使是開(kāi)啟自動(dòng)交易,也只是在圖表上平倉(cāng),不會(huì)實(shí)際發(fā)送委托單到交易所。
?
-
MC回復(fù)討論三:
第一、您可以在公式編譯器中查看關(guān)鍵字changemarketposition,它只會(huì)改變圖表部位,也就是在當(dāng)根bar上買(mǎi)賣(mài)一定的手?jǐn)?shù),也可以將之前圖表的持倉(cāng)平倉(cāng),但是不會(huì)實(shí)際發(fā)送委托單到交易所。只是改變圖表部位。
第二、無(wú)論是回測(cè)還是實(shí)盤(pán)交易中,都可以使用;舉例,目前當(dāng)根bar的編號(hào)為10(之前有持倉(cāng)多頭3手),而下一根bar人編號(hào)為11,并且這編號(hào)為11的bar相對(duì)于編號(hào)為10的bar有一個(gè)跳空,那么利用上面的代碼使編號(hào)為10的bar上產(chǎn)生3手多頭平倉(cāng),之后在編號(hào)為11的bar上,持倉(cāng)就會(huì)為0。但是這只是改變圖表部位的信息,并不會(huì)在跳空時(shí)將經(jīng)紀(jì)商持倉(cāng)3手平倉(cāng),而且策略代碼很多關(guān)鍵字是根據(jù)圖表進(jìn)行取值,這樣圖表部位更改之后,策略代碼的計(jì)算邏輯也相應(yīng)的改變了。
第三、上面的這個(gè)跳空做法,建議只使用在回測(cè)中,使績(jī)效更接近實(shí)際。
?
-
MC回復(fù)討論四:
第一、您可以在公式編譯器中查看關(guān)鍵字changemarketposition,它只會(huì)改變圖表部位,也就是在當(dāng)根bar上買(mǎi)賣(mài)一定的手?jǐn)?shù),也可以將之前圖表的持倉(cāng)平倉(cāng),但是不會(huì)實(shí)際發(fā)送委托單到交易所。只是改變圖表部位。
第二、無(wú)論是回測(cè)還是實(shí)盤(pán)交易中,都可以使用;舉例,目前當(dāng)根bar的編號(hào)為10(之前有持倉(cāng)多頭3手),而下一根bar人編號(hào)為11,并且這編號(hào)為11的bar相對(duì)于編號(hào)為10的bar有一個(gè)跳空,那么利用上面的代碼使編號(hào)為10的bar上產(chǎn)生3手多頭平倉(cāng),之后在編號(hào)為11的bar上,持倉(cāng)就會(huì)為0。但是這只是改變圖表部位的信息,并不會(huì)在跳空時(shí)將經(jīng)紀(jì)商持倉(cāng)3手平倉(cāng),而且策略代碼很多關(guān)鍵字是根據(jù)圖表進(jìn)行取值,這樣圖表部位更改之后,策略代碼的計(jì)算邏輯也相應(yīng)的改變了。
第三、上面的這個(gè)跳空做法,建議只使用在回測(cè)中,使績(jī)效更接近實(shí)際。
有思路,想編寫(xiě)各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 511411198 進(jìn)行 有償 編寫(xiě)!(不貴!點(diǎn)擊查看價(jià)格!)
相關(guān)文章
-
沒(méi)有相關(guān)內(nèi)容