全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
关于rerun和restart运行机制的问题
xnzc01 分享到
2022-01-06 17:34

关于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后面的语句也会执行?

riv

1.这边输出"bar"一共是10条,因为print函数是没有按输出顺序显示,具体是因为运行了两次 一个输出10条

2.rerun和restart都会先将当前的bar执行完毕 然后从新运行不是只会执行最后一个bar 具体区别看一下相关的帮助文档

2022-01-06 18:02
xnzc01
@riv

为什么print不按照输出顺序输出呢?而且换成restart后print出来的“bar”只有5个,这又是什么原因呢?

2022-01-07 11:33
riv
@xnzc01

因为条件控制的原因 rerun时运行一边 重新加载再运行 restar时 运行一一遍然后时一直重新加载再运行 看看帮助文档中rerun和restart restart重置了全局变量

2022-01-07 12:36
xnzc01
@riv

还是不懂,为什么rerun重新运行后print不按照输出顺序输出呢?

2022-01-07 14:11
riv
@xnzc01

这个是因为Print实现问题,要是想要有序用fileappend

2022-01-07 14:26
您未登录,请先 登录注册 后发表评论
顶部