收盘前对未成交委托单进行撤单重报

想在下午14:55至14:59之间,对未成交的平仓单进行撤单并重新按最新价报单,写成以下这样,但不执行(print那句不执行,说明根本没有进到FOR循环体),请问代码哪里出问题?应该如何修改能够达到目的?感谢!!if(time>=0.1455 and time<0.1459) { Integer j=0; For j = 0 To A_GetOpenOrderCount - 1 { Integer value = A_OpenOrderContractNo(j); Print("A_OpenOrderContractNo:" + Text(value)); if(A_OrderStatus(value)==Enum_Declared and (A_OpenOrderEntryOrExit(value)==Enum_Exit or A_OpenOrderEntryOrExit(value)==Enum_ExitToday) ) { A_DeleteOrderEx(value); } if (A_OrderStatus(value)==Enum_canceled) { A_SendOrder(Enum_Sell, Enum_Exit, 0, open); } } }

time>=0.1455 and time<0.1459涉及到你的数据源切片如果是日线 则没有任何时间段符合如果是 分钟周期 需要看是以开始时间算 还是结束时间算如果你是要实盘时候用currentTime 也就是你的电脑实时时间

回复:1分钟BAR,TIME这里是没有问题的。

回复:我看你代码也是实盘状态那就用current time试试也可以读取未成交报单列表循环更直接

回复:是不是多图层你以为是1分钟数据源其实是默认的另外一个源先解决这个问题然后在1分钟数据源的onbaropen域搞一下就行否则你就用currenttime肯定就没问题但需要自己控制撤单、重发的节奏

回复:而且你这个撤单后立即发单也是有问题的应该是等待回报撤单完成

、简单测了下 ,4个挂单 返回4

回复://------------------------------------------------------------------------ // 简称: test_0408_2025 // 名称: // 类别: 指标应用 // 类型: 用户应用 // 输出: Void //------------------------------------------------------------------------ Params //此处添加参数 Vars //此处添加变量 Defs //此处添加策略函数 Events //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次 OnInit() { A_BindTradeAccount("66105120"); } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { print("A_GetOpenOrderCount="+text(A_GetOpenOrderCount )); } //------------------------------------------------------------------------ // 编译版本 2025/4/8 112815 // 版权所有 wangkaiming // 更改声明 TradeBlazer Software保留对TradeBlazer平台 // 每一版本的TradeBlazer策略修改和重写的权利 //------------------------------------------------------------------------

回复:老师您好,谢谢,也就是说你测的是可以取到内容的,我上面的写法是没问题的,是我测试的时候哪里没有弄对是吗?

回复:OnInit() { A_BindTradeAccount("66105120"); }我没有在OnInit()加这一句,只是策略单元格里加载了模拟帐户,是不是这里的问题呢?

回复:这句是自己绑账户,你通过头寸管理器绑账户是一样的

回复:头寸管理器是绑定了帐户的,就是读不到内容,我再检查一下看是哪里的问题

使用A函数须知:1.策略单元绑定账户2.实时3.交易中才能生效

回复:A_GetOpenOrderCount 建议你先看你取到内容了吗

回复:加载了模拟帐户,是实时交易中观察,但不生效。A_GetOpenOrderCount确定没取到内容,但不知道为什么取不到内容,For j = 0 To A_GetOpenOrderCount - 1 { Integer value = A_OpenOrderContractNo(j); Print("A_OpenOrderContractNo:" + Text(value));---这样写不对吗?我是参考帮助文件写的,帮助文件是以下的写法:Events OnReady() { Integer i; For i = 0 To A_AccountCount - 1 { Range[0:DataCount - 1] { Integer j; For j = 0 To A_GetOrderCount(i) - 1 { Print("OrderIndex:" + Text(j)); Integer value = A_OrderEntryOrExit(j, i); Print("A_OrderEntryOrExit:" + Text(value)); } } } } 不过我省略了For i = 0 To A_AccountCount - 1这一句,因为就绑定了一个帐户而已。另外我是放在ONBAR里。请问是哪里不对呢?