public double[] getPrediction(long timestamp) { if (indicator.isValid(timestamp) == false) { return new double[] { double.NaN, double.NaN, double.NaN, double.NaN, double.NaN } } ; else { double buyRatio = double.NaN, sellRatio = double.NaN, max = double.NaN, min = double.NaN, actual = double.NaN; //Search in outcomeCodeSamplingTable double v = indicator.getIndicator(); for (int i = 0; i < outcomeCodeSamplingTable.Length; i++) { bool lastElement = i == outcomeCodeSamplingTable.Length - 1; if (lastElement || (outcomeCodeSamplingTable[i + 1][(int)SampleValuesOutcomeCodesIndices.Start] > v && outcomeCodeSamplingTable[i][(int)SampleValuesOutcomeCodesIndices.Start] <= v)) { buyRatio = outcomeCodeSamplingTable[i][(int)SampleValuesOutcomeCodesIndices.BuyRatio]; sellRatio = outcomeCodeSamplingTable[i][(int)SampleValuesOutcomeCodesIndices.SellRatio]; break; } } //Search in outcomeSamplingTable for (int i = 0; i < outcomeSamplingTable.Length; i++) { bool lastElement = i == outcomeSamplingTable.Length - 1; if (lastElement || (outcomeSamplingTable[i + 1][(int)SampleValuesOutcomeIndices.Start] > v && outcomeSamplingTable[i][(int)SampleValuesOutcomeIndices.Start] <= v)) { min = outcomeSamplingTable[i][(int)SampleValuesOutcomeIndices.MinAvg]; max = outcomeSamplingTable[i][(int)SampleValuesOutcomeIndices.MaxAvg]; actual = outcomeSamplingTable[i][(int)SampleValuesOutcomeIndices.ActualAvg]; break; } } return(new double[] { buyRatio, sellRatio, min, max, actual }); } }
public static double[] getIndicatorValues(double[][] priceData, WalkerIndicator indicator, out double indicatorValidRatio) { indicatorValidRatio = 0; double[] output = new double[priceData.Length]; for (int i = 0; i < priceData.Length; i++) { long timestamp = Convert.ToInt64(priceData[i][(int)PriceDataIndeces.Date]); double mid = (priceData[i][(int)PriceDataIndeces.Ask] + priceData[i][(int)PriceDataIndeces.Bid]) / 2d; double value = indicator.setNextDataAndGetIndicator(timestamp, mid); if (double.IsNaN(value) == false && double.IsInfinity(value) == false && indicator.isValid(timestamp)) { output[i] = value; indicatorValidRatio++; } else { output[i] = double.NaN; } } indicatorValidRatio /= output.Length; return(output); }