以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  实盘成交的时序问题  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=164071)

--  作者:solegoose
--  发布时间:2018/6/19 19:39:20
--  实盘成交的时序问题

近来用金字塔交易的时候,经常会发生无法实盘成交的情况,但是在图标上显示了开平仓信号的,个人认为此情况和时序有关,请开发人员仔细查一下。

 

我在策略中,打印了调试信息:

IF SIG != 0 THEN
  DEBUGFILE2(\'D:\\TEST.TXT\', STKLABEL + \': \' + NUMTOSTR(DATE, 0) + \' \' + NUMTOSTR(TIME, 0) + \' SIG %.0f\', SIG, 1);
在这个调试信息之后才会调研BUY和SELL指令。

 

未开仓情况1,调试信息的输出片段

2018-06-07 09:32:13.220    510050: 1180606 150000 SIG 5
2018-06-07 09:32:13.220    510050: 1180607 93100 SIG 1

在9点32分13秒才发出信号1,表示要开仓,但实盘未成交。

 

PlaceOrder中的信息

2018-06-07 09:32:07.128    【图表】510050 运行完毕
9点32分07秒就检查了,此时我的策略还没有计算完成,当然检查不到信号,也就没有成交了。

 

未开仓情况2,调试信息的输出片段

2018-06-14 09:30:06.417    510050: 1180612 150000 SIG 5
2018-06-14 09:30:06.417    510050: 1180613 134600 SIG 1
2018-06-14 09:30:06.432    510050: 1180613 150000 SIG 5
最后一条信息,说明在30分06秒432毫秒的时候,我的策略发出信号5,表示要平仓,但实盘未成交。

 

PlaceOrde中的信息:

2018-06-14 09:04:18.052    【回报】057105009821 : 登录成功
2018-06-14 09:30:06.152    【图表】510050 运行完毕
2018-06-14 09:30:06.152    【图表】510050 运行完毕
这里数据表明,在30分06秒152毫秒的时候图表已经运行完毕,也是在策略完成之前

 

 

再看一个能成交的案例,调试信息

2018-06-07 14:01:14.666    150153: 1180607 95400 SIG 5
2018-06-07 14:01:14.671    150153: 1180607 140100 SIG 1

PlaceOrder中的信息
2018-06-07 14:01:15.185    【图表】框架:duan8 触发下单 BUY 品种 150153 下单K线 2018.06.07 14:01:00 公式:mid_stock_1 窗格ID:Window4 代码行:94
2018-06-07 14:01:15.186    【图表】模型下单 1500
2018-06-07 14:01:15.187    【图表】下单系数调整后 手数:1500
2018-06-07 14:01:15.187    【图表】直接下单
2018-06-07 14:01:15.190    【图表】框架:duan8 触发下单 BUY 品种 150153 下单K线 2018.06.07 14:01:00 公式:mid_stock_1 窗格ID:Window4 代码行:96
2018-06-07 14:01:15.191    【图表】模型下单 1500
2018-06-07 14:01:15.191    【图表】下单系数调整后 手数:1500
2018-06-07 14:01:15.192    【图表】直接下单
2018-06-07 14:01:15.194    【图表】150153 运行完毕
这个时间在后,故能实盘成交。

 

 

 

 


--  作者:yukizzc
--  发布时间:2018/6/19 21:27:46
--  

你的sig是开平仓的条件?

从日志来看都是运行完毕并没有条件满足触发的记录。

在不了解您程序所有的情况,看下会不会是这个情况

同一个交易语句在一根k上只会触发一次,而debugfile没有这个限制所以造成输出sig满足但是没有交易


--  作者:solegoose
--  发布时间:2018/6/20 9:13:40
--  
 sig=1开仓。sig=5是平仓。
debugfile2中已经显示sig=1,就是需要开仓。

2018-06-14 09:30:06.432    510050: 1180613 150000 SIG 5
最后一条信息,说明在6月14日,9点30分06秒432毫秒的时候,我的策略发出信号5,这个信号所在的K线时间是1180613 150000,表明K线时间是2018-6-13日,15:00:00




--  作者:yukizzc
--  发布时间:2018/6/20 9:24:15
--  

可否发一段可供工作人员测试的代码

 


--  作者:solegoose
--  发布时间:2018/6/20 9:34:00
--  
我说了很可能是时序问题。也就是说,很有可能因为是我的策略比较复杂,运算时间太久才可能发生的,我们测试过很简单的策略,几乎不发生问题。
我猜想你们检查图表是否发出信号(也就是写PlaceOrder)的是一个线程。然后运行策略的又是一个线程。结果策略还没有运行完,前者就开始检查图表是否发出信号,结果没有检查到信号。
--  作者:fly
--  发布时间:2018/6/20 10:14:56
--  
我们将持续跟踪您提到的问题
(1)您的策略,图表程序化,模式选择是走完一根K线吗?
       在信号不闪烁的情况下,走完一根K线,还没有客户反馈有问题。所以您的问题,我们很重视。
(2)“工具”菜单下,--选项,“常规”标签下,找到“盘中延迟刷新  毫秒”,这里调小为100.再跟踪看看

--  作者:solegoose
--  发布时间:2018/6/20 10:39:55
--  
 是走完一根k线这种模式。
我们和他们的策略估计有一点不一样,我用的是dll的方式,策略是用C++写的,当最后一个K线的tick在跳动的时候,最后一根K线上是不会生成任何信号的,
当下一个K线的第一个tick开始跳动的时候,当前这根k线才可能发出信号。相对来说我们出信号的时间有点晚。我估计一般的做法,最后一根k线是会不停的产生信号,
信号会闪烁,但是实盘交易那里选择了k线走完才检查一次,故信号闪烁也没有问题。

用你们以前老的版本,我们没有发现问题,因此我们才采用现在的这种处理模式的。


--  作者:solegoose
--  发布时间:2018/6/20 20:13:16
--  
那个选项我修改过了。在测试的。
但我觉得你们程序上是有bug的。

--  作者:solegoose
--  发布时间:2018/6/21 10:59:33
--  
 今天又出问题了,那个选项没有用。
症状和前几天的一模一样。

--  作者:solegoose
--  发布时间:2018/6/21 14:32:14
--  
 斑竹呢,跑哪里去了。赶紧来答疑啊。