设为首页收藏本站

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

TB变量生存周期 [复制链接]

Rank: 2

精华
0
UID
109379
积分
112
帖子
30
主题
10
阅读权限
30
注册时间
2012-4-5
最后登录
2019-10-10
跳转到指定楼层
1#
发表于 2012-8-14 09:47:50 |只看该作者 |倒序浏览
新手在接触TB时,对变量的生存周期一般是没有概念的,学过编程C 或 C++语言的,肯定知道变量的作用域这个概念,但对于生存周期一般接触还是比较少的。
在使用时,我也总是纳闷有时变量使用Numeric 类型,运算就是得不到想要的结果
但全部使用NumericSeries 类型,有觉得没有必要,让内存占用持续上升。
(对新手解释一下:NumericSeries 相当于仓库来了新值,就往里边放;相当于无限大的数组
  而Numeric 则里边只能存一个值,来了新值,就把过去的值扔到。)
扩展下:无限制使用序列变量,也是部分网友反映,运行1~2小时后,内存用量上升的原因。

言归正传:为什么有时使用Numeric 类型,运算就是得不到想要的结果呢?

让我们做个测试:
例1:周期一分钟
Params
       
Vars
        Numeric YourVar1(0);
        NumericSeries YourVar2(0);
Begin
        //这里加入你的程序...
                FileAppend("d:\\alive.log","赋值前-"++TimeToString(time)+"--Y1="+Text(Yourvar1)+"--Y2="+Text(Yourvar2));
        If(time>=0.095500 && time <0.095600)  {yourvar1=1;Yourvar2=2;}
        FileAppend("d:\\alive.log","赋值后-"+TimeToString(time)+"--Y1="+Text(Yourvar1)+"--Y2="+Text(Yourvar2));
End

结果如下


从结果上可以看到:Numeric等简单变量的生存周期仅限于,程序执行的那个流程。即实盘中每个Tick;或历史测试值存在域:当根BAR执行时。除非你无条件每次都给他赋值
而序列变量则可以一直保存当前值。
实际上TB网校最初的章节就讲到,脚本执行时自上而下,从Params  一直执行到 END.只是没特别指出序列变量不会再次初始化。


新问题:全局变量GlobalVar功能肯定更强大,详细分析,遇到问题了再解决吧。















附件: 你需要登录才可以下载或查看附件。没有帐号?注册
以信为本 点石成金

Rank: 1

精华
0
UID
111649
积分
26
帖子
6
主题
0
阅读权限
10
注册时间
2012-7-22
最后登录
2013-2-24
2#
发表于 2012-9-22 10:19:02 |只看该作者
全局变量是在每一个TICK都有一个固定的值,只要没有语句修改,这个值不会改变,不需要申明,全局变量可直接使用

使用道具 举报

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

bottom

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

GMT+8, 2024-5-20 06:09

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部