老师好!
在下鲁钝,虽已看过视频及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?
三、如果问题一成立,假如由 “5 平空仓”触发 OnOrder,当 OnOrder 和 OnTimer 都执行完后,进程在哪开始执行?是 “6 开多仓”还是从头开始,亦或其它?
四、假如在 OnOrder OnTimer 中撤单重发,是不是依然触发 OnOrder 而不会回到原进程中?
非常感谢!
1不是 onorder的驱动条件是有委托单发生状态变化,这个状态变化可以是创建,成交,撤单,废除等等
2不是 就算计数器的值读到了,如果现在正在运行另一个事件域,也要等当前事件域运行完才会执行ontimer
3根据下一次发生什么事件执行什么事件域
4这个问题不知道怎么回答,为什么会回到原进程?什么叫原进程?事件域的概念就是不同的事件发生,就运行对应事件域里面的代码,并不是说一次执行会把所有事件域里的代码执行一遍。比如如果当前收到了新行情数据,最新bar数据发生了变化,那么就驱动onbar事件域里的代码运行,onorder,ontimer里的代码不会运行。如果onbar里的代码执行结构导致了发单,那么onbar运行结束后会立即执行onorder接受这次创建订单的数据并运行onorder域内的代码,onbar和ontimer不会运行。如果ontimer的计数时间到点,那么直接执行ontimer域内的代码,onbar和onorder域内的代码不执行。
如果这样还没搞懂,可以看看视频区,搜索事件域,相关视频学一下,看看实际案例的解说。
再不明白那就没办法了。