| 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() {
}
}
}