- 精华
- 0
- 在线时间
- 40 小时
- UID
- 109379
- 积分
- 112
- 帖子
- 30
- 阅读权限
- 30
- 注册时间
- 2012-4-5
- 最后登录
- 2019-10-10
- 精华
- 0
- UID
- 109379
- 积分
- 112
- 帖子
- 30
- 主题
- 10
- 阅读权限
- 30
- 注册时间
- 2012-4-5
- 最后登录
- 2019-10-10
|
新手在接触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功能肯定更强大,详细分析,遇到问题了再解决吧。
|
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
|