老师好
下面是我写的一个止盈止损策略:
input:tq(10,3,60,1);
abb:=(time0-timetot0(dynainfo(207))<=tq) or not(islastbar);
KD:BUY(holding=0 and 做多条件 and abb and time<145500,1,limitr,c); //开多
KK:BUYSHORT(holding=0 and 做空条件 and abb and time<145500,1,limitr,c);//开空
//图表时使用的语句
kcwzl:=valuewhen(kd,low);//开多单时的最低价
kcwzh:=valuewhen(kk,high);//开空单时的最高价
//止损点差为最(高)低点的ZS个点,止赢点差为TP,追踪点差为DTP
ZS:=3;
TP:=3;
DTP:=8;
A:=mindiff;//取模组交易合约的最小变动价位
kdzs:=C<(kcwzl-zs);//多单止损条件
kkzs:=c>(kcwzh+zs);//空单止损条件
sell(kdzs,0,marketr);
buyshort(holding=0 && kdzs,1,marketr); //多单止损后反手
sellshort(kkzs,0,marketr);
buy(holding=0 && kkzs,1,marketr); //空单止损后反手
//多单止盈止损计算
HH:=HHV(H,enterbars+1); //买开仓位置到现在最高价
A1:=ENTERPRICE+TP*A; //止盈点差起始位置
A2:=A1+DTP*A; //追踪点差起始位置
A3:=A1-2*A; //最小止盈位置
A4:=HH-DTP*A; //以上为根据止赢点差计算多单追踪止赢位置
if ((HH>=A1 && HH<=A2 && C<=A3)||(HH>A2 && C<=A4)) && holding>0 then sell(1,0,marketr);//多单止盈和追踪止盈
但是我发现实际跑盘时,这个好像都不执行,我单独看了一下他们的线,都是一条直线,而不随着行情的变动而变动。
请问一下,我这个策略的写法有没有问题?里面的那个ETERBARS这个函数加1是否是对的。
另外,我是否需要来声明:HH,A1,A2,A3,A4他们为全局变量呢?
KD:BUY(holding=0 and 做多条件 and abb and time<145500,1,limitr,c); //开多
KK:BUYSHORT(holding=0 and 做空条件 and abb and time<145500,1,limitr,c);//开空
//图表时使用的语句
kcwzl:=valuewhen(kd,low);//开多单时的最低价
kcwzh:=valuewhen(kk,high);//开空单时的最高价
这样是错的
开仓时的最高最低价用
ref(low,enterbars)
ref(high,enterbars)
谢谢回答,那其他的都没有错吧?
哦,那另外再请教一下,这个valuewhen语句是什么时候用比较合适呢?
你这样用是对的,但是kd和kk不对,用开多条件和开空条件来替代掉kd和kk
kd:buy.....
kk:buyshort...
这两句是没有任何意义的
这样说吧,
开多条件:c>ma(c,5);
开空条件:c<ma(c,5);
这个是我基本的开仓策略。
我按照您前面说的那个:
开仓时的最高最低价用
ref(low,enterbars)
ref(high,enterbars)
我把这个加上了,但是现在跑实盘,还是不对,止损总是没有打掉。
正常来说,在最后一个KD出现后那个最低点的黄点上就应该打掉我的止损了,我的止损也就是最低点的3个点而已,但是账号和程序都不动作。
请看附图
kcwzl:=valuewhen(做多条件 and ref(holding<=0,1) and holding>0,low);//开多单时的最低价
kcwzh:=valuewhen(做空条件 and ref(holding>=0,1) and holding<0,high);//开空单时的最高价
你的条件太简单所以导致了价格没有准确捕捉到,加了两个条件就行
这两句写在开仓语句后面