コード例 #1
0
        /// <summary>
        /// Добавить первый уровень маркет-данных.
        /// </summary>
        /// <param name="security">Инструмент.</param>
        /// <param name="message">Первый уровень маркет-данных.</param>
        protected virtual void AddLevel1Change(Security security, Level1ChangeMessage message)
        {
            if (security == null)
            {
                throw new ArgumentNullException("security");
            }

            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            message = (Level1ChangeMessage)message.Clone();

            foreach (var change in message.Changes.ToArray())
            {
                if (!_task.Settings.SupportedLevel1Fields.Contains(change.Key))
                {
                    message.Changes.Remove(change.Key);
                }
            }

            if (message.Changes.Count > 0)
            {
                _level1Buffer.Add(security, message);
            }
        }
コード例 #2
0
		private void ProcessLevel1ChangeMessage(Level1ChangeMessage message)
		{
			var security = LookupSecurity(message.SecurityId);

			if (UpdateSecurityByLevel1)
			{
				security.ApplyChanges(message);
				RaiseSecurityChanged(security);
			}

			var values = GetSecurityValues(security);

			lock (values.SyncRoot)
			{
				foreach (var change in message.Changes)
					values[(int)change.Key] = change.Value;	
			}

			RaiseValuesChanged(security, message.Changes, message.ServerTime, message.LocalTime);

			if (CreateDepthFromLevel1)
			{
				// генерация стакана из Level1
				var quoteMsg = GetBuilder(message.SecurityId).Process(message);

				if (quoteMsg != null)
				{
					ProcessQuotesMessage(security, quoteMsg, true);
					CreateAssociatedSecurityQuotes(quoteMsg);
				}
			}

			if (CreateAssociatedSecurity && !IsAssociated(message.SecurityId.BoardCode))
			{
				// обновление BestXXX для ALL из конкретных тикеров
				var clone = (Level1ChangeMessage)message.Clone();
				clone.SecurityId = CreateAssociatedId(clone.SecurityId);
				ProcessLevel1ChangeMessage(clone);
			}
		}