protected override void OnBar(Instrument instrument, Bar bar)
{
// Add bar to bar series.
Bars.Add(bar);
// Add bar to group.
Log(bar, barsGroup);
// Calculate performance.
Portfolio.Performance.Update();
// Add equity to group.
Log(Portfolio.Value, equityGroup);
// Check strategy logic.
if (Bars.Count > 2)
{
if (!HasPosition(Instrument))
{
if (Bars[Bars.Count - 1].Close > Bars[Bars.Count - 2].Close &&
Bars[Bars.Count - 2].Close > Bars[Bars.Count - 3].Close)
{
Order enterOrder = BuyOrder(Instrument, Qty, "Enter Long");
Send(enterOrder);
}
else if (Bars[Bars.Count - 1].Close < Bars[Bars.Count - 2].Close &&
Bars[Bars.Count - 2].Close < Bars[Bars.Count - 3].Close)
{
Order enterOrder = SellOrder(Instrument, Qty, "Enter Short");
Send(enterOrder);
}
}
else
{
if (Position.Side == PositionSide.Short &&
Bars[Bars.Count - 1].Close > Bars[Bars.Count - 2].Close &&
Bars[Bars.Count - 2].Close > Bars[Bars.Count - 3].Close)
{
Order reverseOrder = BuyOrder(Instrument, Math.Abs(Position.Amount) + Qty, "Reverse to Long");
Send(reverseOrder);
}
else if (Position.Side == PositionSide.Long &&
Bars[Bars.Count - 1].Close < Bars[Bars.Count - 2].Close &&
Bars[Bars.Count - 2].Close < Bars[Bars.Count - 3].Close)
{
Order reverseOrder = SellOrder(Instrument, Math.Abs(Position.Amount) + Qty, "Reverse to Short");
Send(reverseOrder);
}
}
}
}