Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
-no value-
namespace QuantConnect { /* * QuantConnect University: 50-10 EMA - Exponential Moving Average Cross * * The classic exponential moving average cross implementation using a custom class. * The algorithm uses allows for a safety margin so you can reduce the "bounciness" * of the trading to confirm the crossing. */ public class QCUMovingAverageCross : QCAlgorithm { //Define required variables: int _quantity = 0, _CCIbuysignal = 0, _CCIsellsignal = 0; decimal _price = 0; decimal _tolerance = 0.03m; //0.1% safety margin in prices to avoid bouncing. string _symbol = "SPY"; DateTime _sampledToday = DateTime.Now; //Set up the EMA Class: BollingerBands _bb; OnBalanceVolume _OBV; MovingAverageConvergenceDivergence _MACDobv; //Initialize the data and resolution you require for your strategy: public override void Initialize() { SetStartDate(2013, 01, 02); SetEndDate(DateTime.Now); SetCash(25000); AddSecurity(SecurityType.Equity, _symbol, Resolution.Minute); _bb = BB(_symbol, 50, 2, MovingAverageType.Exponential, Resolution.Daily); _OBV = OBV(_symbol,Resolution.Daily); _MACDobv = new MovingAverageConvergenceDivergence(15,15,2,MovingAverageType.Simple).Of(_OBV); //Chart plotter = new Chart("Plotter"); //plotter.AddSeries(new Series("SPY", SeriesType.Line, index:0)); //AddChart(plotter); Chart chart1 = new Chart(_symbol); chart1.AddSeries(new Series(_symbol, SeriesType.Line, index:0)); chart1.AddSeries(new Series("Buy", SeriesType.Scatter, index:0)); chart1.AddSeries(new Series("Sell", SeriesType.Scatter, index:0)); chart1.AddSeries(new Series("OBV", SeriesType.Line, index:0)); chart1.AddSeries(new Series("Signal", SeriesType.Line, index:1)); chart1.AddSeries(new Series("Fast", SeriesType.Line, index:1)); chart1.AddSeries(new Series("Slow", SeriesType.Line, index:1)); AddChart(chart1); } //Handle TradeBar Events: a TradeBar occurs on every time-interval public void OnData(TradeBars data) { //One data point per day: if (_sampledToday.Date == data[_symbol].Time.Date) return; //Only take one data point per day (opening price) _price = Securities[_symbol].Close; _sampledToday = data[_symbol].Time; //Wait until EMA's are ready: if (!_OBV.IsReady || !_MACDobv.IsReady) return; //Get fresh cash balance: Set purchase quantity to equivalent 10% of portfolio. decimal cash = Portfolio.Cash; int holdings = Portfolio[_symbol].Quantity; _quantity = Convert.ToInt32((cash * 0.5m) / _price); if (holdings > 0 || holdings == 0) { //If we're long, or flat: check if EMA crossed negative: and crossed outside our safety margin: //Order(_symbol, -(holdings + _quantity)); Plot(_symbol, "Sell", _price); Log(Time.ToShortDateString() + "> Go Short > Holdings: " + holdings.ToString() + " Quantity:" + _quantity.ToString()); } else if (holdings < 0 || holdings == 0) { Order(_symbol, Math.Abs(holdings) + _quantity); Plot(_symbol, "Buy", _price); Log(Time.ToShortDateString() + "> Go Long > Holdings: " + holdings.ToString() + " Quantity:" + _quantity.ToString()); } } public override void OnEndOfDay() { try { //#5 Manual Stock Plotter: Plot price once per day: if (_OBV.IsReady && _MACDobv.IsReady) { Plot(_symbol, "Price", _price); Plot(_symbol, "OBV", _OBV); Plot(_symbol, "Signal", _MACDobv.Signal); Plot(_symbol, "Fast", _MACDobv.Fast); Plot(_symbol, "Slow", _MACDobv.Slow); } } catch (Exception err) { Error("OnEndOfDay Err:" + err.Message); } } } }