请教老师;这个上软件上带的止盈止损范列,我想要在移动止盈上加一个条件;开仓后从最高价大于upper上轨或小于lower下轨时,再开始进行移动止盈的计算,该如何编写,谢谢老师!//使用逐K线模式时
VARIABLE:DUOKONG=0;
TSFS:=0; {停损反手,1-反手 0-不反手}
ORDVOL:=1; {开仓手数}
ZSDS:=100; {止损点数}
//以下变量用于移动止盈,,移动止盈只能保证你尽可能稳健盈利,却不能保证盈利最大化,如果不想使用,可是将总开关设置为0
VARIABLE:YDZY=1; {移动止盈总开关,1为开,0为关}
VARIABLE:HIGHPRICE=0,LOWPRICE=0; {保存开仓后的最高价、最低价}
VARIABLE:DHCDS=100,KHCDS=100; {多、空单回撤点数}
VARIABLE:DYLDS=100,KYLDS=100; {多、空单盈利点数,当盈利点数达到这个标准后,如果回撤达到上面的参数值就平仓}
VARIABLE:Z3B1:=1; {赚3保1开关}
DUOKONG:=0;
//持有空单
IF HOLDING<0 THEN BEGIN
IF BUY1 THEN BEGIN //平空单
空平:SELLSHORT(1,0,MARKET),ORDERQUEUE;
END
//止损
IF C-ENTERPRICE>=ZSDS THEN BEGIN
空损:SELLSHORT(1,0,MARKET),ORDERQUEUE;
END
//移动止盈
IF YDZY=1 THEN BEGIN
//每周期判断是否创新低
IF L<LOWPRICE THEN BEGIN
LOWPRICE:=L;
END
//如果盈利超过10点之后回撤达到3点,就平仓,保住盈利
IF ENTERPRICE-LOWPRICE>=KYLDS THEN BEGIN
IF L-LOWPRICE>=KHCDS THEN BEGIN //回撤超过3点
空赢: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 BUY1 THEN BEGIN
多开:BUY(1=1,ORDVOL,MARKET);
HIGHPRICE:=ENTERPRICE; //将开仓价保存到最高价
END
END
END
//持有多单
IF HOLDING>0 THEN BEGIN
IF SELL1 THEN BEGIN {平多单}
多平:SELL(1,0,MARKET),ORDERQUEUE;
END
//多单管理
//止损
IF ENTERPRICE-C>=ZSDS THEN BEGIN
多损:SELL(1,0,MARKET),ORDERQUEUE;
END
//移动止盈
IF YDZY=1 THEN BEGIN
//每周期判断是否创新高
IF H>HIGHPRICE THEN BEGIN
HIGHPRICE:=H;
END
//如果盈利超过10点之后回撤达到3点,就平仓,保住盈利
IF HIGHPRICE-ENTERPRICE>=DYLDS THEN BEGIN
IF HIGHPRICE-H>=DHCDS THEN BEGIN //回撤超过3点
多赢: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 SELL1 THEN BEGIN
空开:BUYSHORT(1=1,ORDVOL,MARKET);
LOWPRICE:=ENTERPRICE;
END
END
END
upper 和lower是如何定义的呢?
其实你这个只要给移动止损加个条件就可以了。
[此贴子已经被作者于2018/7/17 10:53:55编辑过]
//使用逐K线模式时
VARIABLE:DUOKONG=0;
TSFS:=0; {停损反手,1-反手 0-不反手}
ORDVOL:=1; {开仓手数}
ZSDS:=100; {止损点数}
//以下变量用于移动止盈,,移动止盈只能保证你尽可能稳健盈利,却不能保证盈利最大化,如果不想使用,可是将总开关设置为0
VARIABLE:YDZY=1; {移动止盈总开关,1为开,0为关}
VARIABLE:HIGHPRICE=0,LOWPRICE=0; {保存开仓后的最高价、最低价}
VARIABLE:DHCDS=100,KHCDS=100; {多、空单回撤点数}
VARIABLE:DYLDS=100,KYLDS=100; {多、空单盈利点数,当盈利点数达到这个标准后,如果回撤达到上面的参数值就平仓}
VARIABLE:Z3B1:=1; {赚3保1开关}
DUOKONG:=0;
cond:(hhv(h,ENTERBARS)>upper or llv(h,ENTERBARS)<lower) and holding<>0;//持有空单
IF HOLDING<0 THEN BEGIN
IF BUY1 THEN BEGIN //平空单
空平:SELLSHORT(1,0,MARKET),ORDERQUEUE;
END
//止损
IF C-ENTERPRICE>=ZSDS THEN BEGIN
空损:SELLSHORT(1,0,MARKET),ORDERQUEUE;
END
//移动止盈
IF
YDZY=1 and cond THEN BEGIN
//每周期判断是否创新低
IF L<LOWPRICE THEN BEGIN
LOWPRICE:=L;
END
//如果盈利超过10点之后回撤达到3点,就平仓,保住盈利
IF ENTERPRICE-LOWPRICE>=KYLDS THEN BEGIN
IF L-LOWPRICE>=KHCDS THEN BEGIN //回撤超过3点
空赢: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 BUY1 THEN BEGIN
多开:BUY(1=1,ORDVOL,MARKET);
HIGHPRICE:=ENTERPRICE; //将开仓价保存到最高价
END
END
END
//持有多单
IF HOLDING>0 THEN BEGIN
IF SELL1 THEN BEGIN {平多单}
多平:SELL(1,0,MARKET),ORDERQUEUE;
END
//多单管理
//止损
IF ENTERPRICE-C>=ZSDS THEN BEGIN
多损:SELL(1,0,MARKET),ORDERQUEUE;
END
//移动止盈
IF
YDZY=1 and cond THEN BEGIN
//每周期判断是否创新高
IF H>HIGHPRICE THEN BEGIN
HIGHPRICE:=H;
END
//如果盈利超过10点之后回撤达到3点,就平仓,保住盈利
IF HIGHPRICE-ENTERPRICE>=DYLDS THEN BEGIN
IF HIGHPRICE-H>=DHCDS THEN BEGIN //回撤超过3点
多赢: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 SELL1 THEN BEGIN
空开:BUYSHORT(1=1,ORDVOL,MARKET);
LOWPRICE:=ENTERPRICE;
END
END
END
布林带你自行引入即可。红色是我修改或者增加的部分。