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内容无输出

请老师帮我看下,难道是我的逻辑本身有问题?不胜感激!!!

收盘平仓不执行
交易不执行
Sell不执行?
请教!!!A_DeleteOrderEx函数不执行
A_SendOrderV2发委托能成交,但是OnOrder事件没有执行过,求助
收盘平仓不执行
onfill onorder无效 onposition有效是什么情况
tick图策略不执行
收盘平仓不执行
为什么出场信号不执行

你要证明onorder没有触发

onorder
{
 print("你好");
}

而不是先扔一堆东西进去

我感觉你逻辑是混乱的。

你的所有print,都是写在onorder域的if分支结构下,换句话说,如果要print显示内容,不仅要驱动onorder域,还得满足你至少一个分支条件,才有print输出。

你因为这个就断定是onorder域没有执行吗?是不是起码在onorder的主结构中写一个print看看到底是onorder没有执行还是没进if分支结构?

好的,我加一行测试onorder,麻烦看下我的逻辑问题(自我感觉很简单的逻辑,就是不知道哪里问题),不胜感激!!!

我加一行测试onorder,重新运行。

有成交单,但仍不显示测试行,感觉还是没有进onorder

你的脸为什么是黄的

要绿的才是进入了交易的

运行之后暂停策略,之后截图的

运行之后暂停策略,之后截图的

ONBAR域有输出成交时间的

ONBAR域有输出成交时间的

我试了 order域没有问题的

你把你if里的条件挨个打印一下bool看看

我试了两个 都是false

哦 我没开交易,开了就可以了,Onorder输出没有问题的,是你其他逻辑的问题

很棒,我还没来得及测试