/// <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); } }
/// <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)); } } }