finsight / QUIKSharp

QUIK# (QUIK Sharp) is the QUIK Lua interface ported to .NET.
Other
231 stars 135 forks source link

Функции подписки и коллбаки #277

Closed Twagg closed 3 years ago

Twagg commented 3 years ago

никак не могу разобраться как работает подписка на обновления стакана/свечей. Запускаю любое приложение из демо. там есть несколько методов обратного ответа от терминала, но ни один не приходит от терминала (как пример одноминутные и пятнадцатиминутные графики), инфы по новым свечам нет.

Что я делаю не так, или я не правильно понял функционал кода? Все подписался, жду ответа от квика (кстати ДЕМО, мб связано с этим?)и количество свечей так и не меняется...

        try
        {
            AppendText2TextBox("Подписываемся на получение исторических данных..." + Environment.NewLine);
            _quik.Candles.Subscribe(tool.ClassCode, tool.SecurityCode, CandleInterval.M1).Wait();
            AppendText2TextBox("Проверяем состояние подписки..." + Environment.NewLine);
            isSubscribedToolCandles = _quik.Candles.IsSubscribed(tool.ClassCode, tool.SecurityCode, CandleInterval.M1).Result;
            if (isSubscribedToolCandles)
            {
                AppendText2TextBox("Получаем исторические данные..." + Environment.NewLine);
                toolCandles = _quik.Candles.GetAllCandles(tool.ClassCode, tool.SecurityCode, CandleInterval.M1).Result;
                AppendText2TextBox("Выводим исторические данные в таблицу..." + Environment.NewLine);

                _quik.Candles.NewCandle += OnNewCandleDo;

            }
            else AppendText2TextBox("Неудачная попытка подписки на исторические данные." + Environment.NewLine);
        }
        catch { AppendText2TextBox("Ошибка получения исторических данных." + Environment.NewLine); }

                _quik.Candles.NewCandle += OnNewCandleDo;

            }
Pr0phet1c commented 3 years ago

что демо-приложение (QuikSharpDemo) пишет в окно логов, когда Вы подписываетесь на получение свечей? Обычно, когда нет каких-либо нестандартных проблем, ничего дополнительно делать не надо. Вы выбираете подписку на свечи, и просто ждете. При получении новой свечи приложение сообщает об этом в логах, строкой которая начинается как "Получена новая свеча: 'Time' = ..."

Twagg commented 3 years ago

Подключаемся к терминалу Quik... Экземпляр Quik создан. Получаем статус соединения с сервером.... Соединение с сервером установлено. Определяем код класса инструмента RIZ0, по списку классов... Определяем код клиента... Создаем экземпляр инструмента RIZ0|SPBFUT... Инструмент RIZ0 создан. Подписываемся на стакан... Подписка на стакан прошла успешно. Подписываемся на колбэк 'OnQuote'... Подписываемся на колбэк 'OnFuturesClientHolding'... Подписываемся на колбэк 'OnDepoLimit'... Подписываемся на получение исторических данных... Проверяем состояние подписки... Получаем исторические данные... Выводим исторические данные в таблицу...

свечи минутные по коду, больше в логе нет ничего... Пробовал и через студию запускать, и экзешником. и дебаг и релиз. кстати версия квика 8.7, не 8.5... это повлиять может на луа?

Pr0phet1c commented 3 years ago

Странно. Если Вы не меняли код, то свечи должны быть 15-минутные. Версия квика на эту функцию не влияет. Вот так выглядит работа демо-приложения у меня (проверил сегодня), в "боевом" терминале: 2020-11-10_13-54-32

Twagg commented 3 years ago

что я делаю не так.

  1. терминал ДЭМО (зависит?)
  2. окна запущены, графики видны
  3. стакан есть
  4. скрипт работает без ошибок в луа
  5. у меня часть полей пустые в КШДэмо...
  6. Код скачал и скомпил заново. Свечи теперь родные, 15 минутные... раньше для оперативности минутки ставил для проверки. image
Pr0phet1c commented 3 years ago
  1. Теоретически возможно. Ранее сталкивался с проблемами, когда название классов инструментов отличались от таковых в "боевом" терминале.
  2. Смущает тот факт, что в демке у Вас не отображаются бид и аск. Это значит, что данные стакана Вам тоже не приходят.

Пока единственное что можно проверить - это название класса для сишки или ришки. Других мыслей у меня нет. Что Вам мешает выполнить проверку в боевом терминале?

Drakus66 commented 3 years ago

Столкнулся с той же проблемой - не приходят обновленные свечи и стакан (не срабатывает событие). Сначала пробовал в своем коде, потом в QuikSharpDemo. Та же ситуация, не срабатывает событие (даже ставил на событие точку остановки). В коде только поменял инструмент на Сбер и таймфрейм на М1

`
if (tool != null && tool.Name != null && tool.Name != "") { Log("Инструмент " + tool.Name + " создан.");

                    Log("Подписываемся на свечи...");

                    _quik.Candles.Subscribe(tool.ClassCode, tool.SecurityCode, CandleInterval.M1).Wait();

                    isSubscribedToolCandels = _quik.Candles.IsSubscribed(tool.ClassCode, tool.SecurityCode, СandleInterval.M1).Result;

                    if (isSubscribedToolCandels)
                    {
                        Log("Подписка на свечи прошла успешно.");
                        _quik.Candles.NewCandle += Candles_NewCandle;

                    }
                    else
                    {
                        Log("Подписка на свечи не удалась.");
                    }
                }

    public void Candles_NewCandle(Candle candle)
    {
        Log(candle.Datetime.ToString() + " " + candle.Close.ToString());
    }`

image

версия QUIK Junior 8.9.0.107

и еще вопрос: может я не внимательно прочитал, не увидел минимальную версию терминала QUIK для работы с библиотекой. Пытался подключиться к демоверсии от ВТБ v8.10.1.1 , не получилось. Потом нашел информацию, что в 8.5 были изменения в lua.

Я новичок в этом деле.

Pr0phet1c commented 3 years ago

По классу инструмента уже вижу, что это "игровой/демо" квик. Не готов комментировать работу библиотеки в этом варианте терминала. Если хотите разобраться - изучайте работоспособность этих функций на QLua.

Twagg commented 3 years ago

вообщем все заработало... я через НуГет обновил все подключаемые библиотеки и после обновления System.Runtime.CompilerServices.Unsafe все завелось... Причем эту библиотеку захотело именно конечное приложение.

Спасибо Pr0phet1c за уделенное время и желание помочь разобраться!

strafly commented 3 years ago

Тоже столкнулся с неработающими коллбэками. На прежней системе (Windows 7) всё работало, а тут поставил 10-ку, последний Visual Studio, QUIK, и коллбэки перестали приходить. И в моём приложении, и в QuikSharpDemo. И в боевом Квике, и в QUIK Junior. Пробовал и на свежем архиве QUIKSharp, и на архиве полугодичной давности. Одно и то же: все прочие функции работают, а коллбэки не приходят. Решение оказалось здесь. Спасибо Igor-san. Через NuGet добавил в своё приложение System.Threading.Tasks.Extensions, и всё заработало как надо. После добавления этого пакета в QuikSharpDemo и там всё стало ОК, сразу bid/ask появились. Microsoft Visual Studio Community 2019, версия 16.8.2 QUIK 8.9.0.107

Pr0phet1c commented 3 years ago

@strafly спасибо за важное замечание. Демо-приложения действительно давно не обновлялись, и я думал, что они должны стабильно работать. Внес необходимые изменения. Думаю, на этом тему можно закрыть.