예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
 void OnFuturesClientHoldingDo(IQuik quik, FuturesClientHolding futPos)
 {
     if (futPos.secCode == tool.SecurityCode)
     {
         futuresPosition = futPos;
     }
 }
예제 #4
0
        /// <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>()));
        }
예제 #5
0
 void OnCandle(IQuik quik, Candle candle)
 {
     if (toolCandles != null)
     {
         NewCandle_to_Table(ref toolCandles, candle);
     }
 }
예제 #6
0
 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);
     }
 }
예제 #7
0
 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);
     }
 }
예제 #8
0
        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);
                }
            }
        }
예제 #9
0
 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);
     }
 }
예제 #10
0
 public TransactionManager(
     IQuik quik,
     IIdProvider idProvider,
     IPersistentStorage persistentStorage,
     ILogger <TransactionManager> logger)
 {
     _quik              = quik;
     _idProvider        = idProvider;
     _persistentStorage = persistentStorage;
     _logger            = logger;
 }
예제 #11
0
 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());
     }
 }
예제 #12
0
 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());
     }
 }
예제 #13
0
        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);
                }
            }
        }
예제 #14
0
    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);
        }
    }
예제 #15
0
 public void SetEventSender(IQuik quik)
 {
     _quik = quik;
 }
예제 #16
0
 /// <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);
 }
예제 #17
0
 void OnDepoLimitDo(IQuik quik, DepoLimitEx depLimit)
 {
     AppendText2TextBox(textBoxLogsWindow, "Вызвано событие OnDepoLimit (изменение бумажного лимита)..." + Environment.NewLine);
     AppendText2TextBox(textBoxLogsWindow, "Заблокировано на покупку количества лотов - " + depLimit.LockedBuy + Environment.NewLine);
 }
예제 #18
0
 /// <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);
 }