实验代码如下:
Params
//此处添加参数
Vars
//此处添加变量
Global Integer Ordered;
Global Integer OrderId;
Global String gMapSymbol;
Defs
//此处添加公式函数
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次
OnInit()
{
}
OnReady()
{
Array<String> Symbols;
GetLayerOrderMapSymbols(Symbols);
gMapSymbol = Symbols[0];
}
OnTimer(Integer id,Integer millsecs)
{
Bool Ret = A_DeleteOrder(OrderId);
FileAppend("C:\\debug.txt", Text(SystemDateTime) + gMapSymbol + " ====delet:OrderId:" + Text(OrderId)
+ ",Ret:" + IIFString(Ret, "True", "False"));
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
If(Ordered == 0)
{
Ordered = 1;
Array<Integer> OrderIds;
A_SendOrderEx(gMapSymbol, Enum_Buy, Enum_Entry, 2, 0, OrderIds);
OrderId = OrderIds[0];
FileAppend("C:\\debug.txt", Text(SystemDateTime) + gMapSymbol + " ==== OrderId:" + Text(OrderId));
CreateTimer(5000, 0, 1);
}
}
现象:映射主力合约,下单能成功,5S后撤单不成功(但是Ret的值照样为True)。如果直接加载在具体合约上,撤单成功。
问题:系统是不是要加一个函数对具体合约撤单,把gMapSymbol传进去。
确实换成A_DeleteOrderEx就可以了。
需要的,图表中用Buy(lots, theoryprc, Enum_Signal_NotSend);记录信号,实际发单用A函数。
既然有对具体合约的开单:A_SendOrderEx(gMapSymbol, Enum_Buy, Enum_Entry, KaiVol, OrderPrc, OrderIds);
应该就有对应的对具体合约的撤单:A_DeleteOrder(gMapSymbol,OrderId);
如果目前没有,可不可以提这样的需求?