设为首页收藏本站

 找回密码
 注册
查看: 4419|回复: 11
打印 上一主题 下一主题

利用全局变量也会出现重复发单的问题 [复制链接]

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
跳转到指定楼层
1#
发表于 2017-9-21 10:25:51 |显示全部楼层 |倒序浏览
代码示例如下:
                if(GetGlobalVar(97) == 0 && con1   ){  
                        if(A_BuyPosition==0 ){
                                A_sendorder开仓
                        }
                        SetGlobalVar(97, 1);       
                }
按理只要进入第一个if,全局变量97应该已经被置1,但是实盘中还是有重复了2次的情况,记录的日志如下:
20170921        0.092939        20170921        0.0929        27921                空开        8678        10        成功:委托
20170921        0.092939        20170921        0.0929        27921                空开        8678        10        成功:委托
第一个时间戳是currenttime,第二个时间戳是time。
实盘中确实发送了两次委托,并且都成功了,TB的当日交易如下:
合同号                类型        状态        开平标志        数量        委托价格        委托时间        成交数量
30839289                卖出        全部成交        开仓        10        8678        2017/9/21 9:29        10
30839285                卖出        全部成交        开仓        10        8678        2017/9/21 9:29        10

请问为什么全局变量没有控制成功。另请问为什么time函数返回的不是毫秒级的时间戳。

谢谢

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
2#
发表于 2017-9-21 12:00:45 |显示全部楼层
小米 发表于 2017-9-21 11:27
检查代码其它地方,是否有将97号全局变量给初始为0的语句

感谢回答。我确认代码里没有类似逻辑或者bug。

您的意思,本tick内,97确实会被置1,并且不会有延迟,是吧。

另请问,还有没有更保险的,避免重复发单的手段呢?

感谢。

使用道具 举报

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
3#
发表于 2017-9-21 12:05:36 |显示全部楼层
小米 发表于 2017-9-21 11:27
检查代码其它地方,是否有将97号全局变量给初始为0的语句

全代码写操作97并置1的,的只有两处了:
        if(CurrentBar==0){
                SetGlobalVar(97, 0);
        }


        if(Time == 0.09 || time == 0.21){
                SetGlobalVar(97, 0);
        }

子函数里也没有。

使用道具 举报

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
4#
发表于 2017-9-21 16:37:22 |显示全部楼层
小米 发表于 2017-9-21 15:34
什么周期的图表?con1是什么赋值 ?

1min的图表。
con1是  low<getglobalvar(98) && high>getglobalvar(98)
会有信号闪烁吗?但是触发一次后,97就被赋值了呀。

使用道具 举报

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
5#
发表于 2017-9-22 09:20:39 |显示全部楼层
小米 发表于 2017-9-22 08:22
确定你所贴出来的示例代码是也是空开的条件与语句吗?
建议将空开中使用的全局变量也用fileappend打印日 ...

感谢回复。
我怀疑的是,97置1的操作,发生了延迟,导致下一个tick来到前,97还是0,所以触发了两次。

有这个可能吗。

使用道具 举报

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
6#
发表于 2017-9-22 09:26:05 |显示全部楼层
小米 发表于 2017-9-22 08:22
确定你所贴出来的示例代码是也是空开的条件与语句吗?
建议将空开中使用的全局变量也用fileappend打印日 ...

按您说的,我在发送委托的日志里,加入了97的值得输出。
今天再观察下,有问题我再请教。
感谢。

使用道具 举报

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
7#
发表于 2017-9-25 10:11:25 |显示全部楼层
小米 发表于 2017-9-22 10:06
没有延迟置1的可能性。。
建议还是从置1后有没有其它语句再置0这个方向去排查吧。 ...

又发生了开仓两次的情况,我排查了代码,确实没有97置1再置0的情况,还可能是什么问题呢?

20170925T093109 send order: 8763806 pp1801 卖开 10 8648.00000000 [A_SendOrder#aaa] [OrderRef=2]
20170925T093109 send order: 8763806 pp1801 卖开 10 8648.00000000 [A_SendOrder#aaa] [OrderRef=3]

使用道具 举报

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
8#
发表于 2017-9-25 12:16:08 |显示全部楼层
本帖最后由 jiushiceshi 于 2017-9-27 10:56 编辑
小米 发表于 2017-9-25 10:51
建议卖开的代码,写日志,将所有判断的条件的值都要用日志记录下来。这样才好排查问题啊。 ...




日志是在开仓函数的最后,也就是委托发送之后。可以看到,第二个委托发送时,97的值是1。因此我怀疑是发送第二个委托时,97还没有成功置1.

使用道具 举报

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
9#
发表于 2017-9-25 12:18:36 |显示全部楼层
本帖最后由 jiushiceshi 于 2017-9-27 10:56 编辑
小米 发表于 2017-9-25 10:51
建议卖开的代码,写日志,将所有判断的条件的值都要用日志记录下来。这样才好排查问题啊。 ...


使用道具 举报

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
10#
发表于 2017-9-25 12:20:41 |显示全部楼层
本帖最后由 jiushiceshi 于 2017-9-27 10:56 编辑
小米 发表于 2017-9-25 10:51
建议卖开的代码,写日志,将所有判断的条件的值都要用日志记录下来。这样才好排查问题啊。 ...


使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-3 14:22

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部