设为首页收藏本站

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

关于普通变量和全局变量 [复制链接]

Rank: 3Rank: 3

精华
0
UID
234307
积分
153
帖子
103
主题
29
阅读权限
40
注册时间
2016-5-12
最后登录
2023-7-26
跳转到指定楼层
1#
发表于 2016-5-31 20:49:21 |只看该作者 |倒序浏览
本帖最后由 laofu602 于 2016-5-31 20:52 编辑

在使用A_SendOrder指令时,为了避免重复发单,我考虑设置一个变量做开平仓标志,例如

Vars
    Numeric          HasSendbuy(0);
    Numeric          HasSendsell(0);

。。。
        if (A_BuyPosition==0&&HasSendbuy==0&&H>H[1])
        {
                A_SendOrder(Enum_Buy,Enum_Entry,1,H[1]);
                HasSendbuy = 1;//开仓后,禁止重复发单
                HasSendsell = 0;//开仓后,允许平仓
        }
        if (A_BuyPosition>0&&HasSendsell==0&&L<L[1])
        {
                A_SendOrder(Enum_Sell,Enum_Exit,bidPosition,L[1]);
                HasSendsell = 1;//平仓后,禁止重复发单
                HasSendbuy = 0;//平仓后允许开多仓
        }
。。。

那么这个开平仓标志应该使用普通变量还是使用全局变量?
如果使用普通变量,在实时bar中,每个Tick是不是都会初始化成0,也就是允许开平仓了,这就还可能出现重复发单。
如果使用全局变量,那么又会把标志带到下一Bar中,这也不对头。
应该如何解决这个问题?
投机像山岳一样古老

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2016-6-1 09:12:51 |只看该作者
这里应该使用全局变量方可。
标志带到下一个bar有何问题?开仓时设置的变量,可以在平仓时清零 ,为下一次开仓做准备。平仓时的设置同理。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
234307
积分
153
帖子
103
主题
29
阅读权限
40
注册时间
2016-5-12
最后登录
2023-7-26
3#
发表于 2016-6-2 05:18:20 |只看该作者
小米 发表于 2016-6-1 09:12
这里应该使用全局变量方可。
标志带到下一个bar有何问题?开仓时设置的变量,可以在平仓时清零 ,为下一次 ...

另外问一个新手比较菜的问题,是不是在每个tick执行一遍代码时,都是从代码最上端定义参数变量开始?还是从Begin开始?

如果是从最上端开始,全局变量也会被赋予初始默认值,所以必须在Begin之后立即使用GetGlobalVar来恢复全局变量?

使用道具 举报

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

bottom

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

GMT+8, 2024-5-24 05:32

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部