Пример #1
0
        /// <summary>
        /// Creates and returns a new <see cref="NewOrderList"/> FIX message with contingency orders.
        /// </summary>
        /// <param name="symbolCode">The brokers symbol.</param>
        /// <param name="accountNumber">The account number.</param>
        /// <param name="bracketOrder">The bracket order.</param>
        /// <param name="timeNow">The time now.</param>
        /// <returns>The FIX message.</returns>
        public static NewOrderList CreateWithStopLoss(
            string symbolCode,
            AccountNumber accountNumber,
            BracketOrder bracketOrder,
            ZonedDateTime timeNow)
        {
            Debug.NotEmptyOrWhiteSpace(symbolCode, nameof(symbolCode));
            Debug.NotDefault(timeNow, nameof(timeNow));

            var message = new NewOrderList();

            message.SetField(new ListID(timeNow.TickOfDay.ToString()));
            message.SetField(new TotNoOrders(2));
            message.SetField(new ContingencyType(101));
            message.SetField(new NoOrders(2));
            message.SetField(new BidType(3));
            message.SetField(new TransactTime(timeNow.ToDateTimeUtc()));

            // Order 1
            var entry  = bracketOrder.Entry;
            var order1 = new NewOrderList.NoOrdersGroup();

            order1.SetField(new ClOrdID(entry.Id.Value));
            order1.SetField(new ListSeqNo(0));
            order1.SetField(new ClOrdLinkID("1"));
            order1.SetField(new Account(accountNumber.Value));
            order1.SetField(new Symbol(symbolCode));
            order1.SetField(FxcmMessageHelper.GetFixOrderSide(entry.OrderSide));
            order1.SetField(FxcmMessageHelper.GetFixOrderType(entry.OrderType));
            order1.SetField(FxcmMessageHelper.GetFixTimeInForce(entry.TimeInForce));
            order1.SetField(new OrderQty(entry.Quantity.Value));

            // Add price
            if (entry.Price?.Value != null)
            {
                switch (entry.OrderType)
                {
                case OrderType.Limit:
                    order1.SetField(new Price(entry.Price.Value));
                    break;

                case OrderType.Stop:
                    order1.SetField(new StopPx(entry.Price.Value));
                    break;

                case OrderType.StopLimit:
                    order1.SetField(new StopPx(entry.Price.Value));
                    break;

                case OrderType.Market:
                case OrderType.Undefined:
                    goto default;

                default:
                    throw ExceptionFactory.InvalidSwitchArgument(entry.OrderType, nameof(entry.OrderType));
                }
            }

            // Optional tags
            if (entry.ExpireTime.HasValue)
            {
                var expireTime = FxcmMessageHelper.ToExpireTimeFormat(entry.ExpireTime.Value);
                order1.SetField(new StringField(126, expireTime));
            }

            // Order 2 -----------------------------------------------------------------------------
            var stopLoss = bracketOrder.StopLoss;
            var order2   = new NewOrderList.NoOrdersGroup();

            order2.SetField(new ClOrdID(stopLoss.Id.Value));
            order2.SetField(new ListSeqNo(1));
            order2.SetField(new ClOrdLinkID("2"));
            order2.SetField(new Account(accountNumber.Value));
            order2.SetField(new Symbol(symbolCode));
            order2.SetField(FxcmMessageHelper.GetFixOrderSide(stopLoss.OrderSide));
            order2.SetField(new OrdType(OrdType.STOP));
            order2.SetField(FxcmMessageHelper.GetFixTimeInForce(stopLoss.TimeInForce));
            order2.SetField(new OrderQty(stopLoss.Quantity.Value));

            // Stop-loss orders should always have a stop price
            if (stopLoss.Price?.Value != null)
            {
                order2.SetField(new StopPx(stopLoss.Price.Value));
            }

            message.AddGroup(order1);
            message.AddGroup(order2);

            return(message);
        }
Пример #2
0
 public virtual void onMessage(NewOrderList message, QuickFix.SessionID session)
 {
     throw new QuickFix.UnsupportedMessageType();
 }
Пример #3
0
 private void OnCreateOrderVM(object obj)
 {
     NewOrderList.Add(new OrderViewModel(Sellers, Assortment));
 }