/// <summary>
        ///     Sets a new order Buy Limit.
        /// </summary>
        private static void OrdBuyLimit(int bar, int orderIf, int toPos, double lots, double price, OrderSender sender,
                                        OrderOrigin origin, string note)
        {
            int sessionOrder = session[bar].Orders;
            Order order = session[bar].Order[sessionOrder] = new Order();

            order.OrdNumb = SentOrders;
            order.OrdDir = OrderDirection.Buy;
            order.OrdType = OrderType.Limit;
            order.OrdCond = orderIf > 0 ? OrderCondition.If : OrderCondition.Norm;
            order.OrdStatus = OrderStatus.Confirmed;
            order.OrdIf = orderIf;
            order.OrdPos = toPos;
            order.OrdLots = lots;
            order.OrdPrice = Math.Round(price, InstrProperties.Digits);
            order.OrdPrice2 = 0;
            order.OrdSender = sender;
            order.OrdOrigin = origin;
            order.OrdNote = note;

            ordCoord[SentOrders].Bar = bar;
            ordCoord[SentOrders].Ord = sessionOrder;
            session[bar].Orders++;
            SentOrders++;
        }
Пример #2
0
        private void PlazaControllerOnNewMyOrderEvent(Order order)
        {
            lock (_lockerUpdateOrders)
            {
                if (_orders != null)
                {
                    Order oldOrder = _orders.Find(order1 => order1.NumberUser == order.NumberUser);

                    if (oldOrder != null && order.Price != 0)
                    {
                        order.Volume        = oldOrder.Volume;
                        order.VolumeExecute = oldOrder.Volume - order.VolumeExecute;
                    }
                }

                if (_securities == null)
                {
                    if (order.State != OrderStateType.Activ)
                    {
                        return;
                    }
                    OrderSender sender = new OrderSender();
                    sender.Order             = order;
                    sender.UpdeteOrderEvent += PlazaControllerOnNewMyOrderEvent;
                    Thread worker = new Thread(sender.Sand);
                    worker.CurrentCulture = new CultureInfo("ru-RU");
                    worker.IsBackground   = true;
                    worker.Start();
                    return;
                }

                Security security = _securities.Find(security1 => security1.NameId == order.SecurityNameCode);

                if (order.SecurityNameCode != null)
                {
                    if (security == null)
                    {
                        if (order.State != OrderStateType.Activ)
                        {
                            return;
                        }
                        OrderSender sender = new OrderSender();
                        sender.Order             = order;
                        sender.UpdeteOrderEvent += PlazaControllerOnNewMyOrderEvent;
                        Thread worker = new Thread(sender.Sand);
                        worker.CurrentCulture = new CultureInfo("ru-RU");
                        worker.IsBackground   = true;
                        worker.Start();
                        return;
                    }

                    order.SecurityNameCode = security.Name;
                }

                if (MyOrderEvent != null)
                {
                    MyOrderEvent(order);
                }
            }
        }
Пример #3
0
        /// <summary>
        ///     Sets a new order Sell Stop Limit.
        /// </summary>
        private static void OrdSellStopLimit(int bar, int orderIf, int toPos, double lots, double price1, double price2,
                                             OrderSender sender, OrderOrigin origin, string note)
        {
            int   sessionOrder = session[bar].Orders;
            Order order        = session[bar].Order[sessionOrder] = new Order();

            order.OrdNumb   = SentOrders;
            order.OrdDir    = OrderDirection.Sell;
            order.OrdType   = OrderType.StopLimit;
            order.OrdCond   = orderIf > 0 ? OrderCondition.If : OrderCondition.Norm;
            order.OrdStatus = OrderStatus.Confirmed;
            order.OrdIf     = orderIf;
            order.OrdPos    = toPos;
            order.OrdLots   = lots;
            order.OrdPrice  = Math.Round(price1, InstrProperties.Digits);
            order.OrdPrice2 = Math.Round(price2, InstrProperties.Digits);
            order.OrdSender = sender;
            order.OrdOrigin = origin;
            order.OrdNote   = note;

            ordCoord[SentOrders].Bar = bar;
            ordCoord[SentOrders].Ord = sessionOrder;
            session[bar].Orders++;
            SentOrders++;
        }
Пример #4
0
        static async Task Main(string[] args)
        {
            // Send Order Information To Queue
            await OrderSender.SendOrderInformationToQueueAsync(serviceBusConnection, queueName);

            // Receive Order Information To Queue
            await OrderReceiver.ReceiveOrderInformationFromQueueAsync(serviceBusConnection, queueName);
        }
Пример #5
0
        public OrderSenderTests()
        {
            mockMessageService = new Mock <IMessageService>();
            messageService     = mockMessageService.Object;

            mockShippingCostCalculator = new Mock <IShippingCostCalculator>();
            shippingCostCalculator     = mockShippingCostCalculator.Object;

            orderSender = new OrderSender(shippingCostCalculator, messageService);
        }
Пример #6
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 public Order()
 {
     ordDir    = OrderDirection.None;
     ordType   = OrderType.None;
     ordCond   = OrderCondition.None;
     ordStatus = OrderStatus.None;
     ordSender = OrderSender.None;
     ordOrigin = OrderOrigin.None;
     ordNote   = "Not Defined";
 }
Пример #7
0
        public void Send_InvalidOrder_ShouldntSendMessage()
        {
            // Arrange
            OrderSender orderSender = new OrderSender(new OrderCalculator(), messageService);

            // Act
            orderSender.Send(new Order()
            {
                TotalAmount = 0m
            });

            // Assert
            mockMessageService.Verify(ms => ms.Send(It.IsAny <Message>()), Times.Never);
        }
        public void Send_ValidOrder_RaiseOrderSentEvent()
        {
            // Arrange
            OrderSender orderSender = new OrderSender(new OrderCalculator(), new FakeMessageService());

            Order id = null;

            orderSender.OrderSent += (sender, args) => { id = args; };

            // Act
            orderSender.Send(new Order());

            // Asserts
            Assert.NotNull(id);
        }
Пример #9
0
        public void Send_ValidOrder_RaiseOrderSentEvent()
        {
            // Arrange
            mockMessageService
            .Setup(ms => ms.Send(It.IsAny <Message>()))
            .Verifiable();

            OrderSender orderSender = new OrderSender(new OrderCalculator(), messageService);

            Order id = null;

            orderSender.OrderSent += (sender, args) => { id = args; };

            // Act
            orderSender.Send(new Order());

            // Asserts
            Assert.NotNull(id);
        }
Пример #10
0
        private void OperationSend(ParametrBuySellView parametrBuySell, bool isBuy)
        {
            var apiKeys = GetKeys();

            if (apiKeys?.Count() > 0)
            {
                var orderSender = new OrderSender();
                var resultSend  = string.Empty;
                foreach (var apiKey in apiKeys)
                {
                    var keyHidden = $"{apiKey.PublicKey.Substring(0, 4)}...{apiKey.PublicKey.Substring(apiKey.PublicKey.Length - 4, 4)}";
                    var parametr  = orderSender.GetTransacParamLimit(parametrBuySell.GetPair(), isBuy, parametrBuySell.Amount, parametrBuySell.Price);
                    var response  = orderSender.OrderLimit(parametr, apiKey.PublicKey, apiKey.SecretKey);

                    if (response != null)
                    {
                        if (string.IsNullOrWhiteSpace(response.Msg))
                        {
                            resultSend += $"{keyHidden} успешно: ордер № {response.OrderId}\n";
                        }
                        else
                        {
                            resultSend += $"{keyHidden} ошибка: {response.Msg}\n";
                        }
                    }
                    else
                    {
                        resultSend += $"{keyHidden} Неизвестная ошибка\n";
                    }
                }
                MessageBox.Show(resultSend, "BUY/SELL", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            {
                MessageBox.Show("Не найдено ни одного активного ключа в статусе ОК.", "BUY/SELL", MessageBoxButton.OK, MessageBoxImage.Information);
            }
        }
Пример #11
0
        /// <summary>
        /// в системе изменился ордер
        /// </summary>
        void _plazaController_UpdateOrders(Order order)
        {
            lock (_lockerUpdateOrders)
            {
                if (_orders != null)
                {
                    Order oldOrder = _orders.Find(order1 => order1.NumberUser == order.NumberUser);

                    if (oldOrder != null && order.Price != 0)
                    {
                        order.Volume        = oldOrder.Volume;
                        order.VolumeExecute = oldOrder.Volume - order.VolumeExecute;
                    }
                }

                if (_securities == null)
                {
                    if (order.State != OrderStateType.Activ)
                    {
                        return;
                    }
                    OrderSender sender = new OrderSender();
                    sender.Order             = order;
                    sender.UpdeteOrderEvent += _plazaController_UpdateOrders;
                    Thread worker = new Thread(sender.Sand);
                    worker.CurrentCulture = new CultureInfo("ru-RU");
                    worker.IsBackground   = true;
                    worker.Start();
                    return;
                }

                Security security = _securities.Find(security1 => security1.NameId == order.SecurityNameCode);

                if (order.SecurityNameCode != null)
                {
                    if (security == null)
                    {
                        if (order.State != OrderStateType.Activ)
                        {
                            return;
                        }
                        OrderSender sender = new OrderSender();
                        sender.Order             = order;
                        sender.UpdeteOrderEvent += _plazaController_UpdateOrders;
                        Thread worker = new Thread(sender.Sand);
                        worker.CurrentCulture = new CultureInfo("ru-RU");
                        worker.IsBackground   = true;
                        worker.Start();
                        return;
                    }

                    order.SecurityNameCode = security.Name;
                }

                if (_myTrades != null &&
                    _myTrades.Count != 0)
                {
                    List <MyTrade> myTrade =
                        _myTrades.FindAll(trade => trade.NumberOrderParent == order.NumberMarket);

                    for (int tradeNum = 0; tradeNum < myTrade.Count; tradeNum++)
                    {
                        if (NewMyTradeEvent != null)
                        {
                            NewMyTradeEvent(myTrade[tradeNum]);
                        }
                    }
                }

                if (_ordersNumbers == null)
                {
                    _ordersNumbers = new List <string>();
                }

                if (_ordersNumbers.Find(orderNum => orderNum == order.NumberMarket) == null)
                {
                    _ordersNumbers.Add(order.NumberMarket);
                }

                if (NewOrderIncomeEvent != null)
                {
                    NewOrderIncomeEvent(order);
                }
            }
        }
Пример #12
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 public Order()
 {
     ordDir    = OrderDirection.None;
     ordType   = OrderType.None;
     ordCond   = OrderCondition.None;
     ordStatus = OrderStatus.None;
     ordSender = OrderSender.None;
     ordOrigin = OrderOrigin.None;
     ordNote   = "Not Defined";
 }
Пример #13
0
        /// <summary>
        /// Sets a new order Buy Stop.
        /// </summary>
        static void OrdBuyStop(int bar, int orderIf, int toPos, double lots, double price, OrderSender sender, OrderOrigin origin, string note)
        {
            int   sessionOrder = session[bar].Orders;
            Order order        = session[bar].Order[sessionOrder] = new Order();

            order.OrdNumb   = totalOrders;
            order.OrdDir    = OrderDirection.Buy;
            order.OrdType   = OrderType.Stop;
            order.OrdCond   = orderIf > 0 ? OrderCondition.If : OrderCondition.Norm;
            order.OrdStatus = OrderStatus.Confirmed;
            order.OrdIF     = orderIf;
            order.OrdPos    = toPos;
            order.OrdLots   = lots;
            order.OrdPrice  = Math.Round(price, InstrProperties.Digits);
            order.OrdPrice2 = 0;
            order.OrdSender = sender;
            order.OrdOrigin = origin;
            order.OrdNote   = note;

            ordCoord[totalOrders].Bar = bar;
            ordCoord[totalOrders].Ord = sessionOrder;
            session[bar].Orders++;
            totalOrders++;
        }