设为首页收藏本站

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

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

Rank: 10Rank: 10Rank: 10

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

使用道具 举报

Rank: 10Rank: 10Rank: 10

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


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

使用道具 举报

Rank: 10Rank: 10Rank: 10

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

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

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

使用道具 举报

Rank: 10Rank: 10Rank: 10

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

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

使用道具 举报

Rank: 10Rank: 10Rank: 10

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

20170925T093 ...

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

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
6#
发表于 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: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
7#
发表于 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自带的函数再将这个发单 --全局变量赋值的--写日志这个逻辑实现一下,再来看看结果呢?

使用道具 举报

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

bottom

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

GMT+8, 2024-5-3 17:54

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部