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); } } } }
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 }
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; } }
internal void OnFuturesLimitChangeCall(FuturesLimits futLimit) { OnFuturesLimitChange?.Invoke(futLimit); }
public void OnFuturesLimitChange(FuturesLimits futLimit) { FuturesLimitChange?.Invoke(_quik, futLimit); }