Array<Integer> orderIds;
Global Bool ret(False);
If(A_GetOpenOrderCount(0) > 0)
{
ret = A_GetUnFillOrderIDs(orderIds, "", 0);
Integer k;
For k = 0 To GetArraySize(orderIds) - 1
{
ret = A_DeleteOrderEx(orderIds[k]);
Print("A_Delete撤单成功:" + IIFString(ret, "True", "False"));
PlotBool("撤单成功", ret, High);
}
}
Vars
Global Bool ret(False);
Array<Integer> orderIds;
Events
OnInit()
{
A_SubscribeTradeByCreateId(Enum_Trade_Source_Manual);
}
OnOrder(OrderRef ord)
{
If(ord.status==Enum_Declared)
{
CreateTimer(1000,datetimeadd(currentdate+CurrentTime,10));
print(TimeToString(currenttime));
print("启动撤单监控");
}
}
OnTimer(Integer id,Integer millsecs)
{
{print("启动timer");
//撤账户的所有未成交单
If(A_GetOpenOrderCount(0) > 0)
{
//获取未完成的报单数组
ret = A_GetUnFillOrderIDs(orderIds, "", 0);
Integer k;
For k = 0 To GetArraySize(orderIds) - 1
{
ret = A_DeleteOrderEx(orderIds[k]);
print(timetostring(CurrentTime));
Print("A_Delete撤单成功:" + IIFString(ret, "True", "False"));
PlotBool("撤单成功", ret, High);
}
}
}
StopTimer(id);
}
这是测试用的代码
你给的代码无法通过编译 也没有具体的测试场景
我补全了代码和测试场景 测出来是没有问题的
如果你还解决不了问题,请补全完整的测试代码和测试场景,我再复现看看
目前来看,应该是你的代码和测试环境的问题,请再仔细检查一下
新开策略,没有其他多余的代码,完完整整用了上面您的测试代码,还是不行,依旧撤单成功却返回false
这是期货公司要求的流控,不允许频繁撤单。
手动发一个单,过了十来秒或者一分钟以上,才启动自动交易,也是撤单成功却返回false
消息中心记录呢?建议你print把currenttime也输出一下,然后找消息中心的记录,根据时间进行比对,截图发上来
测试代码是你上面发的吗?我试一下
是的
应该是权限控制问题
你的消息中心应该有这个报错
这个意思就是,一个委托单,发出去5秒内不允许撤单
是的,有这个报错,但是报错之后,撤单成功了,为什么还是返回false的呢?
返回false是因为之前却是出现撤单失败了啊
后来又撤单成功和之前的撤单失败又没关系,又不会抹掉之前的撤单失败记录
非完整代码
Vars
Global Bool ret(False);
Array<Integer> orderIds;
OnBar(ArrayRef<Integer> indexs)
{
if(BarStatus == 2)
{
//撤账户的所有未成交单
If(A_GetOpenOrderCount(0) > 0)
{
//获取未完成的报单数组
ret = A_GetUnFillOrderIDs(orderIds, "", 0);
Integer k;
For k = 0 To GetArraySize(orderIds) - 1
{
ret = A_DeleteOrderEx(orderIds[k]);
Print("A_Delete撤单成功:" + IIFString(ret, "True", "False"));
PlotBool("撤单成功", ret, High);
}
}
}