设为首页收藏本站

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

是不是内置的序列值系统会保证每个Bar初始化,而序列函数则不一定? [复制链接]

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
1#
发表于 2013-7-15 14:39:28 |显示全部楼层
1、Close,High是系统函数,所以不存在初始化的问题,任何时候都能访问到。
2、拿2楼的代码举例:
  1. Vars
  2.         Numeric myValue;
  3. Begin
  4.         If(Date == 20130712 && Time == 0.093500)
  5.         {
  6.                 myValue = CoefficientR(Close, OpenInt, 10);
  7.                 Commentary("Rho = " + Text(myValue));
  8.         }
  9. End
复制代码
根据上面的代码,你只在其中一个Bar进入CoefficientR函数。其他的Bar没有进入。
CoefficientR的参数Price1和Price2是两个序列变量。只有当调用时才会赋值

整个执行顺序用伪代码表示大致如下:

for I= 0 to BarCount-1
{           
      If(Date == 20130712 && Time == 0.093500)
        {
             Price1 = Close;
             Price2 = OpenInt;
             myValue = CoefficientR(....);
             Commentary("Rho = " + Text(myValue));
        }
}

使用Close作为参数,并不是函数里面的Price1就可以像Close一样使用,只是把当时的Close值传递给Price1。和直接赋值一个10没有区别。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
2#
发表于 2013-7-17 14:38:34 |显示全部楼层
1、按照一般的语言理解,Price1,Price2每个Bar都是重新分配。但TB的序列变量处理机制是不一样的,这正是TB语言和普通计算机语言的最大区别。序列变量会在全局的空间为每个序列变量分配空间。这样才能正确的进行回溯。如果中间一截序列变量没有被赋值,会用最后一个有效的值填充。
2、你的公式应用使用了两条testFunction,被系统认为不同的语句,序列变量是不同的。
应该写成以下格式才是你想要的效果:
  1.         If(count == 10)
  2.         {
  3.              nnn = 2013;
  4.         }
  5.         Else
  6.         {
  7.              nnn = Close;
  8.         }
  9.         myValue = testFunction(nnn);
复制代码

使用道具 举报

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

bottom

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

GMT+8, 2024-5-19 15:56

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部