Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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];
        }
Ejemplo n.º 3
0
        public double[] GetMetricValues(ITradingObject tradingObject, int metricIndex)
        {
            IRuntimeMetric metric = GetMetric(tradingObject, metricIndex);

            if (metric == null)
            {
                return(null);
            }

            return(metric.Values);
        }
Ejemplo n.º 4
0
        /// <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);
            }
        }
Ejemplo n.º 5
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 6
0
 private double DefaultSelector(IRuntimeMetric metric)
 {
     return(metric.Values[0]);
 }