老师: 我用的是标准版图表交易,信号执行固定间隔,数据30分钟,意图收盘前1-2分钟平仓。代码这样写,为什么总是14:30分平仓。
SPJ:=valuewhen(time>=145858,CLOSE);
if time>=145858 then BEGIN
收盘平多:sell(1,PN%,LIMITR,SPJ-mindiff);
收盘平空:sellshort(1,PN%,LIMITR,SPJ+mindiff);
end
请求给予指导。
你这个time判断里面写的时间是北京时间吗?
1.time本身返回值和你时区有关系,你如果用的金字塔时区,你写的值应该按照金字塔时区来进行。比如下午14:30 对应金字塔时间实际是18:30。
2.因为time返回的是K线时间, 你这个思路也是不行的。如果是30分钟K,当前K对应下午14:30 那么上一个K则是14:00 没有中间值的。你这个思路是要这个中间值来做对比和判断是不行的。
对,我使用的是北京时间。这个思路不行,网络上看到一个这样的代码(有小改),老师看看行吗?
p:=100;
SPJ:=valuewhen(time>=145959,CLOSE);
交易时间:=time>=090000 and time<=145959;
If islastbar<>1 and 交易时间<>1 then begin
收盘平多:sell(1,P%,LIMITR,SPJ-mindiff);
收盘平空:sellshort(1,P%,LIMITR,SPJ+mindiff);
end
老师有好的表述方法吗?
另外还有个问题:用标准版‘固定间隔’跑程序化,用 LIMITR 触发限价交易,触发价是当周期最高价上穿上一周期前M周期最高价,有CROSS(H,REF(HHV(H,M),1)) 和 H>=REF(HHV(H,M),1) 两种代码写法,那一种符合要求,不会出现信号闪烁。
谢谢老师!
1.收盘前提前下单
abb:(time0-timetot0(dynainfo(207))<=120) or not(islastbar);//提前120s下单
if abb and time=150000 then BEGIN
收盘平多:sell(1,1,market);
收盘平空:sellshort(1,1,market);
end
你的周期必须大于你这里设置的提前下单的秒数,当然你现在是30分钟周期是没问题的,如果切换周期的话,需要注意修改下。
2.上穿的逻辑只能CROSS(H,REF(HHV(H,M),1)) 满足。
其实因为你
REF(HHV(H,M),1)) 在当前K肯定是稳定的,最高价也只可能更高,只要中间有一次满足上穿条件,那么这个信号就应该是稳定的。