各位老师好,周末测试了下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策略修改和重写的权利
//------------------------------------------------------------------------又研究了会,可能是在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策略修改和重写的权利
//------------------------------------------------------------------------