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 |
namespace QuantConnect { public class BasicTemplateAlgorithm : QCAlgorithm { private MovingAverageConvergenceDivergence _macd; private mySlope Slope45; public readonly IReadOnlyList<string> EquitySymbols = new List<string> { "AAPL", "SPY" }; //Initialize the data and resolution you require for your strategy: public override void Initialize() { SetStartDate(2018, 01 ,01); SetEndDate(2018, 5, 17); foreach (var symbol in EquitySymbols) { AddSecurity(SecurityType.Equity, symbol, Resolution.Daily); Slope45 = new mySlope(45); RegisterIndicator(symbol, Slope45, Resolution.Daily, Field.Close); _macd = MACD(symbol, 12, 26, 9, MovingAverageType.Exponential, Resolution.Daily); } } public void OnData(TradeBars data) { if (!_macd.IsReady) return; if (!Slope45.IsReady ) return; foreach(var security in Securities.Values) { Debug (String.Format(" {0} {1} slope: {2:0.000} macd: {3:0.000}",Time.ToShortDateString(), security.Symbol, Slope45, _macd)); } } } }
using MathNet.Numerics; namespace QuantConnect { public class mySlope : WindowIndicator<IndicatorDataPoint> { private int _days; private int _dayCounter; private List<double> _xValues; private List<double> _yValues; public mySlope(int period) : base("Slope1" + period, period) { //_days = period - 1; _days = period; _dayCounter = 0; _xValues = new List<double>(); _yValues = new List<double>(); } /*public mySlope(string name, int period) : base(name, period) { } */ protected override decimal ComputeNextValue(IReadOnlyWindow<IndicatorDataPoint> window, IndicatorDataPoint input) { //if (window.Count < 3) return 0m; var xVals = new double[window.Count]; var yVals = new double[window.Count]; for (int i = 0; i < window.Count; i++) { xVals[i] = i; yVals[i] = (double) input.Value; } _xValues.Add(_dayCounter); _yValues.Add((double)input.Value); _dayCounter = _yValues.Count() - 1; //_dayCounter = _yValues.Count(); //Console.WriteLine("[yCount]: " + _yValues.Count() + " [xCount]: " + _xValues.Count()); if (_dayCounter < _days) { return 0; } else { var x1 = _xValues[_dayCounter-_days]; var x2 = _xValues[_dayCounter]; var y1 = _yValues[_dayCounter-_days]; var y2 = _yValues[_dayCounter]; decimal slope = (decimal)(y2 - y1) / (decimal)(x2 - x1); //Console.WriteLine("x1: " + x1 + ", y1: " + y1); //Console.WriteLine("x2: " + x2 + ", y2: " + y2 + " slope: ", slope); //Console.WriteLine (String.Format(" x1: {0} y1 {1:0.000} x2 {2:0} y2 {3:0.000} Slope {4:0.000} ", // x1,y1,x2,y2,slope)); return slope; } } } }