我用这个代码记录的三个时间驱动域的运行次序,显示策略运行前或者账户登录时分别先运行一次OnPosition,在发出订单时,运行次序依次时OnPosition, OnOrder,OnFill,OnFill之后没有OnPosition的更新过程,这样对吗?
OnPosition(PositionRef pos)
{
LogFile("##########################");
run_id=run_id+1;
LogFile("OnPosition:run_id="+text(run_id)+"; "+text(pos.flag)+"; "+pos.symbol);
LogFile("OnPosition:持空仓数量="+Text(pos.shortCurrentVolume)+"; 持多仓数量="+Text(pos.longCurrentVolume));
LogFile("***************************");
}
//策略账户仓更新事件函数,参数pos表示更新的账户仓结构体
OnStrategyPosition(PositionRef pos)
{
}
//委托更新事件函数,参数ord表示更新的委托结构体
OnOrder(OrderRef ord)
{
LogFile("##########################");
run_id=run_id+1;
LogFile("OnOrder:run_id="+text(run_id)+"; status: "+text(ord.status)+"; "+ord.symbol);
LogFile("OnOrder:成交数量: "+text(ord.fillVolume)+"委托数量: "+text(ord.volume));
LogFile("***************************");
If(ord.status==Enum_Filled){
If(ord.combOffset==Enum_Entry)
{
If(ord.side==Enum_Buy)
{If(ord.symbol == Symbol)
{LogFile("1111111111");
}}
Else {If(ord.symbol == symbol)
{LogFile("2222222222");
}}
// LogFile("onOrder:sCount="+Text(sCount)+";bCount="+Text(bCount)+";kcB="+Text(kcB)+";kcS="+Text(kcS)+"; "+TimeToString(CurrentTime));
}
Else {
If(ord.side==Enum_Buy)
{If(ord.symbol == symbol)
{
LogFile("3333333333333");
}}
Else {If(ord.symbol == symbol)
{
LogFile("444444444444444444");
}}
}
/*If(ord.orderId==ord_send_Id["平今仓"]) {sendtoday_Pflag=0;bCount=0;sCount=0; } //委托单是否全部成交
Else If(ord.orderId==ord_send_Id["非主力"] ) {fzl_flag=0; fzl_d=0;fzl_k=0;}
Else If(ord.orderId==ord_send_Id["开今仓"] ) {sendtoday_flag=0; }
*/
}
}
//成交更新事件函数,参数ordFill表示更新的成交结构体
OnFill(FillRef ordFill)
{
LogFile("##########################");
run_id=run_id+1;
LogFile("OnFill:run_id="+text(run_id)+";side: "+text(ordFill.side)+"; "+ordFill.symbol);
LogFile("OnFill:成交数量: "+text(ordFill.fillVolume)+"; "+ordFill.symbol);
LogFile("*************************");
}
除了onbar onbaropen onbarclose,其他事件域好像是按照上下顺序执行