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

想在下午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);

              }        

           }

}

怎么样在收盘前对未成交的平仓委托单进行撤单
收市前对未成交订单进行撤单
A函数如何只撤销买入开仓未成交委托单?
只对未成交的平仓单进行撤单
如何拿到未成交委托单的序列号
如何标识“撤单失败,已成交”这种委托单?
sell和buytocover实盘时会如何处理未成交的委托单?
图表交易系统,未成交撤单之后,在没有持仓情况下仍然发出平仓委托哦
部分成交时,如何获取未成交的委托量?
怎么样只对最早的那一笔未成交开仓单进行撤单?

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里。

请问是哪里不对呢?