閃靈交易者策略
(The Ghost Trader Trading Stategy)
在交易中,特別是突破類模型,成功率并不高,若碰上反復(fù)的假突破,更是一種災(zāi)難。那有沒有方法來減少這種情形的發(fā)生呢?本文介紹的閃靈交易者策略(The Ghost Trader Trading Stategy)為大家提供了一種方式。
閃靈交易者策略源自于交易者的觀察,一些交易者從自己的交易記錄中發(fā)現(xiàn),若上一次交易是盈利的,那么下一筆交易是虧損的概率比較大。因此在設(shè)計(jì)策略時(shí),希望能跳過這些我們認(rèn)為會(huì)虧損的交易。具體到策略中,我們將引入模擬交易的概念(這個(gè)概念僅指此策略中代碼部分,請(qǐng)勿與金字塔模擬交易混淆), 與之對(duì)應(yīng)的是真實(shí)下單模塊。模擬交易始終在運(yùn)行交易條件。而真實(shí)下單模塊直到上一筆模擬交易是虧損的情況下才執(zhí)行。
本文的例子,將忠于原策略,建立在一個(gè)指數(shù)移動(dòng)平均和RSI指標(biāo)上。默認(rèn)只考慮一次虧損的情況,周期為日線,運(yùn)行模式為走完K線(在小周期運(yùn)行此策略,效果更明顯些)。
開多:9日收盤價(jià)指數(shù)平均大于等于19日最高價(jià)的指數(shù)平均并且9日收盤價(jià)的RSI指標(biāo)下穿70。
開空:9日收盤價(jià)指數(shù)平均小于19日最高價(jià)的指數(shù)平均并且9日收盤價(jià)的RSI指標(biāo)上穿30。
平多:最新價(jià)下穿20日低點(diǎn)。
平空:最新價(jià)上穿20日高點(diǎn)。
以上進(jìn)出場(chǎng)點(diǎn)并不是這個(gè)策略的要點(diǎn),重在如何記錄模擬交易的狀況,在金字塔軟件中,我們將使用全局變量來構(gòu)建這個(gè)部分。具體的見代碼,我會(huì)多做些注釋。若您完全理解后,移動(dòng)止盈止損的代碼也應(yīng)不在話下。
代碼:
//策略:閃靈交易者系統(tǒng)
//類型:
//版本:1.0
//修訂時(shí)間:2012.11.24
//DESIGNED BY ROGARZ
//weibo:http://weibo.com/rogarwahoo
//中間變量
INPUT:N1(9,1,100,1),SS(1,1,100);
VARIABLE:該筆盈虧:=0;模擬持倉(cāng):=0,模擬開倉(cāng)價(jià):=0,模擬平倉(cāng)價(jià):=0,真實(shí)系統(tǒng)下單開關(guān):=0;
LC := REF(CLOSE,1);
RSI:=SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100;//RSI指標(biāo)默認(rèn)N1為9
9日收盤價(jià)指數(shù)平均:REF(EMA(CLOSE,9),1);
19日最高價(jià)收盤價(jià)平均:REF(EMA(HIGH,19),1);
20日高點(diǎn):=REF(HHV(H,20),1);
20日低點(diǎn):=REF(LLV(L,20),1);
手?jǐn)?shù):=SS;
//交易條件
開多條件:=9日收盤價(jià)指數(shù)平均>=19日最高價(jià)收盤價(jià)平均 AND REF(RSI,1)<70;
開空條件:=9日收盤價(jià)指數(shù)平均<19日最高價(jià)收盤價(jià)平均 AND REF(RSI,1)>30;
平多條件:=C<20日低點(diǎn);
平空條件:=C>=20日高點(diǎn);
//交易系統(tǒng)
//模擬交易模塊
IF 開多條件 AND 模擬持倉(cāng)=0
THEN BEGIN
模擬開倉(cāng)價(jià):=CLOSE;//記錄開倉(cāng)價(jià)
模擬持倉(cāng):=1;//模擬持倉(cāng)為1
END
IF 平多條件 AND 模擬持倉(cāng)=1 THEN
BEGIN
模擬平倉(cāng)價(jià):=CLOSE;//記錄平倉(cāng)價(jià)
該筆盈虧:=模擬平倉(cāng)價(jià)-模擬開倉(cāng)價(jià);//在模擬交易模塊中我們只需計(jì)算上一筆交易是賺還是虧,在這里我只計(jì)算盈虧最后的點(diǎn)數(shù)
模擬持倉(cāng):=0;//將全局變量*模擬持倉(cāng)*初始化為0
IF 該筆盈虧>0 THEN BEGIN
真實(shí)系統(tǒng)下單開關(guān):=0;//0代表模擬交易上一筆是賺錢的。
模擬開倉(cāng)價(jià):=0;//將全局變量*模擬開倉(cāng)價(jià)*初始化為0
模擬平倉(cāng)價(jià):=0;//將全局變量*模擬開倉(cāng)價(jià)*初始化為0
END
IF 該筆盈虧<=0 THEN BEGIN
真實(shí)系統(tǒng)下單開關(guān):=1;//1代表模擬交易上一筆是虧錢的。
模擬開倉(cāng)價(jià):=0;//將全局變量*模擬開倉(cāng)價(jià)*初始化為0
模擬平倉(cāng)價(jià):=0;//將全局變量*模擬平倉(cāng)價(jià)*初始化為0
END
END
IF 開空條件 AND 模擬持倉(cāng)=0 THEN BEGIN
模擬開倉(cāng)價(jià):=CLOSE;//記錄開倉(cāng)價(jià)
模擬持倉(cāng):=-1;//模擬持倉(cāng)為-1
END
IF 平空條件 AND 模擬持倉(cāng)=-1 THEN
BEGIN
模擬平倉(cāng)價(jià):=CLOSE;//記錄平倉(cāng)價(jià)
該筆盈虧:=模擬開倉(cāng)價(jià)-模擬平倉(cāng)價(jià);//在模擬交易模塊中我們只需計(jì)算上一筆交易是賺還是虧,在這里我只計(jì)算盈虧最后的點(diǎn)數(shù)
模擬持倉(cāng):=0;//將全局變量*模擬持倉(cāng)*初始化為0
IF 該筆盈虧>0 THEN BEGIN
真實(shí)系統(tǒng)下單開關(guān):=0;//0代表模擬交易上一筆是賺錢的。
模擬開倉(cāng)價(jià):=0;//將全局變量*模擬開倉(cāng)價(jià)*初始化為0
模擬平倉(cāng)價(jià):=0;//將全局變量*模擬開倉(cāng)價(jià)*初始化為0
END
IF 該筆盈虧<=0 THEN BEGIN
真實(shí)系統(tǒng)下單開關(guān):=1;//1代表模擬交易上一筆是虧錢的。
模擬開倉(cāng)價(jià):=0;//將全局變量*模擬開倉(cāng)價(jià)*初始化為0
模擬平倉(cāng)價(jià):=0;//將全局變量*模擬開倉(cāng)價(jià)*初始化為0
END
END
//真實(shí)下單模塊
平空:SELLSHORT(平空條件 AND HOLDING<0,手?jǐn)?shù),MARKET);
平多:SELL(平多條件 AND HOLDING>0,手?jǐn)?shù),MARKET);
開多:BUY(開多條件 AND 真實(shí)系統(tǒng)下單開關(guān)=1 AND HOLDING=0,手?jǐn)?shù),MARKET);
開空:BUYSHORT(開空條件 AND 真實(shí)系統(tǒng)下單開關(guān)=1 AND HOLDING=0,手?jǐn)?shù),MARKET);
這個(gè)策略雖說是一個(gè)完整的策略,但個(gè)人覺得更像是一個(gè)模板。大家理解后,應(yīng)很容易修改這個(gè)模板,任意發(fā)揮,默認(rèn)只計(jì)算一次虧損策略的效果并不明顯。若改成比如連虧3次后再交易的情形,交易次數(shù)和效果很明顯。
1,請(qǐng)首先看懂這部分代碼。個(gè)人認(rèn)為您懂了,那么連虧三次表達(dá)上也沒有問題
[此貼子已經(jīng)被作者于2014/7/4 16:33:56編輯過]
自己調(diào)試下代碼