if time>=25800 and time<=25900 then //22:58 22:59 2个K上
begin //平仓语句
end
以上不可用 |
=====================
想在15分钟周期,夜盘23点收盘前一分钟进行平仓 ,如22:59
CURRENTTIME这个函数也不能用 ,有没有合适的方法?
大周期上面这样不行的。上面那个是基于你1分钟这种小周期的。如果是大周期的话,你没办法在小于周期的时间跨度上做这种时间判断的。
所以只能这样,在历史K上信号都是显示在收盘K上的:
INPUT:N(3,1,200,1);
abb:=timetot0(CLOSETIME(1))-time0,NODRAW;//当前K线时间距离收盘K线结束倒计时
abb3:=timetot0(CLOSETIME(1))-timetot0(dynainfo(207)),NODRAW;//当前时间距离收盘K时间
if (abb<N*60 and abb>=0 and (not(ISLASTBAR))) or (ISLASTBAR and abb3>=0 and abb3<N*60) then //兼顾实际交易时候的信号和历史回测信号
begin
sell(holding>0,holding,market);
sellshort(holding<0,holding,market);
DRAWICON(1,h,1); //显示下信号位置,用于测试效果,可自行删去。
end
给你个简单的策略,白天测试下。另外这个触发信号前提是你模型里面有仓位,我怀疑你当时是不是没有虚拟持仓。
buy(TODAYBAR=1,1,market);
INPUT:N(3,1,200,1);
//红色部分你自行调一个时间,这是9点15分的。你改成新的时间测试即可
abb:=timetot0(131500)-time0,NODRAW;//当前K线时间距离收盘K线结束倒计时
abb3:=timetot0(131500)-timetot0(dynainfo(207)),NODRAW;//当前时间距离收盘K时间
if (abb<N*60 and abb>=0 and (not(ISLASTBAR))) or (ISLASTBAR and abb3>=0 and abb3<N*60) then //兼顾实际交易时候的信号和历史回测信号
begin
sell(holding>0,holding,market);
end
我本地运行结果:
此主题相关图片如下:temp.png
2020-11-25 09:14:02.790 【图表】AG00 运行完毕
2020-11-25 09:14:04.820 【图表】框架:Technic 触发下单 SELL 品种 AG00 下单K线 2020.11.25 13:15:00 公式:次月合约 窗格ID:Main 代码行:10
2020-11-25 09:14:04.820 【图表】模型下单 1
2020-11-25 09:14:04.820 【图表】下单系数调整后 手数:1
2020-11-25 09:14:04.820 【图表】实际持仓 3
2020-11-25 09:14:04.820 【图表】直接下单
2020-11-25 09:14:04.830 【图表】AG00 运行完毕
2020-11-25 09:14:04.830 【下单】AG12 价0.000000 量1 买卖1 类型1 开平1 账户113049 Formula 1
2020-11-25 09:14:04.830 【下单】确认报单已发送 ID=-1351922169 RefID = 860
2020-11-25 09:14:04.900 【指令】收到回报指令 ID = -1351922169 RefID = 860
2020-11-25 09:14:04.900 【回报】113049 : ag2012 - 已报单 1 价格:4892 平 卖
2020-11-25 09:14:04.900 【指令】收到回报指令 ID = -1351922169 RefID = 860
2020-11-25 09:14:04.900 【指令】收到成交回报指令 REFID = 860 vol = 1
2020-11-25 09:14:04.910 【回报】113049 : ag2012 - 已成交 1 价格:4895 平 卖
所以代码是没啥问题的,你排查下应该是其他原因导致的。
辛苦了 再麻烦你下 : 如果交易信号与实际持仓不符合 如HOLDING=-1 实际持仓是多仓 ,这种情况就没有办法平仓了吗
没有太好的办法了。你如果有后台程序化倒是可以写一个无条件,收盘全平的代码。否则图表上必须依赖出信号才行。