对于历史行情,OnBar每根k线只会执行一次,而OnDic是不是订阅了几个数据就会执行几次?
这样会导致一个问题:Var中声明的Numeric变量,每次执行OnBar前,首先将这个变量赋初值为0,然后对这个变量进行操作。
而执行 OnDic时,每次执行都会将这个变量赋初值为0,然后操作这个变量,收到几个基础数据,这个变量就被重置为0几次。
Vars
Plot plt;
Numeric total;
Numeric a;
Numeric b;
Events
OnInit()
{
SubscribeDic("订阅数据1",Symbol);
SubscribeDic("订阅数据2",Symbol);
}
//订阅了两个数据,意味着执行一次OnBar, 会执行两次OnDic
OnDic(StringRef dicName, StringRef dicSymbol, DicDataRef dicValue)
{
if(dicName=="订阅数据1" and dicSymbol == Symbol)
{
//开始执行前,a, b, total都等于0
dicValue.getValue(a);
plt.line("a", a);
plt.line("total", a + b);//执行这句时,a不等于0,b等于0,最后total等于a的值
}
else if(dicName=="订阅数据2" and dicSymbol == Symbol)
{
//开始执行前,a, b, total都等于0
dicValue.getValue(b);
plt.line("b", b);
plt.line("total", a + b);//执行这句时,a等于0,b不等于0,最后total等于b的值
}
//最后total到底是多少?我怎么才能得到 total = a + b 正确的值
}
ondic本质上是你订阅的基础数据发生更新时驱动,不更新就不驱动