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)); }
protected override bool ReadOrderCondition(IFixReader reader, FixTags tag, Func <OrderCondition> getCondition) { return(reader.ReadOrderCondition(tag, TimeHelper.Moscow, TransactionSession.DateTimeFormat, () => (QuikOrderCondition)getCondition())); }
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); } }
/// <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())); }
protected override bool ReadOrderCondition(IFixReader reader, FixTags tag, Func<OrderCondition> getCondition) { return reader.ReadOrderCondition(tag, TimeHelper.Moscow, TransactionSession.DateTimeFormat, () => (QuikOrderCondition)getCondition()); }
/// <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)); } }
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()); }
/// <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())); }
/// <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()); }
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); } }