Overall Statistics |
Total Trades 1 Average Win 67.21% Average Loss 0% Compounding Annual Return 29.325% Drawdown 14.900% Expectancy 0 Net Profit 67.21% Sharpe Ratio 1.503 Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha -0.031 Beta 1.453 Annual Standard Deviation 0.182 Annual Variance 0.033 Information Ratio 0.665 Tracking Error 0.097 Treynor Ratio 0.188 |
-no value-
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using QuantConnect; using QuantConnect.Algorithm; using QuantConnect.Data.Market; using QuantConnect.Indicators; namespace Sandbox { public class Jagtar : QCAlgorithm { public const string Symbol = "SPY"; public IndicatorBase<IndicatorDataPoint> avg; public IndicatorBase<IndicatorDataPoint> mom; public IndicatorBase<IndicatorDataPoint> avgOfMomentum; public override void Initialize() { SetStartDate(2013, 01, 01); SetEndDate(2015, 01, 01); AddSecurity(SecurityType.Equity, Symbol, Resolution.Minute); // define the indicator pieces individually MovingAverageType type = MovingAverageType.Exponential; avg = type.AsIndicator(30); mom = type.AsIndicator(5).Of(new MomentumPercent(45), "Smoothed Momentum(60)"); // compose them together using the Of extension method avgOfMomentum = avg.Of(mom, "Momentum Of SMA"); // when pumping data in, you only need data to go into the 'composed' indicator, in this case, // the momentumOfSma and it will automatically update its child indicators (sma, mom) // update the indicator manually like this in OnData method if you don't want auto updates //momentumOfSma.Update(time, value); // register the indicator for automatic updates RegisterIndicator(Symbol, avgOfMomentum, Resolution.Daily, data => data.Value); } decimal threshold = 0.015m; public void OnData(TradeBars data) { if (!avgOfMomentum.IsReady) return; if (Portfolio[Symbol].Quantity < 1 && avg > threshold) { SetHoldings(Symbol, 1.0); } else if (Portfolio[Symbol].Quantity > -1 && avg < -threshold) { SetHoldings(Symbol, -1.0); } } public override void OnEndOfDay() { if (!avgOfMomentum.IsReady) return; Plot(Symbol, "Price", Securities[Symbol].Price); Plot(Symbol, "Mom", Securities[Symbol].Price + 100m*mom); Plot(Symbol, "AvgMom", Securities[Symbol].Price + 100m*avg); // scale our momentum percentage by a factor of 100 Plot(Symbol + "_mom", "Momentum%", 100m*mom); Plot(Symbol + "_mom", "SMA Momentum%", 100m*avgOfMomentum); } } }