示例#1
0
        /// <summary>
        /// Check for new splits
        /// </summary>
        /// <param name="eventArgs">The new tradable day event arguments</param>
        /// <returns>New split event if any</returns>
        public IEnumerable <BaseData> GetEvents(NewTradableDateEventArgs eventArgs)
        {
            if (_config.Symbol == eventArgs.Symbol &&
                _mapFile.HasData(eventArgs.Date))
            {
                var factor = _splitFactor;
                if (factor != null)
                {
                    var close = AuxiliaryDataEnumerator.GetRawClose(
                        eventArgs.LastBaseData?.Price ?? 0,
                        _config);
                    _splitFactor = null;
                    yield return(new Split(
                                     eventArgs.Symbol,
                                     eventArgs.Date,
                                     close,
                                     factor.Value,
                                     SplitType.SplitOccurred));
                }

                decimal splitFactor;
                if (_factorFile.HasSplitEventOnNextTradingDay(eventArgs.Date, out splitFactor))
                {
                    _splitFactor = splitFactor;
                    yield return(new Split(
                                     eventArgs.Symbol,
                                     eventArgs.Date,
                                     AuxiliaryDataEnumerator.GetRawClose(
                                         eventArgs.LastBaseData?.Price ?? 0,
                                         _config),
                                     splitFactor,
                                     SplitType.Warning));
                }
            }
        }
        /// <summary>
        /// Check for dividends and emit them into the aux data queue
        /// </summary>
        private void CheckForSplit(DateTime date)
        {
            if (_splitFactor != null)
            {
                var close = GetRawClose();
                var split = new Split(_config.Symbol, date, close, _splitFactor.Value);
                _auxiliaryData.Enqueue(split);
                _splitFactor = null;
            }

            decimal splitFactor;

            if (_factorFile.HasSplitEventOnNextTradingDay(date, out splitFactor))
            {
                _splitFactor = splitFactor;
            }
        }
        /// <summary>
        /// Check for dividends and emit them into the aux data queue
        /// </summary>
        private void CheckForSplit(DateTime date)
        {
            var factor = _splitFactor;

            if (factor != null)
            {
                var close = GetRawClose();
                var split = new Split(_config.Symbol, date, close, factor.Value, SplitType.SplitOccurred);
                _auxiliaryData.Enqueue(split);
                _splitFactor = null;
            }

            decimal splitFactor;

            if (_factorFile.HasSplitEventOnNextTradingDay(date, out splitFactor))
            {
                _splitFactor = splitFactor;
                var split = new Split(_config.Symbol, date, GetRawClose(), splitFactor, SplitType.Warning);
                _auxiliaryData.Enqueue(split);
            }
        }
示例#4
0
        /// <summary>
        /// Check for new splits
        /// </summary>
        /// <param name="eventArgs">The new tradable day event arguments</param>
        /// <returns>New split event if any</returns>
        public IEnumerable <BaseData> GetEvents(NewTradableDateEventArgs eventArgs)
        {
            if (_config.Symbol == eventArgs.Symbol &&
                _mapFile.HasData(eventArgs.Date))
            {
                var factor = _splitFactor;
                if (factor != null)
                {
                    var close = _referencePrice;
                    if (close == 0)
                    {
                        throw new InvalidOperationException($"Zero reference price for {_config.Symbol} split at {eventArgs.Date}");
                    }

                    _splitFactor    = null;
                    _referencePrice = 0;
                    yield return(new Split(
                                     eventArgs.Symbol,
                                     eventArgs.Date,
                                     close,
                                     factor.Value,
                                     SplitType.SplitOccurred));
                }

                decimal splitFactor;
                decimal referencePrice;
                if (_factorFile.HasSplitEventOnNextTradingDay(eventArgs.Date, out splitFactor, out referencePrice))
                {
                    _splitFactor    = splitFactor;
                    _referencePrice = referencePrice;
                    yield return(new Split(
                                     eventArgs.Symbol,
                                     eventArgs.Date,
                                     eventArgs.LastRawPrice ?? 0,
                                     splitFactor,
                                     SplitType.Warning));
                }
            }
        }