以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  平仓语句不起作用  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=183161)

--  作者:netlife88
--  发布时间:2020/11/23 23:08:52
--  平仓语句不起作用

 if time>=25800 and time<=25900 then //22:58 22:59 2个K上
begin 
//平仓语句 
end
以上不可用

=====================

想在15分钟周期,夜盘23点收盘前一分钟进行平仓 ,如22:59

CURRENTTIME这个函数也不能用 ,有没有合适的方法?


--  作者:FireScript
--  发布时间:2020/11/24 9:00:26
--  
大周期上面这样不行的。上面那个是基于你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



--  作者:netlife88
--  发布时间:2020/11/25 8:51:28
--  
用的你这个 昨晚也没起作用 
--  作者:FireScript
--  发布时间:2020/11/25 8:56:13
--  
 你是固定轮询模式还是走完K的。
--  作者:netlife88
--  发布时间:2020/11/25 8:58:22
--  
固定轮询1秒
--  作者:FireScript
--  发布时间:2020/11/25 9:17:11
--  
给你个简单的策略,白天测试下。另外这个触发信号前提是你模型里面有仓位,我怀疑你当时是不是没有虚拟持仓。

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 平 卖


所以代码是没啥问题的,你排查下应该是其他原因导致的。



--  作者:netlife88
--  发布时间:2020/11/25 23:17:21
--  
辛苦了 再麻烦你下 : 如果交易信号与实际持仓不符合 如HOLDING=-1 实际持仓是多仓 ,这种情况就没有办法平仓了吗
--  作者:FireScript
--  发布时间:2020/11/26 9:11:33
--  
 是的。这种是不会出平多信号的。只会出平空信号的。
--  作者:netlife88
--  发布时间:2020/11/26 9:18:52
--  
有没有其它方法 强制平掉所有持仓 
--  作者:FireScript
--  发布时间:2020/11/26 9:45:35
--  
没有太好的办法了。你如果有后台程序化倒是可以写一个无条件,收盘全平的代码。否则图表上必须依赖出信号才行。