//------------------------------------------------------------------------
Params
Numeric Length(60); //均线周期
Numeric lots(1); //开仓手数
Vars
Series<Numeric> AvgValue;
Series<Bool> jincha;
Series<Bool> sicha;
global array<signal> signals_book;
Events
//此处实现事件函数
//初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作
OnInit()
{
//与数据源有关
Range[0:DataCount-1]
{
//=========数据源相关设置==============
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓
AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算
Array<String> symbols;
//获取数据源委托映射合约
Bool ret = GetLayerOrderMapSymbols(symbols);
Print("GetLayerOrderMapSymbols:" + IIFString(ret, "True", "False") + "," + TextArray(symbols));
//委托映射到主力
ret = SetOrderMap2MainSymbol();
Print("SetOrderMap2MainSymbol:" + IIFString(ret, "True", "False"));
ArrayClear(symbols);
//获取数据源委托映射合约
ret = GetLayerOrderMapSymbols(symbols);
Print("GetLayerOrderMapSymbols:" + IIFString(ret, "True", "False") + "," + TextArray(symbols));
}
}
OnReady()
{
PrintClear;
}
OnBar(ArrayRef<Integer> indexs)
{
AvgValue = AverageFC(Close,Length);
If(Close > AvgValue)
{
PlotAuto("均线",AvgValue,AvgValue,Red,Enum_Line,Enum_Solid);
}Else
{
PlotAuto("均线",AvgValue,AvgValue,Green,Enum_Line,Enum_Solid);
}
jincha = CrossOver(Low,AvgValue);
sicha = CrossUnder(High,AvgValue);
//开平仓交易
If(MarketPosition <> 1 && jincha[1])
{
Buy(lots,Open);
}
If(MarketPosition <> -1 && sicha[1])
{
SellShort(lots,Open);
}
}
OnSignal(ArrayRef<Signal> sigs)
{
Print("OnSignal:" + TextArray(sigs));
Integer i = 0;
For i = 0 To GetArraySize(sigs) - 1
{
SignalRef sig = sigs[i];
If(sigs[i].comboffset == Enum_Entry)
{
//检查一下有没有未成交委托单
If(A_GetOpenOrderCount()==0)
{
Array<Integer> orderids;
A_SendOrderEx(data[sigs[i].index].symbol,sigs[i].side,sigs[i].comboffset,sigs[i].volume,sigs[i].price,orderids);
print("---onsignal没有未成交单---");
print("bartime:"+TimeTostring(time));
print("currenttime:"+TimeToString(currenttime));
}Else
{
//把信号做一个记录,等到后面成交以后再发单
arraypushback(signals_book,sigs[i]);
print("---onsignal有成交单---");
print("大小:"+text(GetArraySize(signals_book)));
}
}Else
{
Array<Integer> orderids;
A_SendorderEx(data[sigs[i].index].symbol,sigs[i].side,sigs[i].comboffset,sigs[i].volume,sigs[i].price,orderids);
print("---onsignal正常平仓---");
print("bartime:+TimeToString(time)");
}
}
}
OnFill(FillRef ordFill)
{
If(A_GetOpenOrderCount()<>0)
{
return;
}Else
{
signals_book;
Numeric i;
for i =0 to GetArraySize(signals_book) - 1
{
array<Integer> orderids;
A_SendorderEx(data[signals_book[i].index].symbol,signals_book[i].side,signals_book[i].comboffset,signals_book[i].volume,signals_book[i].price,orderids);
print("---onfi11开仓---");
print("bartime:"+TimeToString(time));
print("currenttime:"+TimeToString(currenttime));
}
ArrayClear(signals_book);
print("--删除数组--");
print("大小:"+text(GetArraySize(signals_book)));
}
}
//------------------------------------------------------------------------
// 编译版本 2024/12/20 141420
// 版权所有 wt9821506389
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
看看右边废除的原因是什么?
可平仓仓位不足,策略启动那一瞬间是没有信号的,突然就出现了一堆平仓信号
手机上粗看了下你的代码,BUYSELL图表信号,通过信号代理A函数发单,之前正常用过吗? 我觉得A函数下单部分应该有问题