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; } }
private void buttonCommandRun_Click(object sender, EventArgs e) { string selectedCommand = listBoxCommands.SelectedItem.ToString(); switch (selectedCommand) { case "Получить исторические данные": try { textBoxLogsWindow.AppendText("Подписываемся на получение исторических данных..." + Environment.NewLine); _quik.Candles.Subscribe(tool.ClassCode, tool.SecurityCode, CandleInterval.H1).Wait(); textBoxLogsWindow.AppendText("Проверяем состояние подписки..." + Environment.NewLine); isSubscribedToolCandles = _quik.Candles.IsSubscribed(tool.ClassCode, tool.SecurityCode, CandleInterval.H1).Result; if (isSubscribedToolCandles) { textBoxLogsWindow.AppendText("Получаем исторические данные..." + Environment.NewLine); toolCandles = _quik.Candles.GetAllCandles(tool.ClassCode, tool.SecurityCode, CandleInterval.H1).Result; textBoxLogsWindow.AppendText("Выводим исторические данные в таблицу..." + Environment.NewLine); toolCandlesTable = new FormOutputTable(toolCandles); toolCandlesTable.Show(); } else { textBoxLogsWindow.AppendText("Неудачная попытка подписки на исторические данные." + Environment.NewLine); } } catch { textBoxLogsWindow.AppendText("Ошибка получения исторических данных." + Environment.NewLine); } break; case "Выставить заявку (без сделки)": try { decimal priceInOrder = Math.Round(tool.LastPrice - tool.LastPrice / 20, tool.PriceAccuracy); textBoxLogsWindow.AppendText("Выставляем заявку на покупку, по цене:" + priceInOrder + " ..." + Environment.NewLine); long transactionID = NewOrder(_quik, tool, Operation.Buy, priceInOrder, 1); if (transactionID > 0) { Thread.Sleep(500); textBoxLogsWindow.AppendText("Заявка выставлена. ID транзакции - " + transactionID + Environment.NewLine); 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); textBoxOrderNumber.Text = _order.OrderNum.ToString(); order = _order; } } } catch (Exception er) { textBoxLogsWindow.AppendText("Ошибка получения номера заявки. Error: " + er.Message + Environment.NewLine); } } else { textBoxLogsWindow.AppendText("Неудачная попытка выставления заявки." + Environment.NewLine); } } catch { textBoxLogsWindow.AppendText("Ошибка выставления заявки." + Environment.NewLine); } break; case "Выставить заявку (c выполнением!!!)": try { decimal priceInOrder = Math.Round(tool.LastPrice + tool.Step * 5, tool.PriceAccuracy); textBoxLogsWindow.AppendText("Выставляем заявку на покупку, по цене:" + priceInOrder + " ..." + Environment.NewLine); long transactionID = NewOrder(_quik, tool, Operation.Buy, priceInOrder, 1); if (transactionID > 0) { textBoxLogsWindow.AppendText("Заявка выставлена. 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); textBoxOrderNumber.Text = _order.OrderNum.ToString(); order = _order; } else { textBoxOrderNumber.Text = "---"; } } } catch { textBoxLogsWindow.AppendText("Ошибка получения номера заявки." + Environment.NewLine); } } else { textBoxLogsWindow.AppendText("Неудачная попытка выставления заявки." + Environment.NewLine); } } catch { textBoxLogsWindow.AppendText("Ошибка выставления заявки." + Environment.NewLine); } break; case "Удалить активную заявку": try { if (order != null && order.OrderNum > 0) { textBoxLogsWindow.AppendText("Удаляем заявку на покупку с номером - " + order.OrderNum + " ..." + Environment.NewLine); } long x = _quik.Orders.KillOrder(order).Result; textBoxLogsWindow.AppendText("Результат - " + x + " ..." + Environment.NewLine); textBoxOrderNumber.Text = ""; } catch { textBoxLogsWindow.AppendText("Ошибка удаления заявки." + Environment.NewLine); } break; case "Получить таблицу лимитов по бумаге": try { textBoxLogsWindow.AppendText("Получаем таблицу лимитов..." + Environment.NewLine); listDepoLimits = _quik.Trading.GetDepoLimits(tool.SecurityCode).Result; if (listDepoLimits.Count > 0) { textBoxLogsWindow.AppendText("Выводим данные лимитов в таблицу..." + Environment.NewLine); toolCandlesTable = new FormOutputTable(listDepoLimits); toolCandlesTable.Show(); } else { textBoxLogsWindow.AppendText("Бумага '" + tool.Name + "' в таблице лимитов отсутствует." + Environment.NewLine); } } catch { textBoxLogsWindow.AppendText("Ошибка получения лимитов." + Environment.NewLine); } break; case "Получить таблицу лимитов по всем бумагам": try { textBoxLogsWindow.AppendText("Получаем таблицу лимитов..." + Environment.NewLine); listDepoLimits = _quik.Trading.GetDepoLimits().Result; if (listDepoLimits.Count > 0) { textBoxLogsWindow.AppendText("Выводим данные лимитов в таблицу..." + Environment.NewLine); toolCandlesTable = new FormOutputTable(listDepoLimits); toolCandlesTable.Show(); } } catch { textBoxLogsWindow.AppendText("Ошибка получения лимитов." + Environment.NewLine); } break; case "Получить таблицу заявок": try { textBoxLogsWindow.AppendText("Получаем таблицу заявок..." + Environment.NewLine); listOrders = _quik.Orders.GetOrders().Result; if (listOrders.Count > 0) { textBoxLogsWindow.AppendText("Выводим данные о заявках в таблицу..." + Environment.NewLine); toolCandlesTable = new FormOutputTable(listOrders); toolCandlesTable.Show(); } } catch { textBoxLogsWindow.AppendText("Ошибка получения заявок." + Environment.NewLine); } break; case "Получить таблицу сделок": try { textBoxLogsWindow.AppendText("Получаем таблицу сделок..." + Environment.NewLine); listTrades = _quik.Trading.GetTrades().Result; if (listTrades.Count > 0) { textBoxLogsWindow.AppendText("Выводим данные о сделках в таблицу..." + Environment.NewLine); toolCandlesTable = new FormOutputTable(listTrades); toolCandlesTable.Show(); } } catch { textBoxLogsWindow.AppendText("Ошибка получения сделок." + Environment.NewLine); } break; case "Получить таблицу `Клиентский портфель`": try { textBoxLogsWindow.AppendText("Получаем таблицу `Клиентский портфель`..." + 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) { textBoxLogsWindow.AppendText("Выводим данные о портфеле в таблицу..." + Environment.NewLine); toolCandlesTable = new FormOutputTable(listPortfolio); toolCandlesTable.Show(); } else { textBoxLogsWindow.AppendText("В таблице `Клиентский портфель` отсутствуют записи." + Environment.NewLine); } } catch { textBoxLogsWindow.AppendText("Ошибка получения клиентского портфеля." + Environment.NewLine); } break; case "Получить таблицы денежных лимитов": try { textBoxLogsWindow.AppendText("Получаем таблицу денежных лимитов..." + Environment.NewLine); listMoneyLimits = new List <MoneyLimit>(); listMoneyLimits.Add(_quik.Trading.GetMoney(clientCode, tool.FirmID, "EQTV", "SUR").Result); if (listMoneyLimits.Count > 0) { textBoxLogsWindow.AppendText("Выводим данные о денежных лимитах в таблицу..." + Environment.NewLine); toolCandlesTable = new FormOutputTable(listMoneyLimits); toolCandlesTable.Show(); } textBoxLogsWindow.AppendText("Получаем расширение таблицы денежных лимитов..." + Environment.NewLine); listMoneyLimitsEx = new List <MoneyLimitEx>(); listMoneyLimitsEx.Add(_quik.Trading.GetMoneyEx(tool.FirmID, clientCode, "EQTV", "SUR", 2).Result); if (listMoneyLimitsEx.Count > 0) { textBoxLogsWindow.AppendText("Выводим данные о денежных лимитах в таблицу..." + Environment.NewLine); toolCandlesTable = new FormOutputTable(listMoneyLimitsEx); toolCandlesTable.Show(); } } catch { textBoxLogsWindow.AppendText("Ошибка получения денежных лимитов." + Environment.NewLine); } break; } }
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.H1).Wait(); AppendText2TextBox(textBoxLogsWindow, "Проверяем состояние подписки..." + Environment.NewLine); isSubscribedToolCandles = _quik.Candles.IsSubscribed(tool.ClassCode, tool.SecurityCode, CandleInterval.H1).Result; if (isSubscribedToolCandles) { AppendText2TextBox(textBoxLogsWindow, "Получаем исторические данные..." + Environment.NewLine); toolCandles = _quik.Candles.GetAllCandles(tool.ClassCode, tool.SecurityCode, CandleInterval.H1).Result; AppendText2TextBox(textBoxLogsWindow, "Выводим исторические данные в таблицу..." + Environment.NewLine); toolCandlesTable = new FormOutputTable(toolCandles); toolCandlesTable.Show(); } 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>(); listSecurityInfo.Add(_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); 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>(); listMoneyLimits.Add(_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>(); listMoneyLimitsEx.Add(_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 "Связка 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; } }