請教止盈止損后排斥同方向開倉的問題 [金字塔]
- 咨詢內容:
又來麻煩老師了,實在過意不去。
以下是30分鐘突破的代碼和止盈止損。我想在里面加止盈止損后同方向不再開倉的條件(比如在上線多單止損后,今日不再開多單),學生不知如何編寫。
懇請老師指點(_ _)
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;
開盤30分鐘最高價:=valuewhen(time<=090000+nmin1*100,hhv(h,n));
開盤30分鐘最低價:=valuewhen(time<=090000+nmin1*100,llv(l,n));
上軌:開盤30分鐘最高價+n1*mindiff;
下軌:開盤30分鐘最低價-N1*mindiff;//條件
開多條件:=cross(c,上軌);
開空條件:=cross(下軌,c);
t1:=time>091500+nmin2*100 and time<151000;
t2:=time=151300;//交易系統
VARIABLE:DUOKONG=0;
TSFS:=0; {停損反手,1-反手 0-不反手}
開倉手數:=ss; {開倉手數}
ZSDS:=n4/100; {止損百分比}
//以下變量用于移動止盈
VARIABLE:YDZY=1; {移動止盈總開關,1為開,0為關}
VARIABLE:HIGHPRICE=0,LOWPRICE=0; {保存開倉后的最高價、最低價}
VARIABLE:DHCDS=n2/100,KHCDS=n2/100; {多、空單回撤百分比}
VARIABLE:DYLDS=n3,KYLDS=n3; {多、空單盈利點數,當盈利點數達到這個標準后,如果回撤達到上面的參數值百分比就平倉}
VARIABLE:Z3B1:=0; {賺3保1開關}
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
//空單移動止盈
IF YDZY=1 THEN BEGIN
//每周期判斷是否創新低
IF L<LOWPRICE THEN BEGIN
LOWPRICE:=L;
END
//如果盈利超過10點之后回撤達到22%,就平倉,保住盈利
IF ENTERPRICE-LOWPRICE>=KYLDS THEN BEGIN
IF (L-LOWPRICE)/LOWPRICE*100>=KHCDS THEN BEGIN //回撤超過的百分比
空贏: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//開多單
IF HOLDING=0 THEN BEGIN
IF DUOKONG=1 OR DUOKONG=2 THEN BEGIN
IF 開多條件 and t1 THEN BEGIN
多開:BUY(1=1,ss,market);
HIGHPRICE:=ENTERPRICE; //將開倉價保存到最高價
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
//多單移動止盈
IF YDZY=1 THEN BEGIN
//每周期判斷是否創新高
IF H>HIGHPRICE THEN BEGIN
HIGHPRICE:=H;
END
//如果盈利超過10點之后回撤達到22%,就平倉,保住盈利
IF HIGHPRICE-ENTERPRICE>=DYLDS THEN BEGIN
IF (HIGHPRICE-H)/HIGHPRICE*100>=DHCDS THEN BEGIN //回撤超過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//開空單
IF HOLDING=0 THEN BEGIN
IF DUOKONG=1 OR DUOKONG=3 THEN BEGIN
IF 開空條件 and t1 THEN BEGIN
空開:BUYSHORT(1=1,ss,market);
LOWPRICE:=ENTERPRICE;
END
END
END - 金字塔客服:
需要用全局變量來限定開平狀態,思路如下:
1.策略最開頭添加代碼
variable:kaiguan_duo=0;//多頭開關
variable:kaiguan_kong=0;//空頭開關
2.所有的止盈止損代碼添加對全局變量的賦值以及判斷,全局變量的賦值寫在平倉語句之后,比如:
①
空頭添加開關
//止損59%
IF (C-ENTERPRICE)/ENTERPRICE*100>=ZSDS and kaiguan_kong=0 THEN BEGIN
空損:SELLSHORT(1,0,market),ORDERQUEUE;kaiguan_kong:=1;
END
②多頭添加開關
//持有多單
IF HOLDING>0 and kaiguan_duo=0 THEN BEGIN
IF t2 THEN BEGIN {平多單}
多平:SELL(1,0,market),ORDERQUEUE;kaiguan_duo:=1;
END其他的多空頭止盈止損不做重復的講解,按照上面的處理即可
3.策略最后面添加代碼
if time=closetime(0) then begin
kaiguan_duo:=0;
kaiguan_kong:=0;
end
[此貼子已經被作者于2013/10/24 9:49:50編輯過] - 用戶回復:
還是有點不懂,可以麻煩老師寫個簡單實例嗎?
- 網友回復:
我先摸索一下,多謝老師!
- 網友回復:
加上去了,測試也通過。非常感謝!
。。不過又出現個問題,圖表的時候線縮得不成樣子了。不知道哪里錯了,求救!
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;
開盤30分鐘最高價:=valuewhen(time<=090000+nmin1*100,hhv(h,n));
開盤30分鐘最低價:=valuewhen(time<=090000+nmin1*100,llv(l,n));
上軌:開盤30分鐘最高價+n1*mindiff;
下軌:開盤30分鐘最低價-N1*mindiff;//條件
開多條件:=h>上軌;
開空條件:=l<下軌;
t1:=time>091500+nmin2*100 and time<151000;
t2:=time=151300;//交易系統
VARIABLE:DUOKONG=0;
variable:kaiguan_duo=0;//多頭開關
variable:kaiguan_kong=0;//空頭開關TSFS:=0; {停損反手,1-反手 0-不反手}
開倉手數:=ss; {開倉手數}
ZSDS:=n4/100; {止損百分比}
//以下變量用于移動止盈
VARIABLE:YDZY=1; {移動止盈總開關,1為開,0為關}
VARIABLE:HIGHPRICE=0,LOWPRICE=0; {保存開倉后的最高價、最低價}
VARIABLE:DHCDS=n2/100,KHCDS=n2/100; {多、空單回撤百分比}
VARIABLE:DYLDS=n3,KYLDS=n3; {多、空單盈利點數,當盈利點數達到這個標準后,如果回撤達到上面的參數值百分比就平倉}
VARIABLE:Z3B1:=0; {賺3保1開關}
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
//空單移動止盈
IF YDZY=1 THEN BEGIN
//每周期判斷是否創新低
IF L<LOWPRICE THEN BEGIN
LOWPRICE:=L;
END
//如果盈利超過10點之后回撤達到22%,就平倉,保住盈利
IF ENTERPRICE-LOWPRICE>=KYLDS THEN BEGIN
IF (L-LOWPRICE)/LOWPRICE*100>=KHCDS THEN BEGIN //回撤超過的百分比
空贏: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//開多單
IF HOLDING=0 THEN BEGIN
IF DUOKONG=1 OR DUOKONG=2 THEN BEGIN
IF 開多條件 and t1 THEN BEGIN
多開:BUY(1=1,ss,market);
HIGHPRICE:=ENTERPRICE; //將開倉價保存到最高價
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
//多單移動止盈
IF YDZY=1 THEN BEGIN
//每周期判斷是否創新高
IF H>HIGHPRICE THEN BEGIN
HIGHPRICE:=H;
END
//如果盈利超過10點之后回撤達到22%,就平倉,保住盈利
IF HIGHPRICE-ENTERPRICE>=DYLDS THEN BEGIN
IF (HIGHPRICE-H)/HIGHPRICE*100>=DHCDS THEN BEGIN //回撤超過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//開空單
IF HOLDING=0 THEN BEGIN
IF DUOKONG=1 OR DUOKONG=3 THEN BEGIN
IF 開空條件 and t1 THEN BEGIN
空開:BUYSHORT(1=1,ss,market);
LOWPRICE:=ENTERPRICE;
END
ENDEND
if time=closetime(0) then begin
kaiguan_duo:=0;
kaiguan_kong:=0;
end
此主題相關圖片如下:tm截圖未命名.png
有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友
可聯系技術人員 QQ: 1145508240 進行 有償 編寫!(不貴!點擊查看價格!)
相關文章
-
沒有相關內容