Params
Numeric ziying(3);//止盈点位
Numeric zisun(1);//止损点位
Vars
Numeric Offset(1.25); // 布林通道参数
Series<Numeric> MidLine(0); // 布林通道中轨
Series<Numeric> JC(0); // JC
Numeric Band(0);
Series<Numeric> upBand(0); // 布林通道上轨
Series<Numeric> dnBand(0); // 布林通道下轨
Bool dk;
bool dp;
Global Numeric num(0);
Events
OnInit()
{
SubscribeBar("hc888.SHFE", "1m", 20221123);
SubscribeBar("rb888.SHFE", "1m", 20221123);
}
OnBar(ArrayRef<Integer> indexs)
{
JC = (data0.close[1]-data1.close[1]);
Commentary(" data0.close[1]:"+Text(data0.close[1]) +" data1.close[1]:" +Text(data1.close[1])+ " Jc:"+Text(jc));
// 布林通道中轨
MidLine = Average(jc,50);
Band = StandardDev(jc,50,2);
// 布林通道上轨
upBand = MidLine + Offset*Band;
dnBand = MidLine - Offset*Band;
// 画线
PlotNumeric("MidLine",MidLine*45);
PlotNumeric("upBand",upBand*45);
PlotNumeric("dnBand",dnBand*45);
PlotNumeric("JC",JC*45);
DK = CrossOver(jc,midline) or JC>JC[1];
If(dk ==true)
{
If(data0.MarketPosition<>1 )
{
data0.buy(1,data0.Open);
data1.Sellshort(1,data1.Open);
}
}
num = BarsSinceLastEntry;
DP = jc-jc[num]>=ziying Or Jc[num] -JC>zisun;
Commentary("dk:"+Text(IIF(dk==true,1,0))+" DP:"+Text(iif(dp==true,1,0))+" Num:"+Text(num)+" 平仓盈亏:"+Text(jc-jc[num]));
If(dP ==true )
{
data0.Sell(0,data0.Open);
data1.BuyToCover(0,data1.Open);
}
}
数据叠加的情况下,由于两个品种新bar第一tick到来时间可能不一致 所以你就算用[1],也有可能造成闪烁
你可以用bar时间来判断一下,如果驱动两个图层的time不一致,就不进行关键指标的计算,比如jc
哦哦,这是关键。我试试,非常感谢!!
先确定是开仓闪还是平仓闪 然后再检查他们的条件
如果从逻辑上来看,我用的Close[1],是上一根的数据,开仓和平仓都不应该闪。
请教王老师,怎么确定是开仓闪,还是平仓闪?谢谢!!!