Beispiel #1
0
        }                                              //дата и время открытия

        #endregion

        //закрытие позицию
        public async void CloseLE(Slot slot, IEnumerable <DataRow> Orders, string account, string brokerRef, string SecBoard, string SecCode, double price, int vol, string comment, string orderLXcache, string NamePos, double priceMetka)
        {
            // расчет стопа-----------------------------
            if (priceMetka - OpenPrice >= 0)
            {
                Stop = Math.Abs(priceMetka - OpenPrice);
            }
            else
            {
                Stop = -Math.Abs(priceMetka - OpenPrice);
            }

            using (var db = new ApplicationContext())
            {
                var _pos = db.Positions.Where(p => p.Comment == this.Comment).FirstOrDefault();
                _pos.Stop = this.Stop;
                await db.SaveChangesAsync();
            }

            // Вспомогательные переменные ---------
            // account                            - Код торгового счета
            string BuySell     = "S";             // Направление операции: "B" – покупка, "S" – продажа
            string mktLimit    = "L";             // Тип заявки: "M" – рыночная, "L" – лимитированная
            string splitFlag   = "S";             // Признак расщепления цены: "S" – по разным ценам, "O" – по одной цене
            string immCancel   = "";              // Условие исполнения: " " (пробел) – поставить в очередь, "N" – немедленно или отклонить, "W" – снять остаток
            string entryType   = "P";             // Тип ввода значения цены: "P" – цена, "Y" – доходность, "W" – средневзвешенная цена
            string marketMaker = "";              // Признак заявки Маркет-Мейкера: " " (пробел) – обычная заявка, "M" – заявка Маркет-Мейкера
            // SecBoard                           -  Код режима торгов для финансового инструмента
            // SecCode                            -  Код финансового инструмента
            string issueCode = "";                // Код выпуска ценной бумаги
            // price                              -  Цена за одну ценную бумагу
            // amount                             -  Количество ценных бумаг, выраженное в лотах
            // hidden (Необязательный параметр)   -  Скрытое количество ценных бумаг, выраженное в лотах
            // brokerRef                          -  Ссылка типа <счет клиента>[/<субсчет>]
            // extRef                             -  Внешняя ссылка (комментарий)
            DateTime endTime = DateTime.MinValue; // Время окончания действия заявки

            //long orderNo;                         // Выходной параметр orderNo содержит номер зарегистрированной заявки
            string resultMsg;                     // Выходной параметр resultMsg содержит текстовое сообщение о результате операции

            //Находим ордер------------------------

            DataRow orderX = null;

            long cache = 0;

            if (orderLXcache.Length > 0)
            {
                cache = long.Parse(orderLXcache, CultureInfo.InvariantCulture);
            }

            foreach (DataRow order in Orders)
            {
                if ((long)order["OrderNo"] == cache)
                {
                    orderX = order;
                }
            }



            //--------------------------------------

            if (orderX == null)
            {
                if (orderLXcache.Length == 0)
                {
                    long orderNo;
                    int  result = 0;
                    result = slot.AddOrder(account, BuySell, mktLimit, splitFlag, immCancel, entryType, marketMaker, SecBoard, SecCode, issueCode, price, vol, brokerRef, comment, endTime, out orderNo, out resultMsg);
                    if (result == 0)
                    {
                        NamePos.SaveOrderDB(string.Empty, orderNo.ToString());
                    }

                    if (TradeHelper._del != null)
                    {
                        TradeHelper._del("Cобытие", resultMsg);
                    }
                }
            }

            else
            {
                // если заявка активна
                if ((string)orderX["Status"] == "A" || (string)orderX["Status"] == "O")
                {
                    if ((double)orderX["Price"] != price)
                    {
                        long orderNo1;
                        long orderNo2;
                        int  result = slot.MoveOrders(0, (long)orderX["OrderNo"], price, 0, comment, 0, 0, 0, comment, out orderNo1, out orderNo2, out resultMsg);
                        if (result == 0)
                        {
                            NamePos.SaveOrderDB(string.Empty, orderNo1.ToString());
                        }
                        else
                        {
                            NamePos.SaveOrderDB(string.Empty, ((long)orderX["OrderNo"]).ToString());
                        }

                        if (TradeHelper._del != null)
                        {
                            TradeHelper._del("Cобытие", resultMsg);
                        }
                    }
                }
                // если заявка отменена
                else if ((string)orderX["Status"] == "W")
                {
                    long orderNo;
                    int  result = 0;
                    result = slot.AddOrder(account, BuySell, mktLimit, splitFlag, immCancel, entryType, marketMaker, SecBoard, SecCode, issueCode, price, vol, brokerRef, comment, endTime, out orderNo, out resultMsg);
                    NamePos.SaveOrderDB(string.Empty, orderNo.ToString());
                    if (TradeHelper._del != null)
                    {
                        TradeHelper._del("Cобытие", resultMsg);
                    }
                }
                //----------------------------------------------------------------------


                // если заявка исполнена
                else if ((string)orderX["Status"] == "M")
                {
                    ClosePrice     = (double)orderX["Price"];
                    Order_Close_No = (long)orderX["OrderNo"];
                    IsActive       = false;
                    Profit         = ClosePrice - OpenPrice;
                    CloseDate      = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);

                    //Запись в лог-------------------------------------------
                    if (TradeHelper._del != null)
                    {
                        TradeHelper._del("Cобытие", "Закрыта LE - pos : sec: " + SecirityPos + " | номер " + Comment + " | объем " + Quantiry + " | цена " + ClosePrice);
                    }

                    NamePos.SaveOrderDB(string.Empty, string.Empty);
                    NamePos.DelPosition();
                }
            }
        }