以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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=163828)

--  作者:infocell
--  发布时间:2018/6/4 15:22:33
--  关于重复开单的问题

我们的公式已经运行两年多了,原来采用等HIGH>buypoint或LOW<buypoint等方式,一直没有重复开单,最近加了一个全局变量限制开单时间间隔的语句,结果变成会重复发单了。

 

而且前后发单的消息是在不同K线上的,而重复发单后,在第二次发单时输出的公式中的参数居然没有变化,比如买手数和持仓数居然是完全一样的。

 

图表交易,选项:走完K线,等间隔扫描,高频,1秒。

 

代码如下:

 

MAX_GOT:=1;

FOR I_tmp=1 TO 2 DO BEGIN

IF  LOW<=Buy_point[I_tmp]  AND (EXITBARS>2 OR EXITBARS<0) THEN BEGIN

 

   U_GOT:=ABS(TIMETOT0(CURRENTTIME)-EXTGBDATA(STR_GOT));//全局防撞单,初始设置为大于1秒
 IF NOT(U_GOT>MAX_GOT) THEN GOTO my_Rtlock;//持仓数等于零,无须止损

 

开多:buy(1,1,MARKETR),NOAXIS;

 

END

 

开单后,会把CURRENTTIME写入全局变量STR_GOT中。

       t_tmp:=TIMETOT0(CURRENTTIME);
       EXTGBDATASET(STR_GOT,t_tmp);

 

试过用TIME,也同样会重复开单,而且更严重。用CURRENTTIME只有在橡胶这种交易活跃的品种会出现重复发单,像MA就不会。

 

公式中输出的消息如下:

 

2018-06-04 13:59:00.741    7B20橡胶1809序列位置:3908,开多数:1,成交价:11705,持仓:1,浮动盈亏:-10,总买单数:1,资产:999990,实时:1,触发价格:11705
2018-06-04 13:59:02.379    7B20橡胶1809序列位置:3908,开多数:1,成交价:11710,持仓:1,浮动盈亏:-10,总买单数:1,资产:999990,实时:1,触发价格:11725
2018-06-04 13:59:04.267    7B20橡胶1809序列位置:3909,开多数:1,成交价:11705,持仓:1,浮动盈亏:-10,总买单数:1,资产:999990,实时:1,触发价格:11705
2018-06-04 13:59:06.414    7B20橡胶1809序列位置:3909,开多数:1,成交价:11705,持仓:1,浮动盈亏:-10,总买单数:1,资产:999990,实时:1,触发价格:11725

 

实盘中,只有第一个价格符合条件,原来也会从同一根K线中出来两个成交消息,但只会成交一单。但这次,在K线3909又出来同样的消息,又成交了一单。这种现象似乎不是信号闪烁,居然前一单成交后,第二单成交后,持仓还是不变,总买单数也不变。

不知是何原因,如何修改避免?请帮忙指导。

 

日志如下:

 

 

2018-06-04 13:59:00.835    【图表】L09 运行完毕
2018-06-04 13:59:00.835    【图表】PP01 运行完毕
2018-06-04 13:59:00.835    【图表】L01 运行完毕
2018-06-04 13:59:00.835    【图表】框架:TWS0616 触发下单 BUY 品种 RU09 下单K线 2018.06.04 13:59:05 公式:7BUYZZ80520 窗格ID:Window30 代码行:1945
2018-06-04 13:59:00.835    【图表】模型下单 1
2018-06-04 13:59:00.835    【图表】下单系数调整后 手数:1
2018-06-04 13:59:00.851    【图表】直接下单
2018-06-04 13:59:00.851    【图表】RU09 运行完毕
2018-06-04 13:59:00.851    【图表】RU01 运行完毕
2018-06-04 13:59:00.851    【下单】RU09 价0.000000 量1 买卖0 类型1 开平0 账户99000985 Formula 1
2018-06-04 13:59:00.851    【下单】确认报单已发送 ID=-2004934769 RefID = 7400
2018-06-04 13:59:00.929    【指令】收到回报指令 ID = -2004934769 RefID = 7400
2018-06-04 13:59:00.944    【指令】收到回报指令 ID = -2004934769 RefID = 7400
2018-06-04 13:59:00.944    【指令】收到回报指令 ID = -2004934769 RefID = 7400
2018-06-04 13:59:00.944    【回报】99000985 : ru1809 - 已报单 1 价格:11725 开 买
2018-06-04 13:59:01.069    【指令】收到成交回报指令 REFID = 7400 vol = 1
2018-06-04 13:59:01.100    【图表】AP10 运行完毕
2018-06-04 13:59:01.100    【图表】AP01 运行完毕
2018-06-04 13:59:01.100    【图表】PP09 运行完毕

 

 

 

2018-06-04 13:59:04.267    【图表】PP01 运行完毕
2018-06-04 13:59:04.267    【图表】L01 运行完毕
2018-06-04 13:59:04.267    【图表】框架:TWS0616 触发下单 BUY 品种 RU09 下单K线 2018.06.04 13:59:10 公式:7BUYZZ80520 窗格ID:Window30 代码行:1945
2018-06-04 13:59:04.267    【图表】模型下单 1
2018-06-04 13:59:04.267    【图表】下单系数调整后 手数:1
2018-06-04 13:59:04.267    【图表】直接下单
2018-06-04 13:59:04.267    【图表】RU09 运行完毕
2018-06-04 13:59:04.267    【图表】RU01 运行完毕
2018-06-04 13:59:04.267    【下单】RU09 价0.000000 量1 买卖0 类型1 开平0 账户99000985 Formula 1
2018-06-04 13:59:04.283    【下单】确认报单已发送 ID=-2004934759 RefID = 7410
2018-06-04 13:59:04.345    【指令】收到回报指令 ID = -2004934759 RefID = 7410
2018-06-04 13:59:04.345    【指令】收到回报指令 ID = -2004934759 RefID = 7410
2018-06-04 13:59:04.361    【指令】收到回报指令 ID = -2004934759 RefID = 7410
2018-06-04 13:59:04.361    【回报】99000985 : ru1809 - 已报单 1 价格:11725 开 买
2018-06-04 13:59:04.392    【图表】AP10 运行完毕
2018-06-04 13:59:04.392    【图表】AP01 运行完毕
2018-06-04 13:59:04.392    【图表】PP09 运行完毕
2018-06-04 13:59:04.407    【图表】L09 运行完毕
2018-06-04 13:59:04.407    【图表】PP01 运行完毕
2018-06-04 13:59:04.407    【图表】L01 运行完毕
2018-06-04 13:59:04.407    【图表】RU09 运行完毕


--  作者:FireScript
--  发布时间:2018/6/4 16:03:47
--  
K线是什么周期的?从日志和输出记录来看,序列位置3908K和3809K 时间上已经超过1s了。也就是满足你设置的间隔了。并且下单也没限制在holding=0时才允许下单。

看上去有问题的是输出的持仓,盈亏等数据似乎有点问题,你上面给的日志是完整的?还是说中间去掉了一部分?02-03秒 中间这部分日志呢?



--  作者:infocell
--  发布时间:2018/6/4 16:10:31
--  

是在1秒线上,就是会重复开单,中间的日志都是一些没有用的,就删掉了。

 


--  作者:infocell
--  发布时间:2018/6/4 16:12:29
--  
一个单子开出来后,我会通过设定标志位,避免二次开仓,原来都不会重复开仓的,但现在连续在两根K线开出相同的单子,由于前后持仓是一样的,用holding来限制后面的重复开仓,感觉也没有用啊。