执行模式
来自tradeStar帮助系统
星语言中,公式有两种执行模式,一种叫逐行模式,一种叫逐根模式。关于这两种模式的运行机制,请看: 逐行和逐根
那么,语言里,是怎样选择运行模式的呢?是通过编译开关来控制的:
#Run_By_Bar #Run_By_Series
其中,#Run_By_Bar表示适用逐根模式,#Run_By_Series表示适用逐行模式。 这两个开关也可以不写,在不同的指标类型中,分别有不同的默认值。 在“技术指标”、“条件选股”、“交易系统”、“五彩K线”这四种指标中,默认是逐行模式。 在“智能策略”、“公共函数”、“优化评价”这三种指标中,默认是逐根模式(而且只能是逐根,指定逐行开关无效)。
#Run_Every_Tick #Run_Every_Bar
OnStart => 每次行情到来都会触发(除非是 #Run_Every_Bar + #Run_By_Bar 逐根且每根只运行一次的模式)。不在函数体里面的代码都等于 OnStart 函数,除非显式声明了 OnStart 函数。
OnInit => 每次重算时调用1次,后续行情到来不触发。重算在历史数据发生变化时触发,此时公式将清除所有状态重新运行。
OnExit => 每次 OnStart 执行后都会接着执行 OnExit, 与 OnStart 的区别是当OnStart被终止时,OnExit 仍然会保证运行,这样可以确保Dll能正确释放资源,解锁等。
若品种,周期发生变化时,公式将会触发重算, DLL需要自己判断变换发生。可以把BarPos传给DLL, 如果BarPos变成1了,那就是发生重算了;