我们的公式已经运行两年多了,原来采用等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 运行完毕
是在1秒线上,就是会重复开单,中间的日志都是一些没有用的,就删掉了。