设为首页收藏本站

 找回密码
 注册
楼主: jiushiceshi
打印 上一主题 下一主题

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

Rank: 1

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

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
12#
发表于 2017-9-25 10:51:58 |只看该作者
jiushiceshi 发表于 2017-9-25 10:11
又发生了开仓两次的情况,我排查了代码,确实没有97置1再置0的情况,还可能是什么问题呢?

20170925T093 ...

建议卖开的代码,写日志,将所有判断的条件的值都要用日志记录下来。这样才好排查问题啊。

使用道具 举报

Rank: 1

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


使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
16#
发表于 2017-9-25 14:14:13 |只看该作者
jiushiceshi 发表于 2017-9-25 12:20
开仓处代码如下:
                if(GetGlobalVar(97) == 0 && low =  GetGlobalVar(99)      ){  
                        if(A_BuyPositi ...
  1. if(GetGlobalVar(97) == 0 && low <= GetGlobalVar(99) && high >=  GetGlobalVar(99)      ){  
  2.                         if(A_BuyPosition==0 ){
  3.                                 ljg_actual_open(1, GetGlobalVar(99)+ljg_actual_chaojia("dk"), GetGlobalVar(96));
  4.                         }
  5.                         SetGlobalVar(97, 1);        
  6.                 }
复制代码
这段代码里,只要第一层条件满足了,无论是否开仓都会去将97号全局变量置为1的。。
你的日志是写在哪个位置的呢?
如果是写在setgloblavar(97,1)的后面,那很明显在第一条日志根本显示的为0 是不相符的,说明没有执行到set97的这步,或者是set97为1后又有其它的语句再次set97为0了。。
你给的代码都是片段的,我们不可能从您给出的部分代码看出问题在哪一块,只能自己去写日志,一步步进行排查啊。

使用道具 举报

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
17#
发表于 2017-9-26 00:27:02 |只看该作者
本帖最后由 jiushiceshi 于 2017-9-27 10:56 编辑
小米 发表于 2017-9-25 14:14
这段代码里,只要第一层条件满足了,无论是否开仓都会去将97号全局变量置为1的。。
你的日志是写在哪个位 ...


日志记录在开仓函数actual_open里。
这是一个突破的策略,当价格达到99全局变量时,进入内部、开仓、记录日志,97置1。
日志中记录的第一条,97是0,第二条,97是1。

真的好奇怪,我看了多遍,给我的感觉,就是97赋值延迟了。。。。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
18#
发表于 2017-9-26 09:01:32 |只看该作者
jiushiceshi 发表于 2017-9-26 00:27
if(GetGlobalVar(97) == 0 && low =  GetGlobalVar(99)      ){  
                        if(A_BuyPosi ...

这个也不是凭感觉呀,且也不存在全局变量赋值延迟的可能性啊。。
你使用一个简单的代码去赋值 并写日志就可以清楚了。
你的日志写在ljg_actual_open里?但你的给97赋值 为1是在这个语句之后啊。。所以你当时写的第1条为0,是正常的表现吧?
或者建议您先不要使用自己写的函数,而直接使用TB自带的函数再将这个发单 --全局变量赋值的--写日志这个逻辑实现一下,再来看看结果呢?

使用道具 举报

Rank: 1

精华
0
UID
239251
积分
13
帖子
12
主题
1
阅读权限
10
注册时间
2016-8-22
最后登录
2019-8-15
19#
发表于 2017-9-26 09:23:30 |只看该作者
小米 发表于 2017-9-26 09:01
这个也不是凭感觉呀,且也不存在全局变量赋值延迟的可能性啊。。
你使用一个简单的代码去赋值 并写日志就 ...

好吧。
第一条97是0,是正常的,然后发送委托了。
不正常的是第二个委托,当时的97是1,但是逻辑是,97为1时,不发送。

使用道具 举报

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

bottom

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

GMT+8, 2024-4-24 23:21

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部