Piv=(highd(1)+lowd(1)+closed(1))/3;
zl1=2*piv-LowD(1);
zl2=piv+HighD(1)-LowD(1);
zc1=2*piv-HighD(1);
zc2=piv-HighD(1)*LowD(1);
BBTop=Average(close,length)+stddev*StandardDev(close,length,2);
BBBot=Average(close,length)-stddev*StandardDev(close,length,2);
PlotNumeric("zl1",zl1);
PlotNumeric("zc1",zc1);
PlotNumeric("BBTop",BBTop);
PlotNumeric("BBBot",BBBot);
//交易开仓主体
if (close(1)<(zl1+P) And close(1)>(zc1-P))
{
if (CrossOver(close(1),BBBot))
{Buy(1,open) and Commentary("BOLL多");}
if (CrossUnder(close(1),BBTop))
{Sell(1,open)and Commentary("BOLL空");}
}
if (CrossOver(close(1),zl1+p))
{Buy(1,open) and Commentary("突破多");}
if (Crossunder(close(1),zc1-p))
{Sellshort(1,open) and Commentary("突破空");}
If(MarketPosition == 1 And BarsSinceEntry >= 1)
{
if (Crossunder(close(1),zl1-p))
{Sell(1,open) and Commentary("多平1");}
}
If(MarketPosition == -1 And BarsSinceEntry >= 1)
{
if (CrossOver(close(1),zc1+p))
{BuyToCover(1,open) and Commentary("空平1");}
}
//平仓主体
If(BarsSinceentry == 0)
{
HighestAfterEntry = Close;
LowestAfterEntry = Close;
If(MarketPosition <> 0)
{
HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice); // 开仓的Bar,将开仓价和当时的收盘价的较大值保留到HighestAfterEntry
LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice); // 开仓的Bar,将开仓价和当时的收盘价的较小值保留到LowestAfterEntry
}
}else
{
HighestAfterEntry = Max(HighestAfterEntry,High); // 记录下当前Bar的最高点,用于下一个Bar的跟踪止损判断
LowestAfterEntry = Min(LowestAfterEntry,Low); // 记录下当前Bar的最低点,用于下一个Bar的跟踪止损判断
}
If (MarketPosition == 1 And BarsSinceEntry >= 1)
{
if (Close(1)<(HighestAfterEntry-AvgTrueRange(N)*atrmult))
{Sell(1,open) and Commentary("ATR多平");}
}
If (MarketPosition == -1 And BarsSinceEntry >= 1)
{
if (Close(1)>(LowestAfterEntry+AvgTrueRange(N)*atrmult))
{BuyToCover(1,open) and Commentary("ATR空平") ;}
}