OnOrder不执行
//------------------------------------------------------------------------ // 简称: zs33_1 // 名称: 小改 // 类别: 公式应用 // 类型: 用户应用 // 测试目的:最多持仓1手;开空最多追单3次,平空不限次数直至成交。防止多次的无谓发单 //------------------------------------------------------------------------ Params Numeric Lots(1);// 交易手数 Vars Series<Numeric> BAR0(0); // BAR索引 Series<Numeric> BarSell(0); // 开仓BAR Series<Numeric> BarE(0); // 平仓BAR Series<Numeric> TickSell(0); // 开仓Tick Series<Numeric> TickExit(0); // 平仓Tick Series<Numeric> StopPrice; //订单变量 Global Array<Integer> Sid;//开仓单号 Global Array<Integer> Eid;//平仓单号 Global Numeric SellJs(0); // 发出开空单计数 Global Numeric ExitJs(0); // 发出平空单计数 Global Numeric HaveS(0); //空单持仓(Position是系统关键字) //Global Numeric CancelS(0);//撤回开空单计数 //Global Numeric CancelE(0);//撤回平仓单计数 Global Numeric MinDiff;////最小变动价/一跳价 //Global Numeric PPP;//基准价 Global Numeric Tick0;//Tick索引 Global Numeric OrderStatuS;//开空单状态 Global Numeric OrderStatuE;//平空单状态 Events OnInit()//策略执行前的初始化事件,只运行一次。/可以订阅数据,数据准备等操作。 { SubscribeTick(Symbol);//订阅TICK行情 HaveS=0; SellJs=0; ExitJs=0; OrderStatuS=5; OrderStatuE=5; } OnReady() { MinDiff=PriceScale*MinMove;//最小变动价/一跳价 } OnOrder(OrderRef Ord)//委托更新事件 { IF (Ord.status==Enum_Filled AND Ord.ORDERID==Sid[0])//开空单已成交 { SellJs=0; // 发出开空单计数 HaveS=1;//持有空单数 OrderStatuS=5;//开空订单状态 Print("开空单已成交,Tick0("+TEXT(Tick0)+")"); } IF (Ord.status==Enum_Declared AND Ord.ORDERID==Sid[0])//开空单已申报(未成交) { OrderStatuS=2; Print("开空单未成交,Tick0("+TEXT(Tick0)+")"); } IF (Ord.status==Enum_Canceled AND Ord.ORDERID==Sid[0])//开空单(已撤单) { OrderStatuS=6; Print("开空单已撤回,Tick0("+TEXT(Tick0)+")"); } //OrderStatuE IF (Ord.status==Enum_Filled AND Ord.ORDERID==Eid[0])//平空单已成交 { ExitJs=0;//发出平空单次数 HaveS=0;//持有空单数 OrderStatuE=5;//平空单状态 Print("平空单已成交,Tick0("+TEXT(Tick0)+")"); } IF (Ord.status==Enum_Declared AND Ord.ORDERID==Eid[0])//平仓单已申报(未成交) { OrderStatuE=2; Print("平空单未成交,Tick0("+TEXT(Tick0)+")"); } IF (Ord.status==Enum_Canceled AND Ord.ORDERID==Eid[0])//平仓单(已撤单) { OrderStatuE=6; Print("平空单已撤回,Tick0("+TEXT(Tick0)+")"); } }//OnOrder OnBarOpen(ArrayRef<Integer> indexs) { Tick0=0; } OnBar(ArrayRef<Integer> indexs) { IF (BarStatus==2) { //开空条件:持有空单数为0(隐含:平空已成)& 开空已成或已撤 &追单不超过3次&准入控制 If(HaveS==0 AND (OrderStatuS==5 OR OrderStatuS==6) AND SellJs<4 And OPEN<=C[1]) { IF (A_SendOrderEx(Enum_Sell,Enum_Entry,Lots,Q_Last+MinDiff*SellJs,Sid ));//开空(市价+点) { BarSell=Bar0; TickSell=Tick0; StopPrice=H[1]; SellJs=SellJs+1; Print("开空单编号="+TEXT(Sid[0])+"/BarSell="+TEXT(BarSell)+"/TickSell="+TEXT(TickSell)); Print("开空单次数="+TEXT(SellJs)); } } IF (OrderStatuS==2 AND (BAR0-BarSell)*120+Tick0-TickSell>10)//撤回开空单 { A_DeleteOrder(Sid[0]); Print("撤回开空单,Tick0("+TEXT(Tick0)+")"); } // 平空条件:持有空单数为1(隐含:开空已成)& 平空已成或已撤 &准入控制 If(HaveS==1 AND (OrderStatuE==5 || OrderStatuE==6) And BAR0>BarSell And H>=StopPrice) { IF (A_SendOrderEx(Enum_BUY,Enum_Exit,Lots,Q_Last-MinDiff*ExitJs,Eid)) { //HaveS=0; BarE=Bar0; TickExit=Tick0; ExitJs=ExitJs+1; Print("平空单编号="+TEXT(Eid[0])+"/BarE="+TEXT(BarE)+"/TickExit="+TEXT(TickExit)+"HaveS="+TEXT(HaveS)); Print("平空单次数="+TEXT(ExitJs)); } } IF (OrderStatuE==2 And (BAR0-BarE)*120+Tick0-TickExit>10)//撤回平空单 { A_DeleteOrder(Eid[0]); Print("撤回平空单,Tick0("+TEXT(Tick0)+")"); } Tick0=Tick0+1; Print("Tick索引="+TEXT(Tick0)+"持空仓量="+TEXT(HaveS)); }// IF (BarSelltatus==2) } 以上是一个测试程序, 测试目的:最多持仓1手;开空最多追单3次,平空不限次数直至成交。防止多次的无谓发单感觉ONORDER域没有执行,以下是我刚实盘运行的情况:ONORDER的PRINT内容无输出请老师帮我看下,难道是我的逻辑本身有问题?不胜感激!!!