private void ProcessOrderReplaceMessage(OrderReplaceMessage replaceMsg)
        {
            var condition = (SterlingOrderCondition)replaceMsg.Condition;

            var replaceOrder = new STIOrder
            {
                Account     = replaceMsg.PortfolioName,
                Quantity    = (int)replaceMsg.Volume,
                Display     = (int)(replaceMsg.VisibleVolume ?? replaceMsg.Volume),
                ClOrderID   = replaceMsg.TransactionId.To <string>(),
                LmtPrice    = (double)replaceMsg.Price,
                Symbol      = replaceMsg.SecurityId.SecurityCode,
                Destination = replaceMsg.SecurityId.BoardCode,
                Tif         = replaceMsg.TimeInForce.ToSterlingTif(replaceMsg.TillDate),
                PriceType   = replaceMsg.OrderType.ToSterlingPriceType(condition),
                User        = replaceMsg.Comment
            };

            if (replaceMsg.TillDate != null && replaceMsg.TillDate != DateTimeOffset.MaxValue)
            {
                replaceOrder.EndTime = replaceMsg.TillDate.Value.ToString("yyyyMMdd");
            }

            if (replaceMsg.Currency != null)
            {
                replaceOrder.Currency = replaceMsg.Currency.ToString();
            }

            replaceOrder.ReplaceOrder(0, replaceMsg.OldTransactionId.To <string>());
        }
Esempio n. 2
0
        public static Transaction CreateMoveTransaction(this OrderReplaceMessage message, IDictionary <string, RefPair <SecurityTypes, string> > securityClassInfo)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            if (message.OrderType == OrderTypes.ExtRepo || message.OrderType == OrderTypes.Repo || message.OrderType == OrderTypes.Rps)
            {
                throw new ArgumentOutOfRangeException(nameof(message), message.Type, LocalizedStrings.Str1847);
            }

            if (message.OldOrderId == null)
            {
                throw new InvalidOperationException(LocalizedStrings.Str2252Params.Put(message.OldTransactionId));
            }

            var transaction =
                new Transaction(TransactionTypes.ReRegister, message)
                .SetAction(TransactionActions.MoveOrders)
                .SetSecurity(message, securityClassInfo)
                .SetFortsMode(message.Volume == 0 ? 0 : 1)
                .SetFirstOrderId(message.OldOrderId.Value)
                .SetFirstOrderPrice(message.Price)
                .SetFirstVolume((int)message.Volume);

            if (!message.BrokerCode.IsEmpty())
            {
                transaction.SetFirmId(message.BrokerCode);
            }

            return(transaction);
        }
        private void SendReplaceOrderError(OrderReplaceMessage replaceMessage, Exception error)
        {
            SendOutMessage(new ExecutionMessage
            {
                SecurityId            = replaceMessage.SecurityId,
                OriginalTransactionId = replaceMessage.TransactionId,
                //OrderId = replaceMessage.OldOrderId,
                ExecutionType = ExecutionTypes.Transaction,
                OrderState    = OrderStates.Failed,
                //IsCancelled = true,
                Error        = error,
                HasOrderInfo = true,
                ServerTime   = CurrentTime,
            });

            //SendOutMessage(new ExecutionMessage
            //{
            //	SecurityId = replaceMessage.SecurityId,
            //	OriginalTransactionId = replaceMessage.TransactionId,
            //	ExecutionType = ExecutionTypes.Transaction,
            //	OrderState = OrderStates.Failed,
            //	Error = error,
            //	HasOrderInfo = true,
            //	ServerTime = CurrentTime,
            //});
        }
        private void ProcessReplaceMessage(OrderReplaceMessage replaceMsg)
        {
            _smartIdOrders.SyncDo(d =>
            {
                AssociateSmartOrderId(replaceMsg.TransactionId, replaceMsg.OldOrderStringId);

                // если заявка была первоначально зарегистрирована не через SmartTrader
                if (!d.Contains(replaceMsg.OldOrderStringId, replaceMsg.OldTransactionId))
                {
                    d.Add(replaceMsg.OldOrderStringId, replaceMsg.OldTransactionId);
                }
            });

            //this.AddOrderInfoLog(newOrder, "ReRegisterOrder", () => "ReRegisterOrder(FORTS), old tid={0}, id={1}, sid={2}".Put(oldOrder.TransactionId, oldOrder.Id, oldOrder.GetSmartId()));

            Session.ReRegisterOrder(replaceMsg.PortfolioName, (double)replaceMsg.Price, replaceMsg.OldOrderStringId);
        }
Esempio n. 5
0
        private void ProcessOrderReplace(OrderReplaceMessage message)
        {
            var draft = _client.CreateDraft(_orderTransactions[message.OldTransactionId]);

            draft.Price    = (double)message.Price;
            draft.Quantity = (int)message.Volume;

            var invalid = draft.GetInvalidParts();

            if (invalid != OrderParts.None)
            {
                throw new OpenECryException(LocalizedStrings.Str2556Params.Put(invalid));
            }

            var newOrder = _client.ModifyOrder(draft);

            _orderTransactions.Add(newOrder, message.TransactionId);
            ProcessOrder(newOrder, message.TransactionId);
        }
Esempio n. 6
0
        private void ProcessOrderReplaceMessage(OrderReplaceMessage message)
        {
            var condition = (OandaOrderCondition)message.Condition;

            if (message.OldOrderId == null)
            {
                throw new InvalidOperationException(LocalizedStrings.Str2252Params.Put(message.OldTransactionId));
            }

            var response = _restClient.ModifyOrder(GetAccountId(message.PortfolioName),
                                                   message.OldOrderId.Value,
                                                   (int)message.Volume,
                                                   GetExpiryTime(message),
                                                   message.Price,
                                                   condition?.LowerBound,
                                                   condition?.UpperBound,
                                                   condition?.StopLossOffset,
                                                   condition?.TakeProfitOffset,
                                                   condition?.TrailingStopLossOffset);

            SendOutMessage(new ExecutionMessage
            {
                ExecutionType         = ExecutionTypes.Transaction,
                OriginalTransactionId = message.TransactionId,
                OrderId       = message.OldOrderId,
                OrderState    = OrderStates.Done,
                ServerTime    = response.Time.FromOanda(),
                PortfolioName = message.PortfolioName,
                HasOrderInfo  = true,
            });

            SendOutMessage(new ExecutionMessage
            {
                ExecutionType         = ExecutionTypes.Transaction,
                OriginalTransactionId = message.TransactionId,
                OrderId       = response.Id,
                OrderState    = OrderStates.Active,
                ServerTime    = response.Time.FromOanda(),
                PortfolioName = message.PortfolioName,
                HasOrderInfo  = true,
            });
        }
        private void ProcessReplaceMessage(OrderReplaceMessage replaceMsg)
        {
            var id = _orders.TryGetKey(replaceMsg.OldTransactionId);

            if (id == 0)
            {
                throw new InvalidOperationException(LocalizedStrings.Str3551Params.Put(replaceMsg.OldTransactionId));
            }

            var result = SendCommand(new MoveOrderMessage
            {
                TransactionId = id,
                Price         = replaceMsg.Price,
                Quantity      = (int)replaceMsg.Volume,
                MoveFlag      = replaceMsg.Volume == 0 ? MoveOrderFlag.ChangeQuantity : MoveOrderFlag.DontChangeQuantity,
            });

            _orders.Add(result.TransactionId, replaceMsg.TransactionId);
            _ordersTypes.Add(replaceMsg.TransactionId, OrderTypes.Limit);
        }
        private void SendReplaceOrderError(OrderReplaceMessage replaceMessage, Exception error)
        {
            SendOutMessage(new ExecutionMessage
            {
                SecurityId            = replaceMessage.SecurityId,
                OriginalTransactionId = replaceMessage.OldTransactionId,
                OrderId       = replaceMessage.OldOrderId,
                ExecutionType = ExecutionTypes.Order,
                OrderState    = OrderStates.Failed,
                IsCancelled   = true,
                Error         = error
            });

            SendOutMessage(new ExecutionMessage
            {
                SecurityId            = replaceMessage.SecurityId,
                OriginalTransactionId = replaceMessage.TransactionId,
                ExecutionType         = ExecutionTypes.Order,
                OrderState            = OrderStates.Failed,
                Error = error
            });
        }
Esempio n. 9
0
        public static Transaction CreateMoveTransaction(this IMessageSessionHolder sessionHolder, OrderReplaceMessage message)
        {
            if (sessionHolder == null)
            {
                throw new ArgumentNullException("sessionHolder");
            }

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

            if (message.OrderType == OrderTypes.ExtRepo || message.OrderType == OrderTypes.Repo || message.OrderType == OrderTypes.Rps)
            {
                throw new ArgumentOutOfRangeException("message", message.Type, LocalizedStrings.Str1847);
            }

            return
                (new Transaction(TransactionTypes.ReRegister, message)
                 .SetAction(TransactionActions.MoveOrders)
                 .SetSecurity(sessionHolder, message)
                 .SetFortsMode(message.Volume == 0 ? 0 : 1)
                 .SetFirstOrderId(message.OldOrderId)
                 .SetFirstOrderPrice(message.Price)
                 .SetFirstVolume((int)message.Volume));
        }
Esempio n. 10
0
        private void ProcessReplaceMessage(OrderReplaceMessage replaceMsg)
        {
            //this.AddOrderInfoLog(newOrder, "ReRegisterOrder", () => "ReRegisterOrder(FORTS), old tid={0}, id={1}, sid={2}".Put(oldOrder.TransactionId, oldOrder.Id, oldOrder.GetSmartId()));

            _wrapper.ReRegisterOrder(replaceMsg.PortfolioName, (double)replaceMsg.Price, replaceMsg.OldOrderStringId);
        }
Esempio n. 11
0
        private ModifyOrderParams FillModifyOrderParams(ModifyOrderParams orderParams, OrderReplaceMessage replaceMsg)
        {
            orderParams.Symbol   = replaceMsg.SecurityId.SecurityCode;
            orderParams.Exchange = replaceMsg.SecurityId.BoardCode;
            orderParams.Account  = _accounts[replaceMsg.PortfolioName];
            orderParams.UserMsg  = replaceMsg.Comment;
            //orderParams.UserTag = replaceMsg.UserOrderId;
            orderParams.Qty       = (int)replaceMsg.Volume;
            orderParams.EntryType = Constants.ORDER_ENTRY_TYPE_AUTO;
            orderParams.OrderNum  = replaceMsg.OldOrderStringId;

            return(orderParams);
        }
Esempio n. 12
0
        private void ProcessReplaceMessage(OrderReplaceMessage replaceMsg)
        {
            ModifyOrderParams orderParams;

            switch (replaceMsg.OrderType)
            {
            case OrderTypes.Limit:
            {
                orderParams = FillModifyOrderParams(new ModifyOrderParams
                    {
                        Price     = (double)replaceMsg.Price,
                        OrderType = Constants.ORDER_TYPE_LIMIT,
                    }, replaceMsg);

                break;
            }

            case OrderTypes.Conditional:
            {
                var condition = (RithmicOrderCondition)replaceMsg.Condition;

                var triggerPrice = condition.TriggerPrice;

                if (triggerPrice == null)
                {
                    throw new InvalidOperationException(LocalizedStrings.Str3494Params.Put(replaceMsg.TransactionId));
                }

                if (replaceMsg.Price == 0)
                {
                    orderParams = FillModifyOrderParams(new ModifyOrderParams
                        {
                            TriggerPrice = (double)triggerPrice,
                            OrderType    = Constants.ORDER_TYPE_STOP_MARKET,
                        }, replaceMsg);
                }
                else
                {
                    orderParams = FillModifyOrderParams(new ModifyOrderParams
                        {
                            Price        = (double)replaceMsg.Price,
                            TriggerPrice = (double)triggerPrice,
                            OrderType    = Constants.ORDER_TYPE_STOP_LIMIT,
                        }, replaceMsg);
                }

                break;
            }

            case OrderTypes.Market:
            case OrderTypes.Repo:
            case OrderTypes.ExtRepo:
            case OrderTypes.Rps:
            case OrderTypes.Execute:
                throw new NotSupportedException(LocalizedStrings.Str3495Params.Put(replaceMsg.TransactionId, replaceMsg.OrderType));

            default:
                throw new ArgumentOutOfRangeException();
            }

            _client.Session.modifyOrderList(new List <ModifyOrderParams> {
                orderParams
            }.AsReadOnly());
        }