Esempio n. 1
0
        public Message MakeMessage(MarketOrder order, ProviderSession sessionInfo)
        {
            var senderId = GetSenderID(sessionInfo);
            if (string.IsNullOrEmpty(senderId))
            {
                LoggerNoFlood.LogMessageFormatCheckFlood(LogEntryType.Debug,
                    MsgMagicNoSender, 1000 * 60 * 15,
                    "MakeMessage: код отправителя для [{0}] не найден", sessionInfo.SessionName);
                return null;
            }
            var symbol =
                TickerCodeDictionary.Instance.GetTickerNameFormatted(order.brokerOrder.Ticker);
            if (!ConvertToProviderSymbolNaming(ref symbol)) return null;
            //var isInstantOrder = order.EnabledAbsoluteSlippage.HasValue ? order.EnabledAbsoluteSlippage > 0 : false;
            var msg = FixMessage.FixVersion == FixVersion.Fix42
                            ? (Message) new QuickFix42.NewOrderSingle(
                                            new ClOrdID(order.brokerOrder.RequestId.ToString()),
                                            new HandlInst(FixMessageConstant.VALUE_HANDLE_INST_AUTO_NOINTERVENT[0]),
                                            new Symbol(symbol),
                                            new Side((order.brokerOrder.Side > 0
                                                        ? FixMessageConstant.VALUE_SIDE_BUY
                                                        : FixMessageConstant.VALUE_SIDE_SELL)[0]),
                                            new TransactTime(DateTime.Now.ToUniversalTime(), ShowMillisecond),
                                            new OrdType(FixMessageConstant.VALUE_ORDTYPE_MARKET[0]))
                            : FixMessage.FixVersion == FixVersion.Fix43
                                ? (Message) new QuickFix43.NewOrderSingle(
                                                new ClOrdID(order.brokerOrder.RequestId.ToString()),
                                                new HandlInst(FixMessageConstant.VALUE_HANDLE_INST_AUTO_NOINTERVENT[0]),
                                                new Side((order.brokerOrder.Side > 0
                                                                ? FixMessageConstant.VALUE_SIDE_BUY
                                                                : FixMessageConstant.VALUE_SIDE_SELL)[0]),
                                                new TransactTime(DateTime.Now.ToUniversalTime(), ShowMillisecond),
                                                new OrdType(FixMessageConstant.VALUE_ORDTYPE_MARKET[0]))
                                : new QuickFix44.NewOrderSingle(
                                        new ClOrdID(order.brokerOrder.RequestId.ToString()),
                                        new Side((order.brokerOrder.Side > 0
                                                    ? FixMessageConstant.VALUE_SIDE_BUY
                                                    : FixMessageConstant.VALUE_SIDE_SELL)[0]),
                                        new TransactTime(DateTime.Now.ToUniversalTime(), ShowMillisecond),
                                        new OrdType(FixMessageConstant.VALUE_ORDTYPE_MARKET[0]));

            msg.setField(new Symbol(symbol));
            msg.setField(new OrderQty(order.brokerOrder.Volume));
            // !! пока торгуемый "продукт" вбит гвоздями
            var product = FixMessageConstant.VALUE_PRODUCT_CURRENCY.ToInt();
            msg.setField(new Product(product));
            if (!omitAccount) msg.setField(new Account(sessionInfo.HedgingAccount));
            if (order.brokerOrder.OrderPricing == OrderPricing.Instant && order.brokerOrder.RequestedPrice.HasValue)
                if (order.brokerOrder.RequestedPrice.Value > 0)
                    msg.setField(new Price((double)order.brokerOrder.RequestedPrice));

            msg.setField(new TimeInForce(FixMessageConstant.VALUE_TIME_IN_FORCE_FILL_OR_KILL[0]));
            // !! ExecInst - на TradingFloor - да бог его знает
            // msg.setField(new ExecInst(FixMessageConstant.));
            // msg.setField(new FutSettDate(DateTime.Now.ToUniversalTime().ToString("yyyyMMdd")));
            // !! onBehalfID не заполняется
            // msg.getHeader().setField(new OnBehalfOfCompID(onBehalfId));
            // сформировать заголовок
            msg.getHeader().setField(new SenderCompID(senderId));
            msg.getHeader().setField(new TargetCompID(sessionInfo.SessionName));
            // !! формируется непосредственно при отправке
            // msg.getHeader().setField(new SendingTime(DateTime.Now.ToUniversalTime(), false));
            return msg;
        }
Esempio n. 2
0
 private string GetSenderID(ProviderSession sessionInfo)
 {
     var targetID = sessionInfo.SessionName;
     return !string.IsNullOrEmpty(sessionInfo.SenderCompId)
                ? sessionInfo.SenderCompId
                : senderIdByTargetId.ContainsKey(targetID)
                      ? senderIdByTargetId[targetID]
                      : senderIdByTargetId.ContainsKey("")
                            ? senderIdByTargetId[""]
                            : string.Empty;
 }