public BlockMetricSorterManager(IEvaluationContext context, string metricName, IComparer <double[]> comparer) { if (context == null || context.RelationshipManager == null || string.IsNullOrWhiteSpace(metricName)) { throw new ArgumentNullException(); } _comparer = comparer; // create sorter for blocks var allTradingObjects = context.GetAllTradingObjects().ToDictionary(o => o.Code); var blocks = context.RelationshipManager.Blocks.ToArray(); var metricSorterPerBlock = blocks .Select(block => { var tradingObjects = context.RelationshipManager.GetStocksInBlock(block) .Where(allTradingObjects.ContainsKey) .Select(stock => allTradingObjects[stock]) .ToArray(); return(new MetricGroupSorter(tradingObjects)); }) .ToArray(); _blockToMetricSorterMap = Enumerable .Range(0, blocks.Length) .ToDictionary(i => blocks[i], i => metricSorterPerBlock[i]); // register metric _metricIndex = context.MetricManager.RegisterMetric(metricName); // register observer context.MetricManager.RegisterAfterUpdatedMetricsObserver(this); }
public StockBoardMetricsManager( IEvaluationContext context, Func <IEnumerable <ITradingObject>, IGroupRuntimeMetric> groupMetricCreator) { if (context == null || context.GroupMetricManager == null || groupMetricCreator == null) { throw new ArgumentNullException(); } _context = context; // create and register metric for blocks var allTradingObjects = context.GetAllTradingObjects(); var metricPerBoard = Enumerable.Range(0, (int)StockBoard.All + 1) .Select(board => { var tradingObjects = allTradingObjects .Where( o => { if (o.Object != null && o.Object is StockName) { StockName stockName = (StockName)o.Object; return((board & (int)stockName.Board) != 0); } return(false); }) .ToArray(); if (tradingObjects.Length == 0) { return(null); } else { return(groupMetricCreator(tradingObjects)); } }) .ToArray(); _boardMetricIndices = metricPerBoard.Select(m => m == null ? -1 : context.GroupMetricManager.RegisterMetric(m)).ToArray(); // register observer _context.GroupMetricManager.RegisterAfterUpdatedMetricsObserver(this); }
public BlockMetricsManager( IEvaluationContext context, Func <IEnumerable <ITradingObject>, IGroupRuntimeMetric> groupMetricCreator) { if (context == null || context.RelationshipManager == null || groupMetricCreator == null) { throw new ArgumentNullException(); } _context = context; // create and register metric for blocks var allTradingObjects = context.GetAllTradingObjects().ToDictionary(o => o.Code); var blocks = context.RelationshipManager.Blocks.ToArray(); var metricPerBlock = blocks .Select(block => { var tradingObjects = context.RelationshipManager.GetStocksInBlock(block) .Where(allTradingObjects.ContainsKey) .Select(stock => allTradingObjects[stock]) .ToArray(); return(groupMetricCreator(tradingObjects)); }) .ToArray(); var metricIndexPerBlock = metricPerBlock.Select(context.GroupMetricManager.RegisterMetric).ToArray(); _blockToMetricIndexMap = Enumerable .Range(0, blocks.Length) .ToDictionary(i => blocks[i], i => metricIndexPerBlock[i]); // register observer _context.GroupMetricManager.RegisterAfterUpdatedMetricsObserver(this); }
public override void Initialize(IEvaluationContext context, IDictionary <ParameterAttribute, object> parameterValues) { base.Initialize(context, parameterValues); _allTradingObjects = context.GetAllTradingObjects().ToDictionary(o => o.Code); }