コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        public override void Initialize(IEvaluationContext context, IDictionary <ParameterAttribute, object> parameterValues)
        {
            base.Initialize(context, parameterValues);

            _allTradingObjects = context.GetAllTradingObjects().ToDictionary(o => o.Code);
        }