Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        /// <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;
        }
Ejemplo n.º 3
0
            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;
		}
Ejemplo n.º 6
0
 /// <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));
 }
Ejemplo n.º 13
0
 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));
 }