又來(lái)麻煩老師了,實(shí)在過(guò)意不去。
以下是30分鐘突破的代碼和止盈止損。我想在里面加止盈止損后同方向不再開(kāi)倉(cāng)的條件(比如在上線多單止損后,今日不再開(kāi)多單),學(xué)生不知如何編寫(xiě)。
懇請(qǐng)老師指點(diǎn)(_ _)
input:ss(1,1,100,1),nmin1(30,1,100,1),nmin2(1,1,100,1),n1(0,0,100,1),,n2(22,1,60,1),n3(13,10,20,1),n4(59,1,80,1);
N:=barslast(date<>ref(date,1))+1;
開(kāi)盤(pán)30分鐘最高價(jià):=valuewhen(time<=090000+nmin1*100,hhv(h,n));
開(kāi)盤(pán)30分鐘最低價(jià):=valuewhen(time<=090000+nmin1*100,llv(l,n));
上軌:開(kāi)盤(pán)30分鐘最高價(jià)+n1*mindiff;
下軌:開(kāi)盤(pán)30分鐘最低價(jià)-N1*mindiff;
//條件
開(kāi)多條件:=cross(c,上軌);
開(kāi)空條件:=cross(下軌,c);
t1:=time>091500+nmin2*100 and time<151000;
t2:=time=151300;
//交易系統(tǒng)
VARIABLE:DUOKONG=0;
TSFS:=0; {停損反手,1-反手 0-不反手}
開(kāi)倉(cāng)手?jǐn)?shù):=ss; {開(kāi)倉(cāng)手?jǐn)?shù)}
ZSDS:=n4/100; {止損百分比}
//以下變量用于移動(dòng)止盈
VARIABLE:YDZY=1; {移動(dòng)止盈總開(kāi)關(guān),1為開(kāi),0為關(guān)}
VARIABLE:HIGHPRICE=0,LOWPRICE=0; {保存開(kāi)倉(cāng)后的最高價(jià)、最低價(jià)}
VARIABLE:DHCDS=n2/100,KHCDS=n2/100; {多、空單回撤百分比}
VARIABLE:DYLDS=n3,KYLDS=n3; {多、空單盈利點(diǎn)數(shù),當(dāng)盈利點(diǎn)數(shù)達(dá)到這個(gè)標(biāo)準(zhǔn)后,如果回撤達(dá)到上面的參數(shù)值百分比就平倉(cāng)}
VARIABLE:Z3B1:=0; {賺3保1開(kāi)關(guān)}
DUOKONG:=1;
//持有空單
IF HOLDING<0 THEN BEGIN
IF t2 THEN BEGIN //平空單
空平:SELLSHORT(1,0,market),ORDERQUEUE;
END
//止損59%
IF (C-ENTERPRICE)/ENTERPRICE*100>=ZSDS THEN BEGIN
空損:SELLSHORT(1,0,market),ORDERQUEUE;
END
//空單移動(dòng)止盈
IF YDZY=1 THEN BEGIN
//每周期判斷是否創(chuàng)新低
IF L<LOWPRICE THEN BEGIN
LOWPRICE:=L;
END
//如果盈利超過(guò)10點(diǎn)之后回撤達(dá)到22%,就平倉(cāng),保住盈利
IF ENTERPRICE-LOWPRICE>=KYLDS THEN BEGIN
IF (L-LOWPRICE)/LOWPRICE*100>=KHCDS THEN BEGIN //回撤超過(guò)的百分比
空贏:SELLSHORT(1,0,MARKET);
END
END
END
//賺3保1
IF Z3B1=1 THEN BEGIN
IF ENTERPRICE-LOWPRICE>=3 THEN BEGIN
IF ENTERPRICE-L<=1.2 THEN BEGIN
空保:SELLSHORT(1,0,MARKET);
END
END
END
END
//開(kāi)多單
IF HOLDING=0 THEN BEGIN
IF DUOKONG=1 OR DUOKONG=2 THEN BEGIN
IF 開(kāi)多條件 and t1 THEN BEGIN
多開(kāi):BUY(1=1,ss,market);
HIGHPRICE:=ENTERPRICE; //將開(kāi)倉(cāng)價(jià)保存到最高價(jià)
END
END
END
//持有多單
IF HOLDING>0 THEN BEGIN
IF t2 THEN BEGIN {平多單}
多平:SELL(1,0,market),ORDERQUEUE;
END
//多單管理
//多單止損
IF (ENTERPRICE-C)/ENTERPRICE*100>=ZSDS THEN BEGIN
多損:SELL(1,0,market),ORDERQUEUE;
END
//多單移動(dòng)止盈
IF YDZY=1 THEN BEGIN
//每周期判斷是否創(chuàng)新高
IF H>HIGHPRICE THEN BEGIN
HIGHPRICE:=H;
END
//如果盈利超過(guò)10點(diǎn)之后回撤達(dá)到22%,就平倉(cāng),保住盈利
IF HIGHPRICE-ENTERPRICE>=DYLDS THEN BEGIN
IF (HIGHPRICE-H)/HIGHPRICE*100>=DHCDS THEN BEGIN //回撤超過(guò)22%
多贏:SELL(1,0,MARKET);
END
END
END
//賺3保1
IF Z3B1=1 THEN BEGIN
IF HIGHPRICE-ENTERPRICE>=3 THEN BEGIN
IF H-ENTERPRICE<=1.2 THEN BEGIN
多保:SELL(1,0,MARKET);
END
END
END
END
//開(kāi)空單
IF HOLDING=0 THEN BEGIN
IF DUOKONG=1 OR DUOKONG=3 THEN BEGIN
IF 開(kāi)空條件 and t1 THEN BEGIN
空開(kāi):BUYSHORT(1=1,ss,market);
LOWPRICE:=ENTERPRICE;
END
END
END
需要用全局變量來(lái)限定開(kāi)平狀態(tài),思路如下:
1.策略最開(kāi)頭添加代碼
variable:kaiguan_duo=0;//多頭開(kāi)關(guān)
variable:kaiguan_kong=0;//空頭開(kāi)關(guān)
2.所有的止盈止損代碼添加對(duì)全局變量的賦值以及判斷,全局變量的賦值寫(xiě)在平倉(cāng)語(yǔ)句之后,比如:
①
空頭添加開(kāi)關(guān)
//止損59%
IF (C-ENTERPRICE)/ENTERPRICE*100>=ZSDS and kaiguan_kong=0 THEN BEGIN
空損:SELLSHORT(1,0,market),ORDERQUEUE;
kaiguan_kong:=1;
END
②
多頭添加開(kāi)關(guān)
//持有多單
IF HOLDING>0 and kaiguan_duo=0 THEN BEGIN
IF t2 THEN BEGIN {平多單}
多平:SELL(1,0,market),ORDERQUEUE;
kaiguan_duo:=1;
END
其他的多空頭止盈止損不做重復(fù)的講解,按照上面的處理即可
3.策略最后面添加代碼
if time=closetime(0) then begin
kaiguan_duo:=0;
kaiguan_kong:=0;
end
[此貼子已經(jīng)被作者于2013/10/24 9:49:50編輯過(guò)]
還是有點(diǎn)不懂,可以麻煩老師寫(xiě)個(gè)簡(jiǎn)單實(shí)例嗎?
加上去了,測(cè)試也通過(guò)。非常感謝!
。。不過(guò)又出現(xiàn)個(gè)問(wèn)題,圖表的時(shí)候線縮得不成樣子了。不知道哪里錯(cuò)了,求救!
input:ss(1,1,100,1),nmin1(41,1,100,1),nmin2(1,1,100,1),n1(0,0,100,1),,n2(22,1,60,1),n3(13,10,20,1),n4(59,1,80,1);
N:=barslast(date<>ref(date,1))+1;
開(kāi)盤(pán)30分鐘最高價(jià):=valuewhen(time<=090000+nmin1*100,hhv(h,n));
開(kāi)盤(pán)30分鐘最低價(jià):=valuewhen(time<=090000+nmin1*100,llv(l,n));
上軌:開(kāi)盤(pán)30分鐘最高價(jià)+n1*mindiff;
下軌:開(kāi)盤(pán)30分鐘最低價(jià)-N1*mindiff;
//條件
開(kāi)多條件:=h>上軌;
開(kāi)空條件:=l<下軌;
t1:=time>091500+nmin2*100 and time<151000;
t2:=time=151300;
//交易系統(tǒng)
VARIABLE:DUOKONG=0;
variable:kaiguan_duo=0;//多頭開(kāi)關(guān)
variable:kaiguan_kong=0;//空頭開(kāi)關(guān)
TSFS:=0; {停損反手,1-反手 0-不反手}
開(kāi)倉(cāng)手?jǐn)?shù):=ss; {開(kāi)倉(cāng)手?jǐn)?shù)}
ZSDS:=n4/100; {止損百分比}
//以下變量用于移動(dòng)止盈
VARIABLE:YDZY=1; {移動(dòng)止盈總開(kāi)關(guān),1為開(kāi),0為關(guān)}
VARIABLE:HIGHPRICE=0,LOWPRICE=0; {保存開(kāi)倉(cāng)后的最高價(jià)、最低價(jià)}
VARIABLE:DHCDS=n2/100,KHCDS=n2/100; {多、空單回撤百分比}
VARIABLE:DYLDS=n3,KYLDS=n3; {多、空單盈利點(diǎn)數(shù),當(dāng)盈利點(diǎn)數(shù)達(dá)到這個(gè)標(biāo)準(zhǔn)后,如果回撤達(dá)到上面的參數(shù)值百分比就平倉(cāng)}
VARIABLE:Z3B1:=0; {賺3保1開(kāi)關(guān)}
DUOKONG:=1;
//持有空單
IF HOLDING<0 THEN BEGIN
IF t2 THEN BEGIN //平空單
空平:SELLSHORT(1,0,market),ORDERQUEUE;
END
//止損59%
IF (C-ENTERPRICE)/ENTERPRICE*100>=ZSDS and kaiguan_kong=0 THEN BEGIN
空損:SELLSHORT(1,0,market),ORDERQUEUE;
kaiguan_kong:=1;
END
//空單移動(dòng)止盈
IF YDZY=1 THEN BEGIN
//每周期判斷是否創(chuàng)新低
IF L<LOWPRICE THEN BEGIN
LOWPRICE:=L;
END
//如果盈利超過(guò)10點(diǎn)之后回撤達(dá)到22%,就平倉(cāng),保住盈利
IF ENTERPRICE-LOWPRICE>=KYLDS THEN BEGIN
IF (L-LOWPRICE)/LOWPRICE*100>=KHCDS THEN BEGIN //回撤超過(guò)的百分比
空贏:SELLSHORT(1,0,MARKET);
END
END
END
//賺3保1
IF Z3B1=1 THEN BEGIN
IF ENTERPRICE-LOWPRICE>=3 THEN BEGIN
IF ENTERPRICE-L<=1.2 THEN BEGIN
空保:SELLSHORT(1,0,MARKET);
END
END
END
END
//開(kāi)多單
IF HOLDING=0 THEN BEGIN
IF DUOKONG=1 OR DUOKONG=2 THEN BEGIN
IF 開(kāi)多條件 and t1 THEN BEGIN
多開(kāi):BUY(1=1,ss,market);
HIGHPRICE:=ENTERPRICE; //將開(kāi)倉(cāng)價(jià)保存到最高價(jià)
END
END
END
//持有多單
IF HOLDING>0 THEN BEGIN
IF t2 THEN BEGIN {平多單}
多平:SELL(1,0,market),ORDERQUEUE;
END
//多單管理
//多單止損
IF (ENTERPRICE-C)/ENTERPRICE*100>=ZSDS and kaiguan_duo=0 THEN BEGIN
多損:SELL(1,0,market),ORDERQUEUE;
kaiguan_duo=1;
END
//多單移動(dòng)止盈
IF YDZY=1 THEN BEGIN
//每周期判斷是否創(chuàng)新高
IF H>HIGHPRICE THEN BEGIN
HIGHPRICE:=H;
END
//如果盈利超過(guò)10點(diǎn)之后回撤達(dá)到22%,就平倉(cāng),保住盈利
IF HIGHPRICE-ENTERPRICE>=DYLDS THEN BEGIN
IF (HIGHPRICE-H)/HIGHPRICE*100>=DHCDS THEN BEGIN //回撤超過(guò)22%
多贏:SELL(1,0,MARKET);
END
END
END
//賺3保1
IF Z3B1=1 THEN BEGIN
IF HIGHPRICE-ENTERPRICE>=3 THEN BEGIN
IF H-ENTERPRICE<=1.2 THEN BEGIN
多保:SELL(1,0,MARKET);
END
END
END
END
//開(kāi)空單
IF HOLDING=0 THEN BEGIN
IF DUOKONG=1 OR DUOKONG=3 THEN BEGIN
IF 開(kāi)空條件 and t1 THEN BEGIN
空開(kāi):BUYSHORT(1=1,ss,market);
LOWPRICE:=ENTERPRICE;
END
END
END
if time=closetime(0) then begin
kaiguan_duo:=0;
kaiguan_kong:=0;
end