Samples.Roll.MyStrategy.OnBar C# (CSharp) Method

OnBar() protected method

protected OnBar ( Instrument instrument, Bar bar ) : void
instrument Instrument
bar FastQuant.Bar
return void
        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);
                    }
                }
            }
        }