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练练手,提升一下开发水平
太感谢了,辛苦老师解答