示例#1
0
        private void EventsOnOnFuturesLimitChange(FuturesLimits futLimit)
        {
            lock (changeFutPortf)
            {
                if (_portfolios == null || _portfolios.Count == 0)
                {
                    return;
                }

                Portfolio needPortf = _portfolios.Find(p => p.Number == futLimit.TrdAccId);

                if (needPortf != null)
                {
                    needPortf.ValueBegin   = Convert.ToDecimal(futLimit.CbpPrevLimit);
                    needPortf.ValueCurrent = Convert.ToDecimal(futLimit.CbpLimit);
                    needPortf.ValueBlocked =
                        Convert.ToDecimal(futLimit.CbpLUsedForOrders + futLimit.CbpLUsedForPositions);
                    needPortf.Profit = Convert.ToDecimal(futLimit.VarMargin);

                    if (PortfolioEvent != null)
                    {
                        PortfolioEvent(_portfolios);
                    }
                }
            }
        }
示例#2
0
        private void Events_OnFuturesLimitChange(FuturesLimits futLimit)
        {
            Log("Изменилась таблица Ограничений по клиентским счетам: " + futLimit.CbpLimit);

            //throw new NotImplementedException();

            //var pos = _quik.Trading.GetFuturesHolding("SPBFUT000000", "SPBFUT001h6", "RIH0", 1).Result;
            // var pos = _quik.Trading.GetFuturesLimits
        }
示例#3
0
        private async Task CallCommand()
        {
            string selectedCommand = listBoxCommands.SelectedItem.ToString();

            switch (selectedCommand)
            {
            case "Получить исторические данные":
                try
                {
                    AppendText2TextBox(textBoxLogsWindow, "Подписываемся на получение исторических данных..." + Environment.NewLine);
                    _quik.Candles.Subscribe(tool.ClassCode, tool.SecurityCode, CandleInterval.M15).Wait();
                    AppendText2TextBox(textBoxLogsWindow, "Проверяем состояние подписки..." + Environment.NewLine);
                    isSubscribedToolCandles = _quik.Candles.IsSubscribed(tool.ClassCode, tool.SecurityCode, CandleInterval.M15).Result;
                    if (isSubscribedToolCandles)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Получаем исторические данные..." + Environment.NewLine);
                        toolCandles = _quik.Candles.GetAllCandles(tool.ClassCode, tool.SecurityCode, CandleInterval.M15).Result;
                        AppendText2TextBox(textBoxLogsWindow, "Выводим исторические данные в таблицу..." + Environment.NewLine);
                        toolCandlesTable = new FormOutputTable(toolCandles);
                        toolCandlesTable.Show();
                        _quik.Candles.NewCandle += OnNewCandleDo;
                    }
                    else
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Неудачная попытка подписки на исторические данные." + Environment.NewLine);
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения исторических данных." + Environment.NewLine); }
                break;

            case "Выставить лимитрированную заявку (без сделки)":
                try
                {
                    decimal priceInOrder = Math.Round(tool.LastPrice - tool.LastPrice / 20, tool.PriceAccuracy);
                    AppendText2TextBox(textBoxLogsWindow, "Выставляем заявку на покупку, по цене:" + priceInOrder + " ..." + Environment.NewLine);
                    order = await _quik.Orders.SendLimitOrder(tool.ClassCode, tool.SecurityCode, tool.AccountID, Operation.Buy, priceInOrder, 1).ConfigureAwait(false);

                    if (order.OrderNum > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Заявка выставлена. ID транзакции - " + order.TransID + Environment.NewLine);
                        AppendText2TextBox(textBoxLogsWindow, "Заявка выставлена. Номер заявки - " + order.OrderNum + Environment.NewLine);
                        Text2TextBox(textBoxOrderNumber, order.OrderNum.ToString());
                    }
                    else
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Неудачная попытка размещения заявки. Error: " + order.RejectReason + Environment.NewLine);
                    }
                }
                catch (Exception er) { textBoxLogsWindow.AppendText("Ошибка процедуры размещения заявки. Error: " + er.Message + Environment.NewLine); }
                break;

            case "Выставить лимитрированную заявку (c выполнением!!!)":
                try
                {
                    decimal priceInOrder = Math.Round(tool.LastPrice + tool.Step * 5, tool.PriceAccuracy);
                    AppendText2TextBox(textBoxLogsWindow, "Выставляем заявку на покупку, по цене:" + priceInOrder + " ..." + Environment.NewLine);
                    long transactionID = (await _quik.Orders.SendLimitOrder(tool.ClassCode, tool.SecurityCode, tool.AccountID, Operation.Buy, priceInOrder, 1).ConfigureAwait(false)).TransID;
                    if (transactionID > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Заявка выставлена. ID транзакции - " + transactionID + Environment.NewLine);
                        Thread.Sleep(500);
                        try
                        {
                            listOrders = _quik.Orders.GetOrders().Result;
                            foreach (Order _order in listOrders)
                            {
                                if (_order.TransID == transactionID && _order.ClassCode == tool.ClassCode && _order.SecCode == tool.SecurityCode)
                                {
                                    AppendText2TextBox(textBoxLogsWindow, "Заявка выставлена. Номер заявки - " + _order.OrderNum + Environment.NewLine);
                                    Text2TextBox(textBoxOrderNumber, _order.OrderNum.ToString());
                                    order = _order;
                                }
                                else
                                {
                                    Text2TextBox(textBoxOrderNumber, "---");
                                }
                            }
                        }
                        catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения номера заявки." + Environment.NewLine); }
                    }
                    else
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Неудачная попытка выставления заявки." + Environment.NewLine);
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка выставления заявки." + Environment.NewLine); }
                break;

            case "Выставить рыночную заявку (c выполнением!!!)":
                try
                {
                    decimal priceInOrder = Math.Round(tool.LastPrice + tool.Step * 5, tool.PriceAccuracy);
                    AppendText2TextBox(textBoxLogsWindow, "Выставляем рыночную заявку на покупку..." + Environment.NewLine);
                    long transactionID = (await _quik.Orders.SendMarketOrder(tool.ClassCode, tool.SecurityCode, tool.AccountID, Operation.Buy, 1).ConfigureAwait(false)).TransID;
                    if (transactionID > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Заявка выставлена. ID транзакции - " + transactionID + Environment.NewLine);
                        Thread.Sleep(500);
                        try
                        {
                            listOrders = _quik.Orders.GetOrders().Result;
                            foreach (Order _order in listOrders)
                            {
                                if (_order.TransID == transactionID && _order.ClassCode == tool.ClassCode && _order.SecCode == tool.SecurityCode)
                                {
                                    textBoxLogsWindow.AppendText("Заявка выставлена. Номер заявки - " + _order.OrderNum + Environment.NewLine);
                                    Text2TextBox(textBoxOrderNumber, _order.OrderNum.ToString());
                                    order = _order;
                                }
                                else
                                {
                                    Text2TextBox(textBoxOrderNumber, "---");
                                }
                            }
                        }
                        catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения номера заявки." + Environment.NewLine); }
                    }
                    else
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Неудачная попытка выставления заявки." + Environment.NewLine);
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка выставления заявки." + Environment.NewLine); }
                break;

            case "Удалить активную заявку":
                try
                {
                    if (order != null && order.OrderNum > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Удаляем заявку на покупку с номером - " + order.OrderNum + " ..." + Environment.NewLine);
                    }
                    long x = _quik.Orders.KillOrder(order).Result;
                    AppendText2TextBox(textBoxLogsWindow, "Результат - " + x + " ..." + Environment.NewLine);
                    Text2TextBox(textBoxOrderNumber, "");
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка удаления заявки." + Environment.NewLine); }
                break;

            case "Получить информацию по бумаге":
                try
                {
                    AppendText2TextBox(textBoxLogsWindow, "Получаем таблицу информации..." + Environment.NewLine);
                    listSecurityInfo = new List <SecurityInfo> {
                        _quik.Class.GetSecurityInfo(tool.ClassCode, tool.SecurityCode).Result
                    };

                    if (listDepoLimits.Count > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Выводим данные в таблицу..." + Environment.NewLine);
                        toolCandlesTable = new FormOutputTable(listSecurityInfo);
                        toolCandlesTable.Show();
                    }
                    else
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Информация по бумаге '" + tool.Name + "' отсутствует." + Environment.NewLine);
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения лимитов." + Environment.NewLine); }
                break;

            case "Получить таблицу лимитов по бумаге":
                try
                {
                    AppendText2TextBox(textBoxLogsWindow, "Получаем таблицу лимитов..." + Environment.NewLine);
                    listDepoLimits = _quik.Trading.GetDepoLimits(tool.SecurityCode).Result;

                    if (listDepoLimits.Count > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Выводим данные лимитов в таблицу..." + Environment.NewLine);
                        toolCandlesTable = new FormOutputTable(listDepoLimits);
                        toolCandlesTable.Show();
                    }
                    else
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Бумага '" + tool.Name + "' в таблице лимитов отсутствует." + Environment.NewLine);
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения лимитов." + Environment.NewLine); }
                break;

            case "Получить таблицу лимитов по всем бумагам":
                try
                {
                    AppendText2TextBox(textBoxLogsWindow, "Получаем таблицу лимитов..." + Environment.NewLine);
                    listDepoLimits = _quik.Trading.GetDepoLimits().Result;

                    if (listDepoLimits.Count > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Выводим данные лимитов в таблицу..." + Environment.NewLine);
                        toolCandlesTable = new FormOutputTable(listDepoLimits);
                        toolCandlesTable.Show();
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения лимитов." + Environment.NewLine); }
                break;

            case "Получить таблицу по фьючерсным лимитам":
                try
                {
                    AppendText2TextBox(textBoxLogsWindow, "Получаем таблицу фьючерсных лимитов..." + Environment.NewLine);
                    futLimit = _quik.Trading.GetFuturesLimit(tool.FirmID, tool.AccountID, 0, "SUR").Result;

                    if (futLimit != null)
                    {
                        listFuturesLimits = new List <FuturesLimits> {
                            futLimit
                        };
                        AppendText2TextBox(textBoxLogsWindow, "Выводим данные лимитов в таблицу..." + Environment.NewLine);
                        toolCandlesTable = new FormOutputTable(listFuturesLimits);
                        toolCandlesTable.Show();
                    }
                    else
                    {
                        Console.WriteLine("futuresLimit = null");
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения лимитов." + Environment.NewLine); }
                break;

            case "Получить таблицу заявок":
                try
                {
                    AppendText2TextBox(textBoxLogsWindow, "Получаем таблицу заявок..." + Environment.NewLine);
                    listOrders = _quik.Orders.GetOrders().Result;

                    if (listOrders.Count > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Выводим данные о заявках в таблицу..." + Environment.NewLine);
                        toolCandlesTable = new FormOutputTable(listOrders);
                        toolCandlesTable.Show();
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения заявок." + Environment.NewLine); }
                break;

            case "Получить таблицу сделок":
                try
                {
                    AppendText2TextBox(textBoxLogsWindow, "Получаем таблицу сделок..." + Environment.NewLine);
                    listTrades = _quik.Trading.GetTrades().Result;

                    if (listTrades.Count > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Выводим данные о сделках в таблицу..." + Environment.NewLine);
                        toolCandlesTable = new FormOutputTable(listTrades);
                        toolCandlesTable.Show();
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения сделок." + Environment.NewLine); }
                break;

            case "Получить таблицу `Клиентский портфель`":
                try
                {
                    AppendText2TextBox(textBoxLogsWindow, "Получаем таблицу `Клиентский портфель`..." + Environment.NewLine);
                    listPortfolio = new List <PortfolioInfoEx>();
                    if (classCode == "SPBFUT")
                    {
                        listPortfolio.Add(_quik.Trading.GetPortfolioInfoEx(tool.FirmID, tool.AccountID, 0).Result);
                    }
                    else
                    {
                        listPortfolio.Add(_quik.Trading.GetPortfolioInfoEx(tool.FirmID, clientCode, 2).Result);
                    }

                    if (listPortfolio.Count > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Выводим данные о портфеле в таблицу..." + Environment.NewLine);
                        toolCandlesTable = new FormOutputTable(listPortfolio);
                        toolCandlesTable.Show();
                    }
                    else
                    {
                        AppendText2TextBox(textBoxLogsWindow, "В таблице `Клиентский портфель` отсутствуют записи." + Environment.NewLine);
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения клиентского портфеля." + Environment.NewLine); }
                break;

            case "Получить таблицы денежных лимитов":
                try
                {
                    AppendText2TextBox(textBoxLogsWindow, "Получаем таблицу денежных лимитов..." + Environment.NewLine);
                    listMoneyLimits = new List <MoneyLimit> {
                        _quik.Trading.GetMoney(clientCode, tool.FirmID, "EQTV", "SUR").Result
                    };

                    if (listMoneyLimits.Count > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Выводим данные о денежных лимитах в таблицу..." + Environment.NewLine);
                        toolCandlesTable = new FormOutputTable(listMoneyLimits);
                        toolCandlesTable.Show();
                    }

                    AppendText2TextBox(textBoxLogsWindow, "Получаем расширение таблицы денежных лимитов..." + Environment.NewLine);
                    listMoneyLimitsEx = new List <MoneyLimitEx> {
                        _quik.Trading.GetMoneyEx(tool.FirmID, clientCode, "EQTV", "SUR", 2).Result
                    };

                    if (listMoneyLimitsEx.Count > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Выводим данные о денежных лимитах в таблицу..." + Environment.NewLine);
                        toolCandlesTable = new FormOutputTable(listMoneyLimitsEx);
                        toolCandlesTable.Show();
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения денежных лимитов." + Environment.NewLine); }
                break;

            //case "Получить стакан заявок (не обновляемый)":
            //    try
            //    {
            //        if (toolOrderBook != null)
            //        {
            //            AppendText2TextBox(textBoxLogsWindow, "Получаем данные о стакане с помощью функции GetQuoteLevel2..." + Environment.NewLine);
            //            OrderBook orderBookCurrent = _quik.OrderBook.GetQuoteLevel2(tool.ClassCode, tool.SecurityCode).Result;
            //            AppendText2TextBox(textBoxLogsWindow, "Выводим данные о стакане заявок в таблицу..." + Environment.NewLine);
            //            //Console.WriteLine("Count offer = " + orderBookCurrent.offer_count);
            //            //toolOrderBookTable = new FormOrderBook(toolOrderBook);
            //            //toolOrderBookTable = new FormOrderBook(orderBookCurrent);
            //            //toolOrderBookTable = new FormOrderBook();
            //            //toolOrderBookTable.Show();
            //        }
            //    }
            //    catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения денежных лимитов." + Environment.NewLine); }
            //    break;
            case "Связка ParamRequest + OnParam + GetParamEx2":
                try
                {
                    AppendText2TextBox(textBoxLogsWindow, "Подписываемся на получение обновляемого параметра 'BID', через ParamRequest..." + Environment.NewLine);
                    bool pReq = _quik.Trading.ParamRequest(tool.ClassCode, tool.SecurityCode, ParamNames.BID).Result;
                    if (pReq)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Подписываемся на колбэк 'OnParam'..." + Environment.NewLine);
                        _quik.Events.OnParam += OnParamDo;
                    }
                    else
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Неудачная попытка подписки на обновление параметра..." + Environment.NewLine);
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка работы в связке ParamRequest + OnParam + GetParamEx2." + Environment.NewLine); }
                break;

            case "CancelParamRequest":
                try
                {
                    AppendText2TextBox(textBoxLogsWindow, "Отменяем подписку на получение обновляемого параметра 'BID', через ParamRequest..." + Environment.NewLine);
                    bool pReq = _quik.Trading.CancelParamRequest(tool.ClassCode, tool.SecurityCode, ParamNames.BID).Result;
                    if (pReq)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Отменяем подписку на колбэк 'OnParam'..." + Environment.NewLine);
                        _quik.Events.OnParam -= OnParamDo;
                    }
                    else
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Неудачная попытка отписки на обновление параметра..." + Environment.NewLine);
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка работы в связке ParamRequest + OnParam + GetParamEx2." + Environment.NewLine); }
                break;

            case "Отменить заказ на получение стакана":
                try
                {
                    AppendText2TextBox(textBoxLogsWindow, "Отменяем заказ на получение с сервера стакана по указанному классу и инструменту..." + Environment.NewLine);
                    bool resultUnsub = await _quik.OrderBook.Unsubscribe(tool.ClassCode, tool.SecurityCode).ConfigureAwait(false);

                    int count = 0;
                    while (!resultUnsub && count < 10)
                    {
                        Thread.Sleep(500);
                        resultUnsub = await _quik.OrderBook.Unsubscribe(tool.ClassCode, tool.SecurityCode).ConfigureAwait(false);

                        count++;
                    }
                    int i = 0;
                    while (isSubscribedToolOrderBook && i < 10)
                    {
                        Thread.Sleep(500);
                        isSubscribedToolOrderBook = _quik.OrderBook.IsSubscribed(tool.ClassCode, tool.SecurityCode).Result;
                        i++;
                    }
                    if (isSubscribedToolOrderBook)
                    {
                        //toolOrderBook                   = new OrderBook();
                        AppendText2TextBox(textBoxLogsWindow, "Отмена подписки на стакан не удалась." + Environment.NewLine);
                    }
                    else
                    {
                        toolOrderBook = null;
                        AppendText2TextBox(textBoxLogsWindow, "Отмена подписки на стакан прошла успешно." + Environment.NewLine);
                        bid   = 0;
                        offer = 0;
                        Text2TextBox(textBoxBestBid, "-");
                        Text2TextBox(textBoxBestOffer, "-");
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка в функции отмены заказа стакана." + Environment.NewLine); }
                break;

            case "Выставить стоп-заявку типа тейк-профит и стоп-лимит":
                try
                {
                    decimal   priceInOrder = Math.Round(tool.LastPrice, tool.PriceAccuracy);
                    StopOrder orderNew     = new StopOrder()
                    {
                        Account         = tool.AccountID,
                        ClassCode       = tool.ClassCode,
                        ClientCode      = clientCode,
                        SecCode         = secCode,
                        Offset          = 50,
                        OffsetUnit      = OffsetUnits.PRICE_UNITS,
                        Spread          = 0.5M,
                        SpreadUnit      = OffsetUnits.PERCENTS,
                        StopOrderType   = StopOrderType.TakeProfitStopLimit,
                        Condition       = Condition.LessOrEqual,
                        ConditionPrice  = Math.Round(priceInOrder - 50 * tool.Step, tool.PriceAccuracy),
                        ConditionPrice2 = Math.Round(priceInOrder + 40 * tool.Step, tool.PriceAccuracy),
                        Price           = Math.Round(priceInOrder + 45 * tool.Step, tool.PriceAccuracy),
                        Operation       = Operation.Buy,
                        Quantity        = 1
                    };
                    AppendText2TextBox(textBoxLogsWindow, "Выставляем стоп-заявку на покупку, по цене:" + priceInOrder + " ..." + Environment.NewLine);
                    long transID = await _quik.StopOrders.CreateStopOrder(orderNew).ConfigureAwait(false);

                    if (transID > 0)
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Заявка выставлена. ID транзакции - " + transID + Environment.NewLine);
                        Thread.Sleep(500);
                        try
                        {
                            var listStopOrders = _quik.StopOrders.GetStopOrders().Result;
                            foreach (StopOrder stopOrder in listStopOrders)
                            {
                                if (stopOrder.TransId == transID && stopOrder.ClassCode == tool.ClassCode && stopOrder.SecCode == tool.SecurityCode)
                                {
                                    AppendText2TextBox(textBoxLogsWindow, "Стоп-заявка выставлена. Номер стоп-заявки - " + stopOrder.OrderNum + Environment.NewLine);
                                }
                            }
                        }
                        catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка получения номера стоп-заявки." + Environment.NewLine); }
                    }
                    else
                    {
                        AppendText2TextBox(textBoxLogsWindow, "Неудачная попытка выставления стоп-заявки." + Environment.NewLine);
                    }
                }
                catch { AppendText2TextBox(textBoxLogsWindow, "Ошибка выставления стоп-заявки." + Environment.NewLine); }
                break;
            }
        }
示例#4
0
 internal void OnFuturesLimitChangeCall(FuturesLimits futLimit)
 {
     OnFuturesLimitChange?.Invoke(futLimit);
 }
示例#5
0
 public void OnFuturesLimitChange(FuturesLimits futLimit)
 {
     FuturesLimitChange?.Invoke(_quik, futLimit);
 }