想在下午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里。
请问是哪里不对呢?