Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
19.427%
Drawdown
9.200%
Expectancy
0
Net Profit
42.606%
Sharpe Ratio
1.471
Probabilistic Sharpe Ratio
73.652%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.015
Beta
0.964
Annual Standard Deviation
0.092
Annual Variance
0.008
Information Ratio
-1.142
Tracking Error
0.018
Treynor Ratio
0.14
Total Fees
$1.00
Estimated Strategy Capacity
$45000000.00
Lowest Capacity Asset
SPY R735QTJ8XC9X
#region imports
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Globalization;
    using System.Drawing;
    using QuantConnect;
    using QuantConnect.Algorithm.Framework;
    using QuantConnect.Algorithm.Framework.Selection;
    using QuantConnect.Algorithm.Framework.Alphas;
    using QuantConnect.Algorithm.Framework.Portfolio;
    using QuantConnect.Algorithm.Framework.Execution;
    using QuantConnect.Algorithm.Framework.Risk;
    using QuantConnect.Parameters;
    using QuantConnect.Benchmarks;
    using QuantConnect.Brokerages;
    using QuantConnect.Util;
    using QuantConnect.Interfaces;
    using QuantConnect.Algorithm;
    using QuantConnect.Indicators;
    using QuantConnect.Data;
    using QuantConnect.Data.Consolidators;
    using QuantConnect.Data.Custom;
    using QuantConnect.DataSource;
    using QuantConnect.Data.Fundamental;
    using QuantConnect.Data.Market;
    using QuantConnect.Data.UniverseSelection;
    using QuantConnect.Notifications;
    using QuantConnect.Orders;
    using QuantConnect.Orders.Fees;
    using QuantConnect.Orders.Fills;
    using QuantConnect.Orders.Slippage;
    using QuantConnect.Scheduling;
    using QuantConnect.Securities;
    using QuantConnect.Securities.Equity;
    using QuantConnect.Securities.Future;
    using QuantConnect.Securities.Option;
    using QuantConnect.Securities.Forex;
    using QuantConnect.Securities.Crypto;
    using QuantConnect.Securities.Interfaces;
    using QuantConnect.Storage;
    using QuantConnect.Data.Custom.AlphaStreams;
    using QCAlgorithmFramework = QuantConnect.Algorithm.QCAlgorithm;
    using QCAlgorithmFrameworkBridge = QuantConnect.Algorithm.QCAlgorithm;
#endregion
namespace QuantConnect 
{   
    /*
    *   QuantConnect University: Bollinger Bands Example:
    */
    public class BollingerBandsAlgorithm : QCAlgorithm
    {
        string _symbol = "SPY";
        BollingerBands _bb;
        RelativeStrengthIndex _rsi;
        AverageTrueRange _atr;
        ExponentialMovingAverage _ema;
        SimpleMovingAverage _sma;
        MovingAverageConvergenceDivergence _macd;
        
        decimal _price;
        
        //Initialize the data and resolution you require for your strategy:
        public override void Initialize()
        {
            //Initialize
            SetStartDate(2013, 1, 1);         
            SetEndDate(2014, 12, 31); 
            SetCash(25000);
            
            //Add as many securities as you like. All the data will be passed into the event handler:
            AddSecurity(SecurityType.Equity, _symbol, Resolution.Minute);
            
            //Set up Indicators:
            _bb = BB(_symbol, 20, 2, MovingAverageType.Exponential, Resolution.Daily);
            _rsi = RSI(_symbol, 14,  MovingAverageType.Simple, Resolution.Daily);
            _atr = ATR(_symbol, 14,  MovingAverageType.Simple, Resolution.Daily);
            _ema = EMA(_symbol, 14, Resolution.Daily);
            _sma = SMA(_symbol, 14, Resolution.Daily);
            _macd = MACD(_symbol, 12, 26, 9, MovingAverageType.Simple, Resolution.Daily);
        }

        public void OnData(TradeBars data) 
        {   
            if (!_bb.IsReady || !_rsi.IsReady) return;
            
            _price = data["SPY"].Close;
            
            if (!Portfolio.HoldStock) 
            { 
                int quantity = (int)Math.Floor(Portfolio.Cash / data[_symbol].Close);
                
                //Order function places trades: enter the string symbol and the quantity you want:
                Order(_symbol,  quantity);
                
                //Debug sends messages to the user console: "Time" is the algorithm time keeper object 
                Debug("Purchased SPY on " + Time.ToShortDateString());
            }

            if (!_bb.IsReady) return;
            
            Plot("BB", "Price", _price);
            Plot("BB", _bb.UpperBand, _bb.MiddleBand, _bb.LowerBand);
            
            Plot("RSI", _rsi);
            
            Plot("ATR", _atr);
            
            Plot("MACD", "Price", _price);
            Plot("MACD", _macd.Fast, _macd.Slow);
            
            Plot("Averages", _ema, _sma);
        }
        
        // Fire plotting events once per day:
        public override void OnEndOfDay() {
            
        }
    }
}