using QuantConnect.Algorithm.Framework.Alphas;

using QuantConnect.Algorithm.Framework.Portfolio;

using QuantConnect.Algorithm.Framework.Risk;

using QuantConnect.Algorithm.Framework.Selection;

using QuantConnect.Data.UniverseSelection;


 

namespace QuantConnect.Algorithm.CSharp

{

    public class MovingAverageCrossoverBot : QCAlgorithm

    {

        private const string Symbol = "AAPL"; // Replace with the desired symbol


 

        private readonly RollingWindow<TradeBar> _priceWindow = new RollingWindow<TradeBar>(20);


 

        public override void Initialize()

        {

            SetStartDate(2022, 1, 1);

            SetCash(100000);


 

            AddEquity(Symbol);

        }


 

        public override void OnData(Slice data)

        {

            if (!data.ContainsKey(Symbol)) return;


 

            _priceWindow.Add(data[Symbol]);


 

            if (_priceWindow.IsReady)

            {

                var fastMa = _priceWindow.Select(bar => bar.Close).Average();

                var slowMa = _priceWindow.Skip(10).Select(bar => bar.Close).Average();


 

                if (fastMa > slowMa && Portfolio[Symbol].Quantity <= 0)

                {

                    SetHoldings(Symbol, 1.0);

                }

                else if (fastMa < slowMa && Portfolio[Symbol].Quantity > 0)

                {

                    Liquidate(Symbol);

                }

            }