请教!! 关于 OnOrder 和 OnTimer

老师好! 在下鲁钝,虽已看过视频及PDF教程,但还有些疑惑,烦请老师不吝赐教为感! 例如: OnBar(ArrayRef<Integer> indexs) { 1 语句..... 2 语句..... 3 语句..... if(条件..... ) { 4 平多仓..... } if (条件.......) { 5 平空仓....... } if (条件.......) { 6 开多仓....... } if (条件.......) { 7 开空仓...... } 8 语句....... 9 语句....... 10 语句....... } OnOrder(OrderRef ord) { 接收状态发生变化的委托单 是否重发委托 } OnTimer(Integer id,Integer millsecs) { 同步数据 撤单 } 一、是不是只要有委托单就触发 OnOrder ? 二、OnTimer 是不是有最高优先级,也就是说,无论进程执行到哪,只要达到计数器的值就触发 OnTimer? 三、如果问题一成立,假如由 &ldquo;5 平空仓&rdquo;触发 OnOrder,当 OnOrder 和 OnTimer 都执行完后,进程在哪开始执行?是 &ldquo;6 开多仓&rdquo;还是从头开始,亦或其它? 四、假如在 OnOrder OnTimer 中撤单重发,是不是依然触发 OnOrder 而不会回到原进程中?

非常感谢!

1不是 onorder的驱动条件是有委托单发生状态变化,这个状态变化可以是创建,成交,撤单,废除等等 2不是 就算计数器的值读到了,如果现在正在运行另一个事件域,也要等当前事件域运行完才会执行ontimer 3根据下一次发生什么事件执行什么事件域 4这个问题不知道怎么回答,为什么会回到原进程?什么叫原进程?事件域的概念就是不同的事件发生,就运行对应事件域里面的代码,并不是说一次执行会把所有事件域里的代码执行一遍。比如如果当前收到了新行情数据,最新bar数据发生了变化,那么就驱动onbar事件域里的代码运行,onorder,ontimer里的代码不会运行。如果onbar里的代码执行结构导致了发单,那么onbar运行结束后会立即执行onorder接受这次创建订单的数据并运行onorder域内的代码,onbar和ontimer不会运行。如果ontimer的计数时间到点,那么直接执行ontimer域内的代码,onbar和onorder域内的代码不执行。 如果这样还没搞懂,可以看看视频区,搜索事件域,相关视频学一下,看看实际案例的解说。 再不明白那就没办法了。

回复:请问,如果进入了ontimer运行其中的程序,如果这个程序运行时间为5分钟,那么这5分钟内,onbar中的程序也不会运行吗

回复:是的