/// <summary> /// Зарегистрировать индикатор. После регистрации данный индикатор начнет обновляться с использованием переданного источника. /// Если по данному источнику уже есть сохраненные данные, то они будут использованы для инициализации индикатора. /// Если пара индикатор-источник уже была ранее зарегистрирована, то вернется существующий токен. /// </summary> /// <param name="indicator">Индикатор.</param> /// <param name="source">Источник данных для индикатора.</param> /// <returns>Токен, который был зарегистрирован.</returns> public virtual IndicatorToken RegisterIndicator(IIndicator indicator, IIndicatorSource source) { lock (_indicatorUsages.SyncRoot) { var token = new IndicatorToken(indicator, source); var inDict = _indicatorUsages.TryGetValue(token); if (inDict != null) { //найден индикатор, увеличим количество ссылок inDict.Second++; return(inDict.First); } //индикатора нет, добавим lock (_sources.SyncRoot) { var indicators = _sources.SafeAdd(source, key => new IndicatorList(this, key)); token = new IndicatorToken(indicator, indicators.Source) { Container = Container }; _indicatorUsages.Add(token, new RefPair <IndicatorToken, int>(token, 1)); indicators.Add(token); // тут пройдет подписка на события источника и обработка тех значений, которые уже есть в источнике } return(token); } }
/// <summary> /// Создать <see cref="IndicatorToken"/>. /// </summary> /// <param name="indicator">Индикатор.</param> /// <param name="source">Источник данных для индикатора.</param> public IndicatorToken(IIndicator indicator, IIndicatorSource source) { if (indicator == null) { throw new ArgumentNullException("indicator"); } if (source == null) { throw new ArgumentNullException("source"); } Indicator = indicator; Source = source; }
public IndicatorList(IndicatorManager manager, IIndicatorSource source) { if (manager == null) { throw new ArgumentNullException("manager"); } if (source == null) { throw new ArgumentNullException("source"); } _manager = manager; Source = source; Source.NewValue += OnNewValue; }
/// <summary> /// Проверяет равен ли текущий источник переданному. /// </summary> /// <returns>true, если текущий источник равен <paramref name="other"/> в противном случае false.</returns> /// <param name="other">Источник для сравнения.</param> public override bool Equals(IIndicatorSource other) { return base.Equals(other) && _series.Equals(((CandleSeriesIndicatorSource)other)._series); }
/// <summary> /// Проверяет равен ли текущий источник переданному. /// </summary> /// <returns>true, если текущий источник равен <paramref name="other"/> в противном случае false.</returns> /// <param name="other">Источник для сравнения.</param> public override bool Equals(IIndicatorSource other) { return base.Equals(other) && _depth.Equals(((MarketDepthIndicatorSource)other)._depth) && _getPart == ((MarketDepthIndicatorSource)other)._getPart; }
/// <summary> /// Проверяет равен ли текущий источник переданному. /// </summary> /// <returns>true, если текущий источник равен <paramref name="other"/> в противном случае false.</returns> /// <param name="other">Источник для сравнения.</param> public override bool Equals(IIndicatorSource other) { return(base.Equals(other) && _depth.Equals(((MarketDepthIndicatorSource)other)._depth) && _getPart == ((MarketDepthIndicatorSource)other)._getPart); }
/// <summary> /// Проверяет равен ли текущий источник переданному. /// </summary> /// <returns>true, если текущий источник равен <paramref name="other"/> в противном случае false.</returns> /// <param name="other">Источник для сравнения.</param> public override bool Equals(IIndicatorSource other) { return base.Equals(other) && _getPart == ((BaseCandleIndicatorSource)other)._getPart; }
/// <summary> /// Проверяет равен ли текущий источник переданному. /// </summary> /// <returns>true, если текущий источник равен <paramref name="other"/> в противном случае false.</returns> /// <param name="other">Источник для сравнения.</param> public override bool Equals(IIndicatorSource other) { return ReferenceEquals(this, other); }
/// <summary> /// Проверяет равен ли текущий источник переданному. /// </summary> /// <returns>true, если текущий источник равен <paramref name="other"/> в противном случае false.</returns> /// <param name="other">Источник для сравнения.</param> public override bool Equals(IIndicatorSource other) { return base.Equals(other) && _candleManager.Equals(((CandleManagerIndicatorSource)other)._candleManager); }
/// <summary> /// Проверяет равен ли текущий источник переданному. /// </summary> /// <returns>true, если текущий источник равен <paramref name="other"/> в противном случае false.</returns> /// <param name="other">Источник для сравнения.</param> public override bool Equals(IIndicatorSource other) { return(base.Equals(other) && _getPart == ((BaseCandleIndicatorSource)other)._getPart); }
/// <summary> /// Проверяет равен ли текущий источник переданному. /// </summary> /// <returns>true, если текущий источник равен <paramref name="other"/> в противном случае false.</returns> /// <param name="other">Источник для сравнения.</param> public override bool Equals(IIndicatorSource other) { return(ReferenceEquals(this, other)); }
/// <summary> /// Проверяет равен ли текущий источник переданному. /// </summary> /// <returns>true, если текущий источник равен <paramref name="other"/> в противном случае false.</returns> /// <param name="other">Источник для сравнения.</param> public override bool Equals(IIndicatorSource other) { return(base.Equals(other) && _candleManager.Equals(((CandleManagerIndicatorSource)other)._candleManager)); }
private void RaiseNewValueProcessed(IIndicatorSource source, IIndicatorValue value) { NewValueProcessed.SafeInvoke(source, value); }
/// <summary> /// Проверяет равен ли текущий источник переданному. /// </summary> /// <returns>true, если текущий источник равен <paramref name="other"/> в противном случае false.</returns> /// <param name="other">Источник для сравнения.</param> public override bool Equals(IIndicatorSource other) { return(base.Equals(other) && _series.Equals(((CandleSeriesIndicatorSource)other)._series)); }