public void Observe(IRuntimeMetricManager manager)
        {
            if (manager == null)
            {
                throw new ArgumentNullException();
            }

            var metrics = manager.GetMetrics(_metricIndex);

            foreach (var sorter in _blockToMetricSorterMap.Values)
            {
                var subMetrics = sorter.TradingObjects.Select(o => metrics[o.Index]).ToArray();

                sorter.OrderBy(subMetrics, _comparer);
            }
        }
Exemplo n.º 2
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);
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Get metrics for all trading objects
 /// </summary>
 /// <returns>array of underlying IRuntimeMetric objects. It is indexed by the index of trading objects</returns>
 public IRuntimeMetric[] GetMetrics()
 {
     return(_manager.GetMetrics(_metricIndex));
 }