实时撤单成功,却返回false

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); } } }