Esempio n. 1
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);
            }
        }
Esempio n. 2
0
        public int RegisterMetric(IGroupRuntimeMetric metric)
        {
            if (metric == null)
            {
                throw new ArgumentNullException();
            }

            var dependedMetricIndices = metric.DependedRawMetrics
                                        .Select(s => _manager.RegisterMetric(s))
                                        .ToArray();

            _dependedMetrics.Add(dependedMetricIndices);

            var tradingObjectIndices = metric.TradingObjects
                                       .Select(t => t.Index)
                                       .ToArray();

            _tradingObjects.Add(tradingObjectIndices);

            _metrics.Add(metric);

            return(_metrics.Count - 1);
        }