关于rerun和restart在公式中运用遇到了一些困惑:
公式如下:
Params
//此处添加参数
Vars
//此处添加变量
Global Integer count(0);
GloBal Bool flag(False);
Defs
//此处添加公式函数
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次
OnInit()
{
count = count + 1;
Print("OnInit,count:" + Text(count));
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
Print("bar");
If(BarStatus==2)
{
count = count + 1;
Print("Onbar2,count:" + Text(count));
if(!flag)
{
ReRun();
Print("ReRun");
flag = True;
}
Print("rerun后面");
}
}
在K线图中加载公式,如图:
出现不能理解的问题:
1.仅仅加载了5根K线,但是输出的"bar"信息却有9条?
2.为什么会执行rerun后面的语句呢?rerun只会重新执行最后一根bar吗?rerun的运行机制到底是怎样呢?
3.可以将公式中的rerun换成restart,发现restart后面的语句也会执行?
1.这边输出"bar"一共是10条,因为print函数是没有按输出顺序显示,具体是因为运行了两次 一个输出10条
2.rerun和restart都会先将当前的bar执行完毕 然后从新运行不是只会执行最后一个bar 具体区别看一下相关的帮助文档
为什么print不按照输出顺序输出呢?而且换成restart后print出来的“bar”只有5个,这又是什么原因呢?
因为条件控制的原因 rerun时运行一边 重新加载再运行 restar时 运行一一遍然后时一直重新加载再运行 看看帮助文档中rerun和restart restart重置了全局变量
还是不懂,为什么rerun重新运行后print不按照输出顺序输出呢?
这个是因为Print实现问题,要是想要有序用fileappend