测试对数据源发单,发现老重复

各位老师好,周末测试了下A函数,发现以下代码会重复发单一次,不知道什么原因

数据源中合约46个,他分了两批委托,重复了一次,不知是什么原因,确实委托了46个,望各位老师指点,非常感谢!

Params
    //此处添加参数
   
Vars
    //此处添加变量
    Numeric avg;
    Global Integer timerId;
  Global Numeric a;
  Global Numeric b;

Events
OnInit()
{
    
    b=0;
}

    OnBar(ArrayRef<Integer> indexs)
    {
        Range[0:DataSourceSize()-1]
        {
         if(BarStatus==2)
        {
        
            if( b <DataSourceSize())
        
            {

                Array<Integer> orders;
                A_SendOrderEx(Symbol, Enum_Buy, Enum_Entry,1, 20, orders, "", A_GetOrderCreateSource);
              //  A_SendOrder(Enum_Buy, Enum_Entry, 1, 20);
                b = b+1;
                
                //   buy(1,Close);
            }
        }  
        }
    }


    //定时器更新事件函数,参数id表示定时器的编号,millsecs表示定时间的间隔毫秒值
  

   

    

//------------------------------------------------------------------------
// 编译版本    2026/6/14 202552
// 版权所有    pwhjy135246
// 更改声明    TradeBlazer Software保留对TradeBlazer平台
//            每一版本的TradeBlazer策略修改和重写的权利
//------------------------------------------------------------------------


如何解决重复发单问题
多数据源发单问题
A_sendorder重复发单的问题
限制了开仓手数,但快速波动时会重复发单
发现一个关于多周期策略发单问题,请老师给指导一下
关于数据源和发单对齐的问题
a函数发单
策略交易时,a_sendorder发单,不会出现在策略报告里,对吧 ?
测试时发现此问题,“ 达到账户每秒报撤流控制权限上限,
多数据源onbaropen问题

又研究了会,可能是在onbar机制下运行的结果,但在其他事件下委托都没有了


//

//目前集合竞价委托ontimer实现

Params
    //此处添加参数
   
Vars
    //此处添加变量
    Numeric avg;
    Global Integer timerId;
    Global Numeric a;
    Global Numeric b;
    Global Integer i;
    Global String str1;
    Global Numeric t_id;
    Global Numeric t_time1;
    String sym;
    Global Array<Integer> Order_id;
Events

OnInit()
{
    str1 = A_GetOrderCreateSource();
      b=0;
}




    OnBar(ArrayRef<Integer> indexs)
    {
        Range[i=0:DataSourceSize()-1]
        {
         if(BarStatus==2)
             //即使加了这个,也会不断发单,因为TICK是不断运行的
        {
        
            if( b <DataSourceSize())
        
            {

                //sym = Data[i].Symbol;
                Array<Integer> orders;
                Data[i].A_SendOrderEx(Data[i].Symbol, Enum_Buy, Enum_Entry,1, 20, order_id);
                //for i= 0 to GetArraySize(order_id)-1  order_id
                integer a = order_id[0];
                print("a="+text(a));
                //Order_id订单编号很重要
              //  A_SendOrderEx(Symbol, Enum_Buy, Enum_Entry,1, 20, orders, "", A_GetOrderCreateSource);
              //  A_SendOrder(Enum_Buy, Enum_Entry, 1, 20);
                b = b+1;
                
                //   buy(1,Close);
            }
        }  
        }
    }

    //定时器更新事件函数,参数id表示定时器的编号,millsecs表示定时间的间隔毫秒值
   // 目前发现下面是无法委托的
/*    OnTimer(Integer id,Integer intervalMillsecs)
    {
        Range[I=0:DataSourceSize()-1]
        {
        
        
            if( b <DataSourceSize())
        
            {

                Array<Integer> orders;
                data[i].A_SendOrderEx(Data[i].Symbol, Enum_Buy, Enum_Entry,1, 20, orders);
              //  A_SendOrder(Enum_Buy, Enum_Entry, 1, 20);
                b = b+1;
                
                //   buy(1,Close);
            }
        
        }
    }*/
    
    
    
//这个里也无法委托
   /* OnOrder(OrderRef ord)
    {
        Range[i=0:DataSourceSize()-1]
        {
        
        
            if( b <DataSourceSize())
        
            {

                Array<Integer> orders;
                data[i].A_SendOrderEx(Data[i].Symbol, Enum_Buy, Enum_Entry,1, 20, orders);
              //  A_SendOrder(Enum_Buy, Enum_Entry, 1, 20);
                b = b+1;
                
                //   buy(1,Close);
            }
        
        }
    }*/

    

//------------------------------------------------------------------------
// 编译版本    2026/6/14 202552
// 版权所有    pwhjy135246
// 更改声明    TradeBlazer Software保留对TradeBlazer平台
//            每一版本的TradeBlazer策略修改和重写的权利
//------------------------------------------------------------------------