int GetPositionT2(IQuik _quik, Tool instrument, string clientCode) { // возвращает чистую позицию по инструменту // для срочного рынка передаем номер счета, для спот-рынка код-клиента int qty = 0; if (instrument.ClassCode == "SPBFUT") { // фьючерсы try { FuturesClientHolding q1 = _quik.Functions.Workstation.GetFuturesHoldingAsync(instrument.FirmID, instrument.AccountID, instrument.SecurityCode, 0).Result; if (q1 != null) { qty = Convert.ToInt32(q1.totalNet); } } catch (Exception e) { Console.WriteLine("GetPositionT2: SPBFUT, ошибка - " + e.Message); } } else { // акции try { DepoLimitEx q1 = _quik.Functions.Workstation.GetDepoExAsync(instrument.FirmID, clientCode, instrument.SecurityCode, instrument.AccountID, 2).Result; if (q1 != null) { qty = Convert.ToInt32(q1.CurrentBalance); } } catch (Exception e) { Console.WriteLine("GetPositionT2: ошибка - " + e.Message); } } return(qty); }
long NewOrder(IQuik _quik, Tool _tool, Operation operation, decimal price, int qty) { long res = 0; if (settings.RobotMode == "Боевой") { Order order_new = new Order(); order_new.ClassCode = _tool.ClassCode; order_new.SecCode = _tool.SecurityCode; order_new.Operation = operation; order_new.Price = price; order_new.Quantity = qty; order_new.Account = _tool.AccountID; try { res = _transactionManager.SendOrderAsync(order_new).Result; } catch { Console.WriteLine("Неудачная попытка отправки заявки"); } } else { res = 0; position.entranceOrderNumber = 8888888; } return(res); }
void OnFuturesClientHoldingDo(IQuik quik, FuturesClientHolding futPos) { if (futPos.secCode == tool.SecurityCode) { futuresPosition = futPos; } }
/// <inheritdoc/> public ITransactionManager Create(IQuik quik, TransactionManagerOptions options) { var idProvider = new TransactionIdProvider(); var persistentStorage = new InMemoryPersistantStorage(); return(new TransactionManager(quik, idProvider, persistentStorage, _loggerFactory.CreateLogger <TransactionManager>())); }
void OnCandle(IQuik quik, Candle candle) { if (toolCandles != null) { NewCandle_to_Table(ref toolCandles, candle); } }
private void OnCandle(IQuik quik, Candle candle) { if (candle.SecCode == "SBER" && candle.ClassCode == "TQBR" && candle.Interval == CandleInterval.M1) { Console.WriteLine("Sec:{0}, Open:{1}, Close:{2}, Volume:{3}", candle.SecCode, candle.Open, candle.Close, candle.Volume); } }
void OnParamDo(IQuik quik, Param _param) { if (_param.ClassCode == tool.ClassCode && _param.SecCode == tool.SecurityCode) { double bid = Convert.ToDouble(_quik.Functions.Workstation.GetParamEx2Async(tool.ClassCode, tool.SecurityCode, ParamName.BID).Result.ParamValue.Replace('.', separator)); AppendText2TextBox(textBoxLogsWindow, "Вызвано событие OnParam. Актуальное значение параметра 'BID' = " + bid + Environment.NewLine); } }
private void ButtonStart_Click(object sender, EventArgs e) { try { var quikFactory = new QuikFactory(); var options = QuikClientOptions.GetDefault(); textBoxLogsWindow.AppendText("Подключаемся к терминалу Quik..." + Environment.NewLine); if (checkBoxRemoteHost.Checked) { options.Host = IPAddress.Parse(textBoxHost.Text); } _quik = quikFactory.Create(options); //// Отладочный вариант подключения //if (checkBoxRemoteHost.Checked) _quik = new Quik(34136, new InMemoryStorage(), textBoxHost.Text); // инициализируем объект Quik с использованием удаленного IP-адреса терминала //else _quik = new Quik(34136, new InMemoryStorage()); // инициализируем объект Quik с использованием локального расположения терминала (по умолчанию) var transactionManagerFactory = new TransactionManagerFactory(); _transactionManager = transactionManagerFactory.Create(_quik, TransactionManagerOptions.GetDefault()); } catch { textBoxLogsWindow.AppendText("Ошибка инициализации объекта Quik..." + Environment.NewLine); } if (_quik != null) { textBoxLogsWindow.AppendText("Экземпляр Quik создан." + Environment.NewLine); try { textBoxLogsWindow.AppendText("Получаем статус соединения с сервером...." + Environment.NewLine); isServerConnected = _quik.Functions.Service.IsConnectedAsync().Result; if (isServerConnected) { textBoxLogsWindow.AppendText("Соединение с сервером установлено." + Environment.NewLine); buttonRun.Enabled = true; buttonStart.Enabled = false; } else { textBoxLogsWindow.AppendText("Соединение с сервером НЕ установлено." + Environment.NewLine); buttonRun.Enabled = false; buttonStart.Enabled = true; } // для отладки //Trace.Listeners.Add(new TextWriterTraceListener(Console.Out)); //Trace.Listeners.Add(new TextWriterTraceListener("TraceLogging.log")); // для отладки } catch { textBoxLogsWindow.AppendText("Неудачная попытка получить статус соединения с сервером." + Environment.NewLine); } } }
void OnQuoteDo(IQuik quik, OrderBook quote) { if (quote.sec_code == tool.SecurityCode && quote.class_code == tool.ClassCode) { renewOrderBookTime = DateTime.Now; toolOrderBook = quote; bid = Convert.ToDecimal(toolOrderBook.bid[toolOrderBook.bid.Count() - 1].price); offer = Convert.ToDecimal(toolOrderBook.offer[0].price); } }
public TransactionManager( IQuik quik, IIdProvider idProvider, IPersistentStorage persistentStorage, ILogger <TransactionManager> logger) { _quik = quik; _idProvider = idProvider; _persistentStorage = persistentStorage; _logger = logger; }
void OnStopOrderDo(IQuik quik, StopOrder _stopOrder) { Trace.Assert(_stopOrder != null, DateTime.Now + ": Trace: stopOrder = NULL"); Trace.WriteLine(DateTime.Now + ": Trace: OnStopOrderDo()"); try { if (_stopOrder != null && _stopOrder.OrderNum > 0) { Trace.WriteLine("Trace: Вызвано событие OnStopOrder - 'Time' = " + DateTime.Now + ", 'OrderNum' = " + _stopOrder.OrderNum + ", 'State' = " + _stopOrder.State); AppendText2TextBox(textBoxLogsWindow, "Вызвано событие OnStopOrder - 'Time' = " + DateTime.Now + ", 'OrderNum' = " + _stopOrder.OrderNum + ", 'State' = " + _stopOrder.State + Environment.NewLine); } } catch (Exception er) { Trace.WriteLine("Trace: Ошибка в OnStopOrderDo() - " + er.ToString()); } }
void OnCandleDo(IQuik quik, Candle _candle) { Trace.Assert(_candle != null, DateTime.Now + ": Trace: candle = NULL"); Trace.WriteLine(DateTime.Now + ": Trace: OnNewCandleDo()"); try { if (_candle.ClassCode == tool.ClassCode && _candle.SecCode == tool.SecurityCode && _candle.Interval == CandleInterval.M15) { Trace.WriteLine("Trace: Получена новая свеча - 'Time' = " + DateTime.Now + ", 'TimeCandle' = " + (DateTime)_candle.Datetime + ", 'Open' = " + _candle.Open + ", 'Close' = " + _candle.Close); AppendText2TextBox(textBoxLogsWindow, "Получена новая свеча: 'Time' = " + DateTime.Now + ", 'TimeCandle' = " + (DateTime)_candle.Datetime + ", 'Open' = " + _candle.Open + ", 'Close' = " + _candle.Close + Environment.NewLine); } } catch (Exception er) { Trace.WriteLine("Trace: Ошибка в OnNewCandleDo() - " + er.ToString()); } }
private void buttonConnect_Click(object sender, EventArgs e) { try { textBoxLogs.AppendText("Подключаемся к терминалу Quik..." + Environment.NewLine); var quikFactory = new QuikFactory(); var options = QuikClientOptions.GetDefault(); _quik = quikFactory.Create(options); // инициализируем объект Quik //_quik = new Quik(34136, new InMemoryStorage()); // отладочный вариант var transactionManagerFactory = new TransactionManagerFactory(); _transactionManager = transactionManagerFactory.Create(_quik, TransactionManagerOptions.GetDefault()); } catch { textBoxLogs.AppendText("Ошибка инициализации объекта Quik." + Environment.NewLine); } if (_quik != null) { textBoxLogs.AppendText("Экземпляр Quik создан." + Environment.NewLine); try { textBoxLogs.AppendText("Получаем статус соединения с сервером..." + Environment.NewLine); isServerConnected = _quik.Functions.Service.IsConnectedAsync().Result; if (isServerConnected) { textBoxLogs.AppendText("Соединение с сервером установлено." + Environment.NewLine); buttonStartStop.Enabled = true; } else { textBoxLogs.AppendText("Соединение с сервером НЕ установлено." + Environment.NewLine); buttonStartStop.Enabled = false; } } catch { textBoxLogs.AppendText("Неудачная попытка получить статус соединения с сервером." + Environment.NewLine); } } }
void GetBaseParam(IQuik quik, string secCode, string _classCode) { try { securityCode = secCode; classCode = _classCode; if (quik != null) { if (classCode != null && classCode != "") { try { name = quik.Functions.Workstation.GetSecurityInfoAsync(classCode, securityCode).Result.ShortName; accountID = quik.Functions.TableRows.GetTradeAccountAsync(classCode).Result; firmID = quik.Functions.Class.GetClassInfoAsync(classCode).Result.FirmId; //step = Convert.ToDecimal(quik.Trading.GetParamEx(classCode, securityCode, "SEC_PRICE_STEP").Result.ParamValue.Replace('.', separator)); //priceAccuracy = Convert.ToInt32(Convert.ToDouble(quik.Trading.GetParamEx(classCode, securityCode, "SEC_SCALE").Result.ParamValue.Replace('.', separator))); step = Convert.ToDecimal(quik.Functions.Workstation.GetParamExAsync(classCode, securityCode, ParamName.SEC_PRICE_STEP).Result.ParamValue.Replace('.', separator)); priceAccuracy = Convert.ToInt32(Convert.ToDouble(quik.Functions.Workstation.GetParamExAsync(classCode, securityCode, ParamName.SEC_SCALE).Result.ParamValue.Replace('.', separator))); } catch (Exception e) { Console.WriteLine("Tool.GetBaseParam. Ошибка получения наименования для " + securityCode + ": " + e.Message); } if (classCode == "SPBFUT") { Console.WriteLine("Получаем 'guaranteeProviding'."); lot = 1; //guaranteeProviding = Convert.ToDouble(quik.Trading.GetParamEx(classCode, securityCode, "BUYDEPO").Result.ParamValue.Replace('.', separator)); guaranteeProviding = Convert.ToDouble(quik.Functions.Workstation.GetParamExAsync(classCode, securityCode, ParamName.BUYDEPO).Result.ParamValue.Replace('.', separator)); } else { Console.WriteLine("Получаем 'lot'."); //lot = Convert.ToInt32(Convert.ToDouble(quik.Trading.GetParamEx(classCode, securityCode, "LOTSIZE").Result.ParamValue.Replace('.', separator))); lot = Convert.ToInt32(Convert.ToDouble(quik.Functions.Workstation.GetParamExAsync(classCode, securityCode, ParamName.LOTSIZE).Result.ParamValue.Replace('.', separator))); guaranteeProviding = 0; } } else { Console.WriteLine("Tool.GetBaseParam. Ошибка: classCode не определен."); lot = 0; guaranteeProviding = 0; } } else { Console.WriteLine("Tool.GetBaseParam. quik = null !"); } } catch (NullReferenceException e) { Console.WriteLine("Ошибка NullReferenceException в методе GetBaseParam: " + e.Message); } catch (Exception e) { Console.WriteLine("Ошибка в методе GetBaseParam: " + e.Message); } }
public void SetEventSender(IQuik quik) { _quik = quik; }
/// <summary> /// Конструктор класса /// </summary> /// <param name="_quik"></param> /// <param name="securityCode">Код инструмента</param> /// <param name="classCode">Код класса</param> public Tool(IQuik quik, string securityCode_, string _classCode) { _quik = quik; GetBaseParam(quik, securityCode_, _classCode); }
void OnDepoLimitDo(IQuik quik, DepoLimitEx depLimit) { AppendText2TextBox(textBoxLogsWindow, "Вызвано событие OnDepoLimit (изменение бумажного лимита)..." + Environment.NewLine); AppendText2TextBox(textBoxLogsWindow, "Заблокировано на покупку количества лотов - " + depLimit.LockedBuy + Environment.NewLine); }
/// <summary> /// Конструктор класса /// </summary> /// <param name="_quik"></param> /// <param name="securityCode">Код инструмента</param> /// <param name="classCode">Код класса</param> /// <param name="koefSlip">Коэффициент проскальзывания</param> public Tool(IQuik quik, string securityCode_, string _classCode, int koefSlip) { _quik = quik; GetBaseParam(quik, securityCode_, _classCode, koefSlip); }