public static void TestGraph(this AbstractIndicator ind, string filename, int length) { Quantum q = Quantum.ExcelToQuantum(filename, "symbol", 0); var dz = new DenseMatrix(4 + 1 + ind.SubIndicatorSize, q.Data.Count); List <string> names = new List <string>(); names.Add("symbol"); names.Add(ind.ToString()); foreach (var indicator in ind.SubIndicators) { names.Add(indicator.Key); } //chartoptions ChartOption[] chartOptions = new ChartOption[names.Count]; chartOptions[0] = new ChartOption() { Height = 400, YPosition = 0 }; chartOptions[1] = new ChartOption() { Height = 200, YPosition = 1 }; for (int i = 2; i < chartOptions.Length; i++) { chartOptions[i] = new ChartOption() { Height = 0, YPosition = 1, Layover = true } } ; int counter = 0; foreach (Tick tick in q) { dz[0, counter] = tick.BidOpen; dz[1, counter] = tick.BidHigh; dz[2, counter] = tick.BidLow; dz[3, counter] = tick.BidClose; dz[4, counter] = ind.HandleNextTick(tick); int icounter = 5; foreach (var subind in ind.SubIndicators.Values) { dz[icounter, counter] = subind[0]; icounter++; } counter++; } Visualize.GenerateMultiPaneGraph(names.ToArray(), q.Data.Keys.ToArray(), dz, QSConstants.DEFAULT_DATA_FILEPATH + @"results.html", chartOptions); Console.WriteLine("Done Generating Graph for " + ind.ToString()); }
public override double HandleNextTick(Tick t) { if (indicator != null) { return(HandleNextTick(indicator.HandleNextTick(t))); } return(HandleNextTick(t.BidClose)); }
public void FinishAndProcess() { for (int i = 0; i < symbols.Length; i++) { SortedList <DateTime, Tick> d = mktData[i].data.Data; for (int j = 0; j < numTicks; j++) { graphData[i, j] = indicator.HandleNextTick(d.Values[j]); } } Visualize.GenerateMultiSymbolGraph(symbols, graphData, mktData[0].data.Data.Values[0].Time, DateTimeUtils.TimeFrameToTimeSpan(timeframe), "C:\\Users\\Ethan\\Work\\QuantSysdata.html"); Console.WriteLine("Done Processing symbol set."); }
public override double HandleNextTick(Tick t) { double value = double.NaN; MA.HandleNextTick(t); indicator.HandleNextTick(t); if (!MA[0].Equals(double.NaN)) { double[] MAArray = MA.ToArray(); double[] indArray = indicator.ToArray(); SortedList <double, double> tickHighs = new SortedList <double, double>(); SortedList <double, double> tickLows = new SortedList <double, double>(); SortedList <double, double> indHighs = new SortedList <double, double>(); SortedList <double, double> indLows = new SortedList <double, double>(); for (int i = 2; i < MAArray.Length; i++) { //high if (MAArray[i] < MAArray[i - 1] && MAArray[i - 1] > MAArray[i - 2]) { tickHighs.Add(i - 1, MAArray[i - 1]); } if (indArray[i] < indArray[i - 1] && indArray[i - 1] > indArray[i - 2]) { indHighs.Add(i - 1, indArray[i - 1]); } //low if (MAArray[i] > MAArray[i - 1] && MAArray[i - 1] < MAArray[i - 2]) { tickLows.Add(i - 1, MAArray[i - 1]); } if (indArray[i] > indArray[i - 1] && indArray[i - 1] < indArray[i - 2]) { indLows.Add(i - 1, indArray[i - 1]); } } if (tickHighs.Count > 0 && indHighs.Count > 0 && tickLows.Count > 0 && indLows.Count > 0) { LinearRegression lrTickHighs = new LinearRegression(); LinearRegression lrTickLows = new LinearRegression(); LinearRegression lrindkHighs = new LinearRegression(); LinearRegression lrindLows = new LinearRegression(); lrTickHighs.Model(tickHighs.Keys.ToArray(), tickHighs.Values.ToArray()); lrTickLows.Model(tickLows.Keys.ToArray(), tickLows.Values.ToArray()); lrindkHighs.Model(indHighs.Keys.ToArray(), indHighs.Values.ToArray()); lrindLows.Model(indLows.Keys.ToArray(), indLows.Values.ToArray()); if (lrTickHighs.X2 > 0 && lrindkHighs.X2 < 0) { value = 1; } else if (lrTickLows.X2 < 0 && lrindLows.X2 > 0) { value = -1; } else { value = 0; } value = lrindkHighs.Fit(indArray[0]); } } indicatorData.Enqueue(value); return(value); }
public static void TestGraphLive(this AbstractIndicator ind, string timeframe, string symbol, int length) { //------------grab data FXSession session = new FXSession(); session.InitializeSession(); HistoricPriceEngine h = new HistoricPriceEngine(session); h.GetLongHistoricPrices(symbol, timeframe, length); while (!h.Complete) { Thread.Sleep(100); } //----------------------- Quantum q = h.Data; var dz = new DenseMatrix(4 + 1 + ind.SubIndicatorSize, q.Data.Count); List <string> names = new List <string>(); names.Add("symbol"); names.Add(ind.ToString()); foreach (var indicator in ind.SubIndicators) { names.Add(indicator.Key); } //chartoptions ChartOption[] chartOptions = new ChartOption[names.Count]; chartOptions[0] = new ChartOption() { Height = 400, YPosition = 0 }; chartOptions[1] = new ChartOption() { Height = 200, YPosition = 1 }; for (int i = 2; i < chartOptions.Length; i++) { chartOptions[i] = new ChartOption() { Height = 0, YPosition = 1, Layover = true } } ; int counter = 0; foreach (Tick tick in q) { dz[0, counter] = tick.BidOpen; dz[1, counter] = tick.BidHigh; dz[2, counter] = tick.BidLow; dz[3, counter] = tick.BidClose; dz[4, counter] = ind.HandleNextTick(tick); int icounter = 5; foreach (var subind in ind.SubIndicators.Values) { dz[icounter, counter] = subind[0]; icounter++; } counter++; } Visualize.GenerateMultiPaneGraph(names.ToArray(), q.Data.Keys.ToArray(), dz, QSConstants.DEFAULT_DATA_FILEPATH + @"results.html", chartOptions); Console.WriteLine("Done Generating Graph for " + ind.ToString()); }