收盘前对未成交委托单进行撤单重报
想在下午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里。请问是哪里不对呢?