A函数撤单问题

Params //此处添加参数 Numeric length1(5); Vars Global Numeric CD(0); Global Map<Integer,Order> my_order; Series<Numeric> ma5; Events OnOrder(OrderRef ord) { my_order[ord.orderid]=ord; If(ord.status == Enum_Declared) { If(CD==1 Or CD==-1) A_DeleteOrderEx(ord.orderid); } } OnBar(ArrayRef<Integer> indexs) { MA5=Average(Close[1],Length1); If (MarketPosition>0 And Close[1]<MA5 ) { CD=1; } If( MarketPosition<0 And Close[1]>MA5 ) { CD=-1; } } 老师,我这样用一个全局变量放到A函数里好像不行,那请问我要写收盘价破5均线就把所有单撤掉,应该怎么写?给我提供个思路也行,谢谢。 这个代码,不知道为什么,一发单立马就被撤了

你这个思路不对 收盘价破5均线的时候,委托单状态又没有发生改变,那就不会驱动onorder域运行,你写在onorder域里的代码就不会执行 先想好你的业务逻辑是什么东西驱动的,这个很关键,每次直播课讲解开发案例的时候我都会强调,这个是最基础的。 你的撤单逻辑是收盘价跌破5均线,这个明显和行情有关,和订单状态无关,所以应该写在行情驱动的事件域里。那么行情驱动三个事件域,onbar,onbaropen,onbarclose,只有onbar,符合你收盘价实时监控的要求,所以肯定是要再onbar里写撤单代码。 接下来处理撤单的业务逻辑,使用a_deleteorder,根据函数说明,需要订单编号。这就要求你在发单的时候就必须记住这个订单的编号。如果你是sendorderex报单,那么执行的时候就会要求记录一个订单号。如果你是用buysell命令,那么就需要在每次出信号的时候去onorder域里等这个信号的报单然后再记录编号,而且注意这个报单不要和其他信号搞混。 总的来说思路就是这样,如果还觉得难以下手,建议再多看几个系统的demo练练手,提升一下开发水平

回复:太感谢了,辛苦老师解答