public void ComputesCorrectly() { var fast = new SimpleMovingAverage(3); var slow = new SimpleMovingAverage(5); var signal = new SimpleMovingAverage(3); var macd = new MovingAverageConvergenceDivergence("macd", 3, 5, 3, MovingAverageType.Simple); foreach (var data in TestHelper.GetDataStream(7)) { fast.Update(data); slow.Update(data); macd.Update(data); Assert.AreEqual(fast - slow, macd); if (fast.IsReady && slow.IsReady) { signal.Update(new IndicatorDataPoint(data.Time, macd)); Assert.AreEqual(signal.Current.Value, macd.Current.Value); } } }
protected override void Init() { InitLogFile(); #region GetIndicatorsAndFrames// Get Indicators' references... // Event occurs once at the start of the strategy //XXPrint("Starting TS on account: {0}, comment: {1}, buystop : {2} sellstop : {3}", // this.Account.Number, "CommentText", listOfBuyStop.Count, listOfSellStop.Count); Print("Starting TS on account: {0}, comment: {1}", this.Account.Number, CommentText); _ma1 = GetIndicator <MovingAverage>(Instrument.Id, Timeframe, 85, 0, MethodMA1, ApplyMA1To); _ma2 = GetIndicator <MovingAverage>(Instrument.Id, Timeframe, 75, 0, MethodMA1, ApplyMA1To); _ma3 = GetIndicator <MovingAverage>(Instrument.Id, Timeframe, 5, 0, MethodMA2, ApplyMA2To); _macd = GetIndicator <MovingAverageConvergenceDivergence> (Instrument.Id, Timeframe); _macd.FastEmaPeriod = 15; _macd.AppliedPrice = ApplyMA2To; _macd.SlowEmaPeriod = 26; _macd.SmaPeriod = 1; #endregion //GetIndicatorsAndFrames }
public override void WarmsUpProperly() { int fastPeriod = 3, slowPeriod = 4, signalPeriod = 2; var macd = new MovingAverageConvergenceDivergence(fastPeriod: fastPeriod, slowPeriod: slowPeriod, signalPeriod: signalPeriod); Assert.IsFalse(macd.Signal.IsReady); Assert.IsFalse(macd.Histogram.IsReady); Assert.IsFalse(macd.IsReady); for (var i = 0; i < fastPeriod; i++) { Assert.IsFalse(macd.Fast.IsReady); macd.Update(new IndicatorDataPoint(DateTime.Today.AddSeconds(i), i)); } Assert.IsTrue(macd.Fast.IsReady); for (var i = fastPeriod; i < slowPeriod; i++) { Assert.IsFalse(macd.Slow.IsReady); macd.Update(new IndicatorDataPoint(DateTime.Today.AddSeconds(i), i)); } Assert.IsTrue(macd.Slow.IsReady); for (var i = slowPeriod; i < macd.WarmUpPeriod; i++) { Assert.IsFalse(macd.Signal.IsReady); Assert.IsFalse(macd.Histogram.IsReady); Assert.IsFalse(macd.IsReady); macd.Update(new IndicatorDataPoint(DateTime.Today.AddSeconds(i), i)); } Assert.IsTrue(macd.Signal.IsReady); Assert.IsTrue(macd.Histogram.IsReady); Assert.IsTrue(macd.IsReady); }
/// <summary> /// Called at the start of your algorithm to setup your requirements: /// </summary> public override void Initialize() { SetCash(100000); symbols.Add("SPY"); SetStartDate(1998, 1, 1); SetEndDate(2014, 6, 1); //Present Social Media Stocks: // symbols.Add("FB");symbols.Add("LNKD");symbols.Add("GRPN");symbols.Add("TWTR"); // SetStartDate(2011, 1, 1); // SetEndDate(2014, 12, 1); //2008 Financials: // symbols.Add("C");symbols.Add("AIG");symbols.Add("BAC");symbols.Add("HBOS"); // SetStartDate(2003, 1, 1); // SetEndDate(2011, 1, 1); //2000 Dot.com: // symbols.Add("IPET");symbols.Add("WBVN");symbols.Add("GCTY"); // SetStartDate(1998, 1, 1); // SetEndDate(2000, 1, 1); //CAPE data AddData <CAPE>("CAPE"); foreach (string stock in symbols) { AddSecurity(SecurityType.Equity, stock, Resolution.Minute); macd = MACD(stock, 12, 26, 9, MovingAverageType.Exponential, Resolution.Daily); macdDic.Add(stock, macd); rsi = RSI(stock, 14, MovingAverageType.Exponential, Resolution.Daily); rsiDic.Add(stock, rsi); Securities[stock].SetLeverage(10); } }
public MovingAverageConvergenceDivergenceOscillatorTrend(Equity equity, int emaPeriodCount1, int emaPeriodCount2, int demPeriodCount) : base(equity, emaPeriodCount1, emaPeriodCount2, demPeriodCount) { _macdIndicator = new MovingAverageConvergenceDivergence(equity, emaPeriodCount1, emaPeriodCount2, demPeriodCount); }
private void PreprocessIndicators() { var data = IndicatorService.GetData(code, targetDate, new string[] { "Tarih", "Kapanis" }, numberOfData + 1); double[] sma = null; double[] wma = null; double[] ema = null; MovingAverageConvergenceDivergence macd = null; double[] rsi = null; double[] williamsR = null; Stochastics stochastics = null; if (isSMA) { sma = MovingAverage.Simple(code, targetDate, 14, numberOfData); } if (isWMA) { wma = MovingAverage.Weighted(code, targetDate, 14, numberOfData); } if (isEMA) { ema = MovingAverage.Exponential(code, targetDate, 14, numberOfData); } if (isMACD) { macd = new MovingAverageConvergenceDivergence(code, targetDate, 12, 26, 9, numberOfData); } if (isRSI) { rsi = RelativeStrengthIndex.Rsi(code, targetDate, 14, numberOfData); } if (isWilliamsR) { williamsR = WilliamsR.Wsr(code, targetDate, 14, numberOfData); } if (isStochastics) { stochastics = new Stochastics(code, targetDate, 14, 3, 3, numberOfData); } double[] closesOut = IndicatorDataPreprocessor.GetClosesOut(numberOfData, data); double[] smaOut = null; double[] wmaOut = null; double[] emaOut = null; double[] macdOut = null; double[] rsiOut = null; double[] williamsROut = null; double[] stochasticsOut = null; if (isSMA) { smaOut = IndicatorDataPreprocessor.GetSMAOut(sma); } if (isWMA) { wmaOut = IndicatorDataPreprocessor.GetWMAOut(wma); } if (isEMA) { emaOut = IndicatorDataPreprocessor.GetEMAOut(ema); } if (isMACD) { macdOut = IndicatorDataPreprocessor.GetMACDOut(macd); } if (isRSI) { rsiOut = IndicatorDataPreprocessor.GetRSIOut(rsi, false); } if (isWilliamsR) { williamsROut = IndicatorDataPreprocessor.GetWilliamsROut(williamsR, false); } if (isStochastics) { stochasticsOut = IndicatorDataPreprocessor.GetStochasticsOut(stochastics, false); } minRowCount = closesOut.Length; if (isSMA) { minRowCount = minRowCount < smaOut.Length ? minRowCount : smaOut.Length; } if (isWMA) { minRowCount = minRowCount < wmaOut.Length ? minRowCount : wmaOut.Length; } if (isEMA) { minRowCount = minRowCount < emaOut.Length ? minRowCount : emaOut.Length; } if (isMACD) { minRowCount = minRowCount < macdOut.Length ? minRowCount : macdOut.Length; } if (isRSI) { minRowCount = minRowCount < rsiOut.Length ? minRowCount : rsiOut.Length; } if (isWilliamsR) { minRowCount = minRowCount < williamsROut.Length ? minRowCount : williamsROut.Length; } if (isStochastics) { minRowCount = minRowCount < stochasticsOut.Length ? minRowCount : stochasticsOut.Length; } FeatureVector featureVector = new FeatureVector(); if (isSMA) { featureVector.AddColumn("SMA", smaOut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); } if (isWMA) { featureVector.AddColumn("WMA", wmaOut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); } if (isEMA) { featureVector.AddColumn("EMA", emaOut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); } if (isMACD) { featureVector.AddColumn("MACD", macdOut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); } if (isRSI) { featureVector.AddColumn("RSI", rsiOut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); } if (isWilliamsR) { featureVector.AddColumn("WilliamsR", williamsROut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); } if (isStochastics) { featureVector.AddColumn("Stochastics", stochasticsOut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); } featureVector.AddColumn("label", closesOut.Select(p => (object)string.Format("{0:0.0}", p).ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); int count = featureVector.Values[0].Length; training = new FeatureVector(); test = new FeatureVector(); for (int i = 0; i < featureVector.ColumnName.Count; i++) { training.AddColumn(featureVector.ColumnName[i], featureVector.Values[i].Take((int)(count * trainingPercentage / 100.0)).ToArray()); test.AddColumn(featureVector.ColumnName[i], featureVector.Values[i].Skip((int)(count * trainingPercentage / 100.0)).Take(count).ToArray()); // Take(count) means take the rest of all elements, number of the rest of the elements is smaller than count. } }
protected override void Init() { // Event occurs once at the start of the strategy Print("Starting TS on account: {0}, comment: {1}", this.Account.Number, CommentText); _macd = GetIndicator <MovingAverageConvergenceDivergence>(Instrument.Id, Timeframe, 15, 30, 4, PriceMode.Close); }
private void macdParameterNext_Click(object sender, EventArgs e) { macdResultTitle.Text = Code + " için Moving Average Convergence Divergence sonucu"; FirstPeriod = (int)firstPeriod.Value; SecondPeriod = (int)secondPeriod.Value; TriggerPeriod = (int)triggerPeriod.Value; closeEma1Ema2Chart.Series.Clear(); macdLineChart.Series.Clear(); triggerLineChart.Series.Clear(); var closeSeries = new Series { Name = "Kapanış", Color = System.Drawing.Color.Black, ChartType = SeriesChartType.Line }; var emaFirstSeries = new Series { Name = "EMA Kısa Period", Color = System.Drawing.Color.Red, ChartType = SeriesChartType.Line }; var emaSecondSeries = new Series { Name = "EMA Uzun Period", Color = System.Drawing.Color.Green, ChartType = SeriesChartType.Line }; var macdLineSeries = new Series { Name = "MACD", Color = System.Drawing.Color.Blue, ChartType = SeriesChartType.Line }; var triggerLineSeries = new Series { Name = "Trigger", Color = System.Drawing.Color.Blue, ChartType = SeriesChartType.Line }; closeEma1Ema2Chart.Series.Add(closeSeries); closeEma1Ema2Chart.Series.Add(emaFirstSeries); closeEma1Ema2Chart.Series.Add(emaSecondSeries); macdLineChart.Series.Add(macdLineSeries); triggerLineChart.Series.Add(triggerLineSeries); var closeData = IndicatorService.GetData(Code, TargetDate, new string[] { "Tarih", "Kapanis" }, NumberOfData); MovingAverageConvergenceDivergence macd = new MovingAverageConvergenceDivergence(Code, TargetDate, FirstPeriod, SecondPeriod, TriggerPeriod, NumberOfData, MapReduceAllowed); double[] emaFirst = macd.EmaFirst; double[] emaSecond = macd.EmaSecond; double[] macdLine = macd.MacdLine; double[] triggerLine = macd.TriggerLine; DateTime date; int i; for (i = 0; i < triggerLine.Length; i++) { var close = closeData.ElementAt(i); date = close.GetElement("Tarih").Value.AsBsonDateTime.ToLocalTime(); closeSeries.Points.AddXY(date, close.GetElement("Kapanis").Value.ToDouble()); emaFirstSeries.Points.AddXY(date, emaFirst[i]); emaSecondSeries.Points.AddXY(date, emaSecond[i]); macdLineSeries.Points.AddXY(date, macdLine[i]); triggerLineSeries.Points.AddXY(date, triggerLine[i]); } for (; i < emaFirst.Length; i++) { var close = closeData.ElementAt(i); date = close.GetElement("Tarih").Value.AsBsonDateTime.ToLocalTime(); closeSeries.Points.AddXY(date, close.GetElement("Kapanis").Value.ToDouble()); emaFirstSeries.Points.AddXY(date, emaFirst[i]); emaSecondSeries.Points.AddXY(date, emaSecond[i]); macdLineSeries.Points.AddXY(date, macdLine[i]); } closeEma1Ema2Chart.ChartAreas[0].AxisY.Minimum = Math.Floor(new double[] { closeData.Select(p => p.GetElement("Kapanis").Value.ToDouble()).Min(), emaFirst.Min(), emaSecond.Min() }.Min()); closeEma1Ema2Chart.ChartAreas[0].AxisY.Maximum = Math.Ceiling(new double[] { closeData.Select(p => p.GetElement("Kapanis").Value.ToDouble()).Max(), emaFirst.Max(), emaSecond.Max() }.Max()); macdLineChart.ChartAreas[0].AxisY.Minimum = Math.Floor(macdLine.Min()); macdLineChart.ChartAreas[0].AxisY.Maximum = Math.Ceiling(macdLine.Max()); triggerLineChart.ChartAreas[0].AxisY.Minimum = Math.Floor(triggerLine.Min()); triggerLineChart.ChartAreas[0].AxisY.Maximum = Math.Floor(triggerLine.Max()); closeEma1Ema2Chart.Invalidate(); macdLineChart.Invalidate(); triggerLineChart.Invalidate(); macdResultPanel.BringToFront(); }
public MovingAverageConvergenceDivergenceCrossover(IList <decimal> closes, int emaPeriodCount1, int emaPeriodCount2, int demPeriodCount) : base(closes) { _macd = new MovingAverageConvergenceDivergence(closes, emaPeriodCount1, emaPeriodCount2, demPeriodCount); }
protected override void Init() { _macdInd = GetIndicator <MovingAverageConvergenceDivergence>(Instrument.Id, Timeframe); _bbInd = GetIndicator <BollingerBands>(Instrument.Id, Timeframe); }
private static void RunConsoleApplication() { string filePath = (Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX) ? Environment.GetEnvironmentVariable("HOME") : Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%"); filePath += "\\indicatorOutput.txt"; string code = "AKBNK"; DateTime targetDate = new DateTime(2018, 11, 1).ToLocalTime(); int numberOfData = 1000; var data = IndicatorService.GetData(code, targetDate, new string[] { "Tarih", "Kapanis" }, numberOfData + 1); double[] sma = MovingAverage.Simple(code, targetDate, 14, numberOfData); double[] wma = MovingAverage.Weighted(code, targetDate, 14, numberOfData); double[] ema = MovingAverage.Exponential(code, targetDate, 14, numberOfData); MovingAverageConvergenceDivergence macd = new MovingAverageConvergenceDivergence(code, targetDate, 12, 26, 9, numberOfData); double[] rsi = RelativeStrengthIndex.Rsi(code, targetDate, 14, numberOfData); double[] williams = WilliamsR.Wsr(code, targetDate, 14, numberOfData); Stochastics stochastics = new Stochastics(code, targetDate, 14, 3, 3, numberOfData); double[] closesOut = IndicatorDataPreprocessor.GetClosesOut(numberOfData, data); double[] smaOut = IndicatorDataPreprocessor.GetSMAOut(sma); double[] wmaOut = IndicatorDataPreprocessor.GetWMAOut(wma); double[] emaOut = IndicatorDataPreprocessor.GetEMAOut(ema); double[] macdOut = IndicatorDataPreprocessor.GetMACDOut(macd); double[] rsiOut = IndicatorDataPreprocessor.GetRSIOut(rsi); double[] williamsROut = IndicatorDataPreprocessor.GetWilliamsROut(williams); double[] stochasticsOut = IndicatorDataPreprocessor.GetStochasticsOut(stochastics); int minRowCount; minRowCount = smaOut.Length; minRowCount = minRowCount < wmaOut.Length ? minRowCount : wmaOut.Length; minRowCount = minRowCount < emaOut.Length ? minRowCount : emaOut.Length; minRowCount = minRowCount < macdOut.Length ? minRowCount : macdOut.Length; minRowCount = minRowCount < rsiOut.Length ? minRowCount : rsiOut.Length; minRowCount = minRowCount < williamsROut.Length ? minRowCount : williamsROut.Length; minRowCount = minRowCount < stochasticsOut.Length ? minRowCount : stochasticsOut.Length; minRowCount = minRowCount < closesOut.Length ? minRowCount : closesOut.Length; FeatureVector vector = new FeatureVector(); vector.AddColumn("SMA", smaOut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); vector.AddColumn("WMA", wmaOut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); vector.AddColumn("EMA", emaOut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); vector.AddColumn("MACD", macdOut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); vector.AddColumn("RSI", rsiOut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); vector.AddColumn("WilliamsR", williamsROut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); vector.AddColumn("Stochastics", stochasticsOut.Select(p => (object)p.ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); vector.AddColumn("label", closesOut.Select(p => (object)string.Format("{0:0.0}", p).ToString(CultureInfo.InvariantCulture)).Take(minRowCount).ToArray()); new LabeledPointExporter(vector).Export(filePath); int count = vector.Values[0].Length; FeatureVector training = new FeatureVector(); for (int i = 0; i < vector.ColumnName.Count; i++) { training.AddColumn(vector.ColumnName[i], vector.Values[i].Take(count / 2).ToArray()); } FeatureVector test = new FeatureVector(); for (int i = 0; i < vector.ColumnName.Count; i++) { test.AddColumn(vector.ColumnName[i], vector.Values[i].Skip(count / 2).Take(count / 2).ToArray()); } //TestNaiveBayes(training, test); //TestNaiveBayesUsingCrossValidation(training, test); //TestLinearRegression(training, test); //TestLinearRegressionUsingCrossValidation(training, test); //TestLogisticRegression(training, test); //TestLogisticRegressionUsingCrossValidation(training, test); }
private static void RunFeatureSelector(int mlAlgorithm, bool isCrossValidationEnabled, double trainingSetPercentage) { string code = "AKBNK"; DateTime targetDate = new DateTime(2018, 11, 1).ToLocalTime(); int numberOfData = 4000; var data = IndicatorService.GetData(code, targetDate, new string[] { "Tarih", "Kapanis" }, numberOfData + 1); double[] sma = MovingAverage.Simple(code, targetDate, 14, numberOfData); double[] wma = MovingAverage.Weighted(code, targetDate, 14, numberOfData); double[] ema = MovingAverage.Exponential(code, targetDate, 14, numberOfData); MovingAverageConvergenceDivergence macd = new MovingAverageConvergenceDivergence(code, targetDate, 12, 26, 9, numberOfData); double[] rsi = RelativeStrengthIndex.Rsi(code, targetDate, 14, numberOfData); double[] williams = WilliamsR.Wsr(code, targetDate, 14, numberOfData); Stochastics stochastics = new Stochastics(code, targetDate, 14, 3, 3, numberOfData); double[] closesOut = IndicatorDataPreprocessor.GetClosesOut(numberOfData, data); double[] smaOut = IndicatorDataPreprocessor.GetSMAOut(sma); double[] wmaOut = IndicatorDataPreprocessor.GetWMAOut(wma); double[] emaOut = IndicatorDataPreprocessor.GetEMAOut(ema); double[] macdOut = IndicatorDataPreprocessor.GetMACDOut(macd); double[] rsiOut = IndicatorDataPreprocessor.GetRSIOut(rsi, false); double[] williamsROut = IndicatorDataPreprocessor.GetWilliamsROut(williams, false); double[] stochasticsOut = IndicatorDataPreprocessor.GetStochasticsOut(stochastics, false); int minRowCount; minRowCount = smaOut.Length; minRowCount = minRowCount < wmaOut.Length ? minRowCount : wmaOut.Length; minRowCount = minRowCount < emaOut.Length ? minRowCount : emaOut.Length; minRowCount = minRowCount < macdOut.Length ? minRowCount : macdOut.Length; minRowCount = minRowCount < rsiOut.Length ? minRowCount : rsiOut.Length; minRowCount = minRowCount < williamsROut.Length ? minRowCount : williamsROut.Length; minRowCount = minRowCount < stochasticsOut.Length ? minRowCount : stochasticsOut.Length; minRowCount = minRowCount < closesOut.Length ? minRowCount : closesOut.Length; int numberOfIndicators = IndicatorService.indicators.Length; int numberOfCombinations = (int)Math.Pow(2, numberOfIndicators) - 1; for (int i = 1; i <= numberOfCombinations; i++) { int tmp = i; List <int> indicators = new List <int>(); for (int j = 0; j < numberOfIndicators; j++) { if ((tmp & 1) == 1) { indicators.Add(IndicatorService.indicators[j]); } tmp >>= 1; } double accuracy = CalculateAccuracy(indicators, mlAlgorithm, isCrossValidationEnabled, minRowCount, trainingSetPercentage, smaOut, wmaOut, emaOut, macdOut, rsiOut, williamsROut, stochasticsOut, closesOut); if (indicators.Contains(IndicatorService.SMA)) { Console.Write("SMA "); } if (indicators.Contains(IndicatorService.WMA)) { Console.Write("WMA "); } if (indicators.Contains(IndicatorService.EMA)) { Console.Write("EMA "); } if (indicators.Contains(IndicatorService.MACD)) { Console.Write("MACD "); } if (indicators.Contains(IndicatorService.RSI)) { Console.Write("RSI "); } if (indicators.Contains(IndicatorService.WilliamsR)) { Console.Write("WilliamsR "); } if (indicators.Contains(IndicatorService.Stochastics)) { Console.Write("Stochastics "); } Console.WriteLine("=>\t" + accuracy); } }
public override void Initialize() { _symbol = AddForex(_ticker, Resolution.Minute).Symbol; _macd = Algo.MACD(_symbol, 12, 26, 9, MovingAverageType.Exponential, _resolution); }