以做多为例。
平多条件1:至少要在开多仓一根K线以后才执行平仓操作(貌似图表程序化都是在走完一根K线以后,但我的程序出现了在同一根K线上同时开多仓和平多仓的情况,所以,我加入了这一个条件,但即使我加入了这个条件,在同一根K线上同时开平仓的情况还是存在,我已经头大了。)。
平多条件2:当前K线的最低价小于等于开仓价6个点//出现此情况即止损。
平多条件3:当前K线的最高价大于等于开仓价3个点//出现此情况即止盈。
我在程序里是这样写的:PD:=ENTERBARS > =1 AND (ENTERPRICE-l>=6 or h-ENTERPRICE>=3); //平多条件
请老师帮助解决这一问题,谢谢。
//声明变量
MAB:=EMA(MA(CLOSE,6),6/4);//为避免太频繁,略做平滑处理。
KCT:=ENTERBARS;
//交易信号
MABTOUP:=MAB>REF(MAB,1) AND REF(MAB,1)<=REF(MAB,2);
MABTODOWN:=MAB<REF(MAB,1) AND REF(MAB,1)>=REF(MAB,2);
KD:= MABTOUP; //开多条件
PD:=KCT >=1 AND (ENTERPRICE-l>=6 or h-ENTERPRICE>=3); //平多条件
{固定止盈止损,或者符合KK时平掉}
KK:=MAG<REF(MAG,1) AND MABTODOWN; //开空条件
PK:=KCT >=1 AND (h-ENTERPRICE>=6 or ENTERPRICE-l>=3); //平空条件
{固定止盈止损处理,或者符合KD时平掉。}
平空:SELLSHORT(PK OR KD,0,MARKET); //平空信号
开多:BUY(KD AND HOLDING=0,1,MARKET); //开多信号
平多:SELL(PD OR KK,0,MARKET); //平多信号
开空:BUYSHORT(KK AND HOLDING=0,1,MARKET); //开空信号
持仓:holding,linethick0;
资产:asset linethick0;
可用现金:cash(0),linethick0;
<!--EndFragment-->以上是用在一分钟图上的日内交易策略。
我同时在止盈止损里设置了止损6点,止盈3点。
所以,我在程序里加入了h-ENTERPRICE>=6 or ENTERPRICE-l>=3这样的条件。
为的是防止实际平仓情况已经发生,而图表程序却还没有平仓信号。
//声明变量
MAB:=EMA(MA(CLOSE,6),6/4);//为避免太频繁,略做平滑处理。
KCT:=ENTERBARS;
//交易信号
MABTOUP:=MAB>REF(MAB,1) AND REF(MAB,1)<=REF(MAB,2);
MABTODOWN:=MAB<REF(MAB,1) AND REF(MAB,1)>=REF(MAB,2);
KD:= MABTOUP; //开多条件
PD:=KCT >=1 AND (ENTERPRICE-l>=6 or h-ENTERPRICE>=3); //平多条件
{固定止盈止损,或者符合KK时平掉}
KK:=MABTODOWN; //开空条件
PK:=KCT >=1 AND (h-ENTERPRICE>=6 or ENTERPRICE-l>=3); //平空条件
{固定止盈止损处理,或者符合KD时平掉。}
平空:SELLSHORT(PK OR KD,0,MARKET); //平空信号
开多:BUY(KD AND HOLDING=0,1,MARKET); //开多信号
平多:SELL(PD OR KK,0,MARKET); //平多信号
开空:BUYSHORT(KK AND HOLDING=0,1,MARKET); //开空信号
持仓:holding,linethick0;
资产:asset linethick0;
可用现金:cash(0),linethick0;
<!--EndFragment-->原程序一大堆,这是简略版,但问题依然存在。
MAB:=EMA(MA(CLOSE,6),6/4);//为避免太频繁,略做平滑处理。
KCT:=ENTERBARS;
//交易信号
MABTOUP:=MAB>REF(MAB,1) AND REF(MAB,1)<=REF(MAB,2);
MABTODOWN:=MAB<REF(MAB,1) AND REF(MAB,1)>=REF(MAB,2);
KD:= MABTOUP; //开多条件
PD:= (ENTERPRICE-l>=6 or h-ENTERPRICE>=3); //平多条件
{固定止盈止损,或者符合KK时平掉}
KK:=MABTODOWN; //开空条件
PK:=(h-ENTERPRICE>=6 or ENTERPRICE-l>=3); //平空条件
{固定止盈止损处理,或者符合KD时平掉。}
开多:BUY(KD AND HOLDING=0 ,1,MARKET); //开多信号
平多:SELL((PD OR KK) and enterbars>0,0,MARKET); //平多信号
开空:BUYSHORT(KK AND HOLDING=0,1,MARKET); //开空信号
平空:SELLSHORT((PK OR KD) and enterbars>0,0,MARKET); //平空信号
持仓:holding,linethick0;
资产:asset linethick0;
可用现金:cash(0),linethick0;
写在平仓语句里面就好了
试了,还是不行。