呵呵,这是我的风格啊
结构清晰,赏心悦目
该方法是运用在固定轮询或者高频的。
(K线走完,信号不会闪烁。但下单是按指定价下单,可能过大或者过小)
此外有几个问题,跟楼主探讨一下:
1,离场问题。比如多平, zs 和 lo20 谁先触碰到,要有个判断。如果是先触碰到lo20,却用zs评测,不科学。
2,开多条件和开空条件可能会同时成立,要稍微处理一下
3,别用enterprice, 用全局变量自己记录,速度更快
4,加1个mindiff,太小了。至少要3个才合理啊(评测要求)
5,开仓当根可能就达到50个点的利润。所以,开多时要用“h>=hl ”
完整如下:
variable:zs=0,hl=0,kcj=0;
hi20:=ref(hhv(h,20),1);
lo20:=ref(llv(l,20),1);
if holding>0 and l<max(zs,lo20) then sell(1,1,limitr,min(o,max(zs,lo20))-mindiff);//止损
if holding<0 and h>min(zs,hi20) then sellshort(1,1,limitr,max(o,min(zs,hi20))+mindiff);//止损
if holding=0 and h>hi20 and ref(c,1)>ref(c,20) then begin//开多
buy(1,1,limitr,max(o,hi20)+mindiff);
hl:=h;//记录开仓后的最高点
kcj:=max(o,hi20)+mindiff;
zs:=kcj-50*mindiff;//初始止损50个跳动点
end
if holding=0 and l<lo20 and ref(c,1)<ref(c,20) then begin//开空
buyshort(1,1,limitr,min(o,lo20)-mindiff);
hl:=l;//记录开仓后的最低点
kcj:=min(o,lo20)-mindiff;
zs:=kcj+50*mindiff;//初始止损50个跳动点
end
if holding>0 and h>=hl then begin//上移最高点
hl:=h;
if hl>kcj+80*mindiff then zs:=hl-20*mindiff;//满80个点,回落20点为止损位
else if hl>kcj+50*mindiff then zs:=hl-30*mindiff;//满50个点,回落30点为止损位
end
if holding<0 and l<=hl then begin
hl:=l;
if hl<kcj-80*mindiff then zs:=hl+20*mindiff;//满80个点,反弹20点为止损位
else if hl<kcj-50*mindiff then zs:=hl+30*mindiff;//满50个点,反弹30点为止损位
end