设为首页收藏本站

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

请教全局变量 [复制链接]

Rank: 1

精华
0
UID
1014
积分
28
帖子
5
主题
3
阅读权限
10
注册时间
2008-1-3
最后登录
2019-3-30
跳转到指定楼层
1#
发表于 2008-1-12 16:40:44 |只看该作者 |倒序浏览
看了文档,可能是我对一些基本术语还不熟,依然有些不解,按照文档描述如下:

“系统公式目前提供50个全局变量。这50个全局变量附着在超级图表上,即一个图表的各个交易指令可以有50个全局变量。
您可以通过这些全局变量在交易指令中进行数据交换。关掉超级图表之后及全部删除,新建一个超级图表,新建出50个初值为无效值的变量。用户自行通过GetGlobalVar,SetGlobalVar进行保存及获取数据的操作。全局变量不会因为当前Bar的变化而变化。
每一个图表的单个技术指标,K线型态,特征走势都有50个全局变量。一个图表的所有交易指令共有50个全局变量。“

我的问题:

1、一个超级图表是否包括上面的所有技术指标,K线型态,特征走势和交易指令,如果是这样,一个超级图表可以有很多全局变量,只是不同组的全局变量彼此间不能共享。如果我理解正确,比如,图上有MACD指标,RSI指标,MACD和RSI各有50个全局变量,彼此不能共享。

2、其实,全局变量值的适用范围是对单一的指标,K线,交易指令而言,而不是在超级图表的范围内。那么这句话,“新建一个超级图表,新建出50个初值为无效值的变量。“,也不完全对,为什么是50个?如果用户加了多个指标,多个交易指令,那就不止50了。这个理解正确吗?

Rank: 7Rank: 7Rank: 7

精华
1
UID
727
积分
3770
帖子
537
主题
55
阅读权限
80
注册时间
2007-11-11
最后登录
2015-4-8
2#
发表于 2008-1-12 20:03:12 |只看该作者
第一点,技术指标、交易指令,K线型态等是用户在图表中调用之后才有,当然也初始几样指标,是可以随便删除和更改的,各个代码是最多可设50个全局变量,全局变量是设计者自行设定才有的,当然可以一个全局变量都不要,在同一图表,除了交易指令,其他的都是数据不可共享。
第二点,全局变量就是在一个图表上有效,没显示的图表中的指标及指令中的全局变量只是字符串层面上的意义,还没有被执行,内存中还没有它们的空间,已显示的图表,全局变量开始占用内存空间。“新建一个超级图表,新建出50个初值为无效值的变量。“这句话有点不准确,但表达的意思是指新建显示的瞬间,全局变量是没有内容的,之后,程序开始运行,如果代码中有全局变量,全局变量里就有数值了。
TradeBlazer交流群33647992。

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
377
积分
1827
帖子
222
主题
29
阅读权限
70
注册时间
2007-9-19
最后登录
2021-12-9
3#
发表于 2008-1-13 12:58:18 |只看该作者
是这样的
要理解全局变量,要先知道TB的运行程序的方式。 不然不太容易解释清楚 。

以一个超级图表,300根K线。为例。
在这300个BAR中,
公式运行,是从第一根K线,开始,把公式代码,从第一行,到最后一行,算一遍。
当第一BAR算完,得出相应的结果。有输出指令则输出,有交易指令则下单。
然后,运行下一根。也是这样的方式。
但是,第一根刚才运行的结果,是不会保留到第二根的。第二根时,所有的变量值会全部重算。
如果,你要把前面BAR运行结果,保存到后面。就要用全局变量。
除了全局变量。
TB还提供另一种方式,使用以前BAR的运算结果。 就是序列。 则需要定义序列变量。然后进行回溯引用以前BAR的运行结果。 然而,回溯引用,不如用全局变量来的效率。那对电脑资源消耗更大。另外,如果以回溯引用,那得要求出回溯的索引值。很是麻烦。
还是用全局变更省事的。
全局变量 只能设最多50个不同的。 每一个都可以反复赋值,但赋予新值后,之前的值则被清除。


全局变量 就是不会随每一BAR都重算的变量。 这么说,比如容易理解。
理解了这点,你那二个疑问,就好办了。

[ 本帖最后由 jvya 于 2008-1-13 13:09 编辑 ]
已有 1 人评分威望 收起 理由
kkdz + 8 说得真好!

总评分: 威望 + 8   查看全部评分

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
1064
积分
864
帖子
80
主题
1
阅读权限
60
注册时间
2008-1-13
最后登录
2008-6-27
4#
发表于 2008-1-14 00:22:52 |只看该作者
好帖,学习!非常感谢细心地讲解!

使用道具 举报

Rank: 4

精华
0
UID
1920
积分
288
帖子
7
主题
2
阅读权限
50
注册时间
2008-7-17
最后登录
2017-4-7
5#
发表于 2008-9-23 16:13:36 |只看该作者
说得很明白,谢谢,很理解了

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
1517
积分
1441
帖子
350
主题
29
阅读权限
60
注册时间
2008-4-19
最后登录
2011-10-16
6#
发表于 2009-5-16 20:14:22 |只看该作者
00000000000000000
学习TB,哪怕BT。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
7206
积分
922
帖子
170
主题
57
阅读权限
60
注册时间
2010-3-10
最后登录
2018-2-23
7#
发表于 2010-4-3 14:30:10 |只看该作者

有一点想证实一下!

比方说BAR是10分钟周期的,使用A_SendOrder的时候,因为10分钟周期比较长,不会引起重复下单,不需要用全局变量把?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20901
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
8#
发表于 2010-4-9 09:06:38 |只看该作者

回复 7# jsz123 的帖子

这与周期的长短无关,如果不用全局变量控制,A_SendOrder遇到条件成立就会发单,如果条件一直成立就一直发单,直到资金不足

使用道具 举报

Rank: 4

精华
0
UID
1124332
积分
421
帖子
52
主题
29
阅读权限
50
注册时间
2021-5-28
最后登录
2021-7-16
9#
发表于 2021-5-30 15:37:17 |只看该作者
全局变量还可以当锁用,代码如下:
//
OnBar(ArrayRef<Integer> indexs)
    {
            if (Barstatus == 0)
            {
                SetGlobalVar(1,0);
            }
            if (GetGlobalVar(1) == 0)
            {
                    //***
                    //***
                    SetGlobalVar(1,1);
            }
    }

使用道具 举报

Rank: 4

精华
0
UID
1124332
积分
421
帖子
52
主题
29
阅读权限
50
注册时间
2021-5-28
最后登录
2021-7-16
10#
发表于 2021-5-30 15:49:34 |只看该作者
全局变量还有一个好处就是:它的变量名是可以用string类型的变量进行组合的,代码如下:
//

Vars
    String xxx("xxx");
    Numeric i;
Events
    OnInit()
    {
            SubscribeBar("rb2110.SHFE","5m",20210501);
    }
    OnBar(ArrayRef<Integer> indexs)
    {
            if (Barstatus == 0)
            {
                    For i = 0 to 99
                    {
                            SetGlobalVar2(xxx + Text(i),i);
                    }
            }
            for i = 0 to 99
            Commentary(xxx + Text(i) + "=" + Text(GetGlobalVar2(xxx + Text(i))));
    }

使用道具 举报

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

bottom

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

GMT+8, 2024-5-7 13:07

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部