设为首页收藏本站

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

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

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: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2017-9-21 11:27:11 |只看该作者
检查代码其它地方,是否有将97号全局变量给初始为0的语句

使用道具 举报

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
3#
发表于 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
4#
发表于 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: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
5#
发表于 2017-9-21 15:34:47 |只看该作者
jiushiceshi 发表于 2017-9-21 12:05
全代码写操作97并置1的,的只有两处了:
        if(CurrentBar==0){
                SetGlobalVar(97, 0);


什么周期的图表?con1是什么赋值 ?

使用道具 举报

Rank: 1

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

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

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
7#
发表于 2017-9-22 08:22:29 |只看该作者
jiushiceshi 发表于 2017-9-21 16:37
1min的图表。
con1是  lowgetglobalvar(98)
会有信号闪烁吗?但是触发一次后,97就被赋值了呀。 ...

确定你所贴出来的示例代码是也是空开的条件与语句吗?
建议将空开中使用的全局变量也用fileappend打印日志出来看吧。。
有时你的贴出来的精简后的代码与你本身使用的逻辑可能有不同的地方。。就这些代码我们也没法帮您确定问题在哪里。。

但是A函数的重复发单 ,只可能与全局变量的控制不当有关啊。。
如果说你确认代码里没有bug,那您觉得问题会在哪里呢?

使用道具 举报

Rank: 1

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

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

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
10#
发表于 2017-9-22 10:06:49 |只看该作者
jiushiceshi 发表于 2017-9-22 09:20
感谢回复。
我怀疑的是,97置1的操作,发生了延迟,导致下一个tick来到前,97还是0,所以触发了两次。

没有延迟置1的可能性。。
建议还是从置1后有没有其它语句再置0这个方向去排查吧。

使用道具 举报

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

bottom

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

GMT+8, 2024-4-20 11:29

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部