public void UpdateMetrics(ITradingObject tradingObject, Bar bar) { if (tradingObject == null) { throw new ArgumentNullException(); } if (bar.Time == Bar.InvalidTime) { return; } unchecked { int tradingObjectIndex = tradingObject.Index; for (int metricIndex = 0; metricIndex < _metrics.Count; ++metricIndex) { var currentMetricColumn = _metrics[metricIndex]; IRuntimeMetric metric = currentMetricColumn[tradingObjectIndex]; if (metric == null) { var metricCreator = _metricCreators[metricIndex]; var metricName = _metricNames[metricIndex]; metric = metricCreator(metricName); currentMetricColumn[tradingObjectIndex] = metric; } metric.Update(bar); } } }
public override void Update(IRuntimeMetric[][] metrics) { IRuntimeMetric[][] extractedMetrics = new IRuntimeMetric[1][]; extractedMetrics[0] = metrics[0]; _adr.Update(extractedMetrics); _advr.Update(metrics); MetricValues[0] = _adr.MetricValues[1] / _advr.MetricValues[1]; }
public double[] GetMetricValues(ITradingObject tradingObject, int metricIndex) { IRuntimeMetric metric = GetMetric(tradingObject, metricIndex); if (metric == null) { return(null); } return(metric.Values); }
/// <summary> /// Update all registered group runtime metric according to the value of depended metric value /// </summary> /// <param name="manager">the runtime metric manager which manages all metrics depended by the group runtime metrics</param> private void UpdateMetrics(IRuntimeMetricManager manager) { if (manager != _manager) { throw new InvalidProgramException(); } for (int i = 0; i < _metrics.Count; ++i) { IGroupRuntimeMetric metric = _metrics[i]; int[] tradingObjectIndices = _tradingObjects[i]; int[] dependedMetricIndices = _dependedMetrics[i]; if (dependedMetricIndices.Length == 0) { continue; } IRuntimeMetric[][] runtimeMetrics = new IRuntimeMetric[dependedMetricIndices.Length][]; for (int j = 0; j < runtimeMetrics.Length; ++j) { IRuntimeMetric[] fullMetrics = manager.GetMetrics(dependedMetricIndices[j]); IRuntimeMetric[] subMetrics = new IRuntimeMetric[tradingObjectIndices.Length]; for (int k = 0; k < tradingObjectIndices.Length; ++k) { subMetrics[k] = fullMetrics[tradingObjectIndices[k]]; } runtimeMetrics[j] = subMetrics; } // update metric metric.Update(runtimeMetrics); } // call observers if any foreach (var observer in _observers) { observer.Observe(this); } }
public void UpdateMetrics(ITradingObject[] tradingObjects, StockAnalysis.Share.Bar[] bars) { if (tradingObjects.Length != bars.Length || tradingObjects.Length != _maxTradingObjectNumber) { throw new ArgumentException("unexpected number of input data"); } unchecked { for (int metricIndex = 0; metricIndex < _metrics.Count; ++metricIndex) { var currentMetricColumn = _metrics[metricIndex]; var metricCreator = _metricCreators[metricIndex]; var metricName = _metricNames[metricIndex]; for (int barIndex = 0; barIndex < bars.Length; ++barIndex) { var bar = bars[barIndex]; if (bar.Time == Bar.InvalidTime) { continue; } IRuntimeMetric metric = currentMetricColumn[barIndex]; if (metric == null) { metric = metricCreator(metricName); currentMetricColumn[barIndex] = metric; } metric.Update(bar); } } } }
private double DefaultSelector(IRuntimeMetric metric) { return(metric.Values[0]); }