Пример #1
0
            protected override bool?OnProcess(FixSession session, string msgType, IFixReader reader)
            {
                switch (msgType)
                {
                case QuikFixMessages.NewStopOrderSingle:
                {
                    var condition = new QuikOrderCondition();

                    var dto = TimeHelper.Moscow.BaseUtcOffset;

                    var regMsg = reader.ReadOrderRegisterMessage(dto,
                                                                 tag => reader.ReadOrderCondition(tag, dto, condition));

                    if (regMsg == null)
                    {
                        return(null);
                    }

                    regMsg.TransactionId = CreateTransactionId(session, regMsg.TransactionId.To <string>());
                    regMsg.Condition     = condition;

                    RaiseNewOutMessage(regMsg);
                    return(true);
                }
                }

                return(base.OnProcess(session, msgType, reader));
            }
        /// <summary>
        /// Метод вызывается при обработке полученного сообщения.
        /// </summary>
        /// <param name="msgType">Тип FIX сообщения.</param>
        /// <param name="reader">Читатель данных, записанных в формате FIX протокола.</param>
        /// <returns>Успешно ли обработаны данные.</returns>
        protected override bool?ProcessTransactionMessage(string msgType, IFixReader reader)
        {
            switch (msgType)
            {
            case QuikFixMessages.StopOrderExecutionReport:
            {
                var condition = new QuikOrderCondition();

                var executions = reader.ReadExecutionMessage(this,
                                                             tag => reader.ReadOrderCondition(tag, UtcOffset, condition));

                if (executions == null)
                {
                    return(null);
                }

                var exec = executions.First();
                exec.Condition = condition;

                SendOutMessage(exec);

                return(true);
            }
            }

            return(base.ProcessTransactionMessage(msgType, reader));
        }
Пример #3
0
 protected override bool ReadOrderCondition(IFixReader reader, FixTags tag, Func <OrderCondition> getCondition)
 {
     return(reader.ReadOrderCondition(tag, TimeHelper.Moscow, TransactionSession.DateTimeFormat, () => (QuikOrderCondition)getCondition()));
 }
Пример #4
0
        public static bool ReadOrderCondition(this IFixReader reader, FixTags tag, TimeZoneInfo timeZone, string dateTimeFormat, Func <QuikOrderCondition> getCondition)
        {
            if (getCondition == null)
            {
                throw new ArgumentNullException(nameof(getCondition));
            }

            switch ((QuikFixTags)tag)
            {
            case QuikFixTags.Type:
                getCondition().Type = (QuikOrderConditionTypes)reader.ReadInt();
                return(true);

            case QuikFixTags.StopPriceCondition:
                getCondition().StopPriceCondition = (QuikStopPriceConditions)reader.ReadInt();
                return(true);

            case QuikFixTags.ConditionOrderSide:
                getCondition().ConditionOrderSide = (Sides)reader.ReadInt();
                return(true);

            case QuikFixTags.LinkedOrderCancel:
                getCondition().LinkedOrderCancel = reader.ReadBool();
                return(true);

            case QuikFixTags.Result:
                getCondition().Result = (QuikOrderConditionResults)reader.ReadInt();
                return(true);

            case QuikFixTags.OtherSecurityCode:
                getCondition().OtherSecurityId = new SecurityId {
                    SecurityCode = reader.ReadString()
                };
                return(true);

            case QuikFixTags.StopPrice:
                getCondition().StopPrice = reader.ReadDecimal();
                return(true);

            case QuikFixTags.StopLimitPrice:
                getCondition().StopLimitPrice = reader.ReadDecimal();
                return(true);

            case QuikFixTags.IsMarketStopLimit:
                getCondition().IsMarketStopLimit = reader.ReadBool();
                return(true);

            case QuikFixTags.ActiveTimeFrom:
                if (getCondition().ActiveTime == null)
                {
                    getCondition().ActiveTime = new Range <DateTimeOffset>();
                }

                getCondition().ActiveTime.Min = reader.ReadDateTime(dateTimeFormat).ToDateTimeOffset(timeZone);
                return(true);

            case QuikFixTags.ActiveTimeTo:
                if (getCondition().ActiveTime == null)
                {
                    getCondition().ActiveTime = new Range <DateTimeOffset>();
                }

                getCondition().ActiveTime.Max = reader.ReadDateTime(dateTimeFormat).ToDateTimeOffset(timeZone);
                return(true);

            case QuikFixTags.ConditionOrderId:
                getCondition().ConditionOrderId = reader.ReadLong();
                return(true);

            case QuikFixTags.ConditionOrderPartiallyMatched:
                getCondition().ConditionOrderPartiallyMatched = reader.ReadBool();
                return(true);

            case QuikFixTags.ConditionOrderUseMatchedBalance:
                getCondition().ConditionOrderUseMatchedBalance = reader.ReadBool();
                return(true);

            case QuikFixTags.LinkedOrderPrice:
                getCondition().LinkedOrderPrice = reader.ReadDecimal();
                return(true);

            case QuikFixTags.Offset:
                getCondition().Offset = reader.ReadString().ToUnit();
                return(true);

            case QuikFixTags.StopSpread:
                getCondition().Spread = reader.ReadString().ToUnit();
                return(true);

            case QuikFixTags.IsMarketTakeProfit:
                getCondition().IsMarketTakeProfit = reader.ReadBool();
                return(true);

            default:
                return(false);
            }
        }
Пример #5
0
 /// <summary>
 /// Прочитать условие заявки <see cref="OrderCondition"/>.
 /// </summary>
 /// <param name="reader">Читатель данных.</param>
 /// <param name="tag">Тэг.</param>
 /// <param name="getCondition">Функция, возвращающая условие заявки.</param>
 /// <returns>Успешно ли обработаны данные.</returns>
 protected override bool ReadOrderCondition(IFixReader reader, FixTags tag, Func <OrderCondition> getCondition)
 {
     return(reader.ReadOrderCondition(tag, TimeZone, TimeStampFormat, () => (QuikOrderCondition)getCondition()));
 }
Пример #6
0
			protected override bool ReadOrderCondition(IFixReader reader, FixTags tag, Func<OrderCondition> getCondition)
			{
				return reader.ReadOrderCondition(tag, TimeHelper.Moscow, TransactionSession.DateTimeFormat, () => (QuikOrderCondition)getCondition());
			}
Пример #7
0
        /// <inheritdoc />
        protected override bool?OnRead(IFixReader reader, string msgType, Action <Message> messageHandler)
        {
            switch (msgType)
            {
            // reading custom CFH message (not compatible with FIX standard)
            case CfhFixMessages.AccountInfo:
            {
                string        account     = null;
                var           sendingTime = default(DateTimeOffset);
                decimal?      closedPnL   = null;
                decimal?      openPnL     = null;
                decimal?      balance     = null;
                CurrencyTypes?currency    = null;

                var isOk = reader.ReadMessage(tag =>
                    {
                        switch (tag)
                        {
                        case FixTags.Account:
                            account = reader.ReadString();
                            return(true);

                        case FixTags.SendingTime:
                            sendingTime = reader.ReadUtc(TimeStampParser);
                            return(true);

                        case CfhFixTags.ClosedPnL:
                            closedPnL = reader.ReadDecimal();
                            return(true);

                        case CfhFixTags.OpenPnL:
                            openPnL = reader.ReadDecimal();
                            return(true);

                        case CfhFixTags.Balance:
                            balance = reader.ReadDecimal();
                            return(true);

                        case FixTags.Currency:
                            currency = reader.ReadString().FromMicexCurrencyName(this.AddErrorLog);
                            return(true);

                        default:
                            return(false);
                        }
                    });

                if (!isOk)
                {
                    return(null);
                }

                var msg = new PositionChangeMessage
                {
                    SecurityId    = SecurityId.Money,
                    PortfolioName = account,
                    ServerTime    = sendingTime
                }
                .TryAdd(PositionChangeTypes.RealizedPnL, closedPnL, true)
                .TryAdd(PositionChangeTypes.UnrealizedPnL, openPnL, true)
                .TryAdd(PositionChangeTypes.CurrentValue, balance, true);

                if (currency != null)
                {
                    msg.Add(PositionChangeTypes.Currency, currency.Value);
                }

                messageHandler(msg);
                return(true);
            }

            default:
                return(base.OnRead(reader, msgType, messageHandler));
            }
        }
Пример #8
0
			protected override bool ReadOrderCondition(IFixReader reader, FixTags tag, Func<OrderCondition> getCondition)
			{
				return reader.ReadOrderCondition(tag, TimeHelper.Moscow.BaseUtcOffset, () => (QuikOrderCondition)getCondition());
			}
		/// <summary>
		/// Прочитать условие регистрации заявки <see cref="OrderRegisterMessage.Condition"/>.
		/// </summary>
		/// <param name="reader">Читатель данных.</param>
		/// <param name="tag">Тэг.</param>
		/// <param name="getCondition">Функция, возвращающая условие заявки.</param>
		/// <returns>Успешно ли обработаны данные.</returns>
		protected override bool ReadOrderCondition(IFixReader reader, FixTags tag, Func<OrderCondition> getCondition)
		{
			return reader.ReadOrderCondition(tag, UtcOffset, DateTimeFormat, () => (QuikOrderCondition)getCondition());
		}
Пример #10
0
 /// <summary>
 /// Прочитать условие регистрации заявки <see cref="OrderRegisterMessage.Condition"/>.
 /// </summary>
 /// <param name="reader">Читатель данных.</param>
 /// <param name="tag">Тэг.</param>
 /// <param name="getCondition">Функция, возвращающая условие заявки.</param>
 /// <returns>Успешно ли обработаны данные.</returns>
 protected override bool ReadOrderCondition(IFixReader reader, FixTags tag, Func <OrderCondition> getCondition)
 {
     return(reader.ReadOrderCondition(tag, UtcOffset, DateTimeFormat, () => (QuikOrderCondition)getCondition()));
 }
Пример #11
0
		/// <summary>
		/// Прочитать условие регистрации заявки <see cref="OrderRegisterMessage.Condition"/>.
		/// </summary>
		/// <param name="reader">Читатель данных.</param>
		/// <param name="tag">Тэг.</param>
		/// <param name="getCondition">Функция, возвращающая условие заявки.</param>
		/// <returns>Успешно ли обработаны данные.</returns>
		protected override bool ReadOrderCondition(IFixReader reader, FixTags tag, Func<OrderCondition> getCondition)
		{
			return reader.ReadOrderCondition(tag, TimeZone, TimeStampFormat, () => (QuikOrderCondition)getCondition());
		}
Пример #12
0
        public static bool ReadOrderCondition(this IFixReader reader, FixTags tag, TimeSpan dateTimeOffset, QuikOrderCondition condition)
        {
            switch ((QuikFixTags)tag)
            {
            case QuikFixTags.Type:
                condition.Type = (QuikOrderConditionTypes)reader.ReadInt();
                return(true);

            case QuikFixTags.StopPriceCondition:
                condition.StopPriceCondition = (QuikStopPriceConditions)reader.ReadInt();
                return(true);

            case QuikFixTags.ConditionOrderSide:
                condition.ConditionOrderSide = (Sides)reader.ReadInt();
                return(true);

            case QuikFixTags.LinkedOrderCancel:
                condition.LinkedOrderCancel = reader.ReadBool();
                return(true);

            case QuikFixTags.Result:
                condition.Result = (QuikOrderConditionResults)reader.ReadInt();
                return(true);

            case QuikFixTags.OtherSecurityCode:
                condition.OtherSecurityId = new SecurityId {
                    SecurityCode = reader.ReadString()
                };
                return(true);

            case QuikFixTags.StopPrice:
                condition.StopPrice = reader.ReadDecimal();
                return(true);

            case QuikFixTags.StopLimitPrice:
                condition.StopLimitPrice = reader.ReadDecimal();
                return(true);

            case QuikFixTags.IsMarketStopLimit:
                condition.IsMarketStopLimit = reader.ReadBool();
                return(true);

            case QuikFixTags.ActiveTimeFrom:
                if (condition.ActiveTime == null)
                {
                    condition.ActiveTime = new Range <DateTimeOffset>();
                }

                condition.ActiveTime.Min = reader.ReadDateTime().ApplyTimeZone(dateTimeOffset);
                return(true);

            case QuikFixTags.ActiveTimeTo:
                if (condition.ActiveTime == null)
                {
                    condition.ActiveTime = new Range <DateTimeOffset>();
                }

                condition.ActiveTime.Max = reader.ReadDateTime().ApplyTimeZone(dateTimeOffset);
                return(true);

            case QuikFixTags.ConditionOrderId:
                condition.ConditionOrderId = reader.ReadLong();
                return(true);

            case QuikFixTags.ConditionOrderPartiallyMatched:
                condition.ConditionOrderPartiallyMatched = reader.ReadBool();
                return(true);

            case QuikFixTags.ConditionOrderUseMatchedBalance:
                condition.ConditionOrderUseMatchedBalance = reader.ReadBool();
                return(true);

            case QuikFixTags.LinkedOrderPrice:
                condition.LinkedOrderPrice = reader.ReadDecimal();
                return(true);

            case QuikFixTags.Offset:
                condition.Offset = reader.ReadString().ToUnit();
                return(true);

            case QuikFixTags.StopSpread:
                condition.Spread = reader.ReadString().ToUnit();
                return(true);

            case QuikFixTags.IsMarketTakeProfit:
                condition.IsMarketTakeProfit = reader.ReadBool();
                return(true);

            default:
                return(false);
            }
        }