finsight / QUIKSharp

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

Подключение - Соединение #340

Closed KonstantinReim closed 1 year ago

KonstantinReim commented 1 year ago

Вопросы смотрел. Ответа не нашел или плохо искал. Мой вопрос: Приложение включено, работает все корректно. На ночь терминал квик не выключается, приложение также работает. Утром картина следующая - внешне вроде все хорошо, приложение продолжает работать, но два цикла перестают работать, try catch (Exception ex) ошибки не выдает, но ошибка есть. Мое предположение - в момент перезагрузки сервера брокера (это до начала утренней торговой сессии) видимо происходит какой-то сбой (какой - просто пока не понимаю) и в этот момент что то ломается. Помогите пожалуйста решить эту задачу.

Например этот while отваливается

    private void TradingTime()
    {
        while (true)
        {
            if (quik != null)
            {
                _ = DateTime.TryParse(quik!.Service.GetInfoParam(InfoParams.TRADEDATE).Result, out DateTime tradeDate);
                TradeDate = tradeDate;
                int dayOfWeek = (int)tradeDate.DayOfWeek;

                ServerTimeString = quik!.Service.GetInfoParam(InfoParams.SERVERTIME).Result;
                if (ServerTimeString == "") ServerTimeString = "xx.xx.xx";
                _ = TimeOnly.TryParse(ServerTimeString, out ServerTime);

                if (Connected && dayOfWeek >= DayOfWeek1 && dayOfWeek <= DayOfWeek5
                    && ((ServerTime >= StartTime0 && ServerTime < StopTime0)
                    || (ServerTime >= StartTime1 && ServerTime < StopTime1)
                    || (ServerTime >= StartTime2 && ServerTime < StopTime2)))
                    TimeToTradeStatic = TimeToTrade = true;
                else TimeToTradeStatic = TimeToTrade = false;
            }

            Thread.Sleep(1);
        }
    }
Pr0phet1c commented 1 year ago

Какого-то четкого решение предложить не могу, но вот что могу сообщить из собственного опыта: После реконнектов (в том числе по причине перезагрузки серверов), объект класса Quik часто перестает отвечать, при попытке запросить какую-либо информацию из терминала. Универсального решения я не нашел. Для себя сделал вывод, что работа 24/7, не для терминала QUIK. Сам каждуый день, после окончания вечерней сессии все закрываю и выключаю раб. станцию. По утрам выполняю запуск с нуля. Вам, если сильно принципиально, могу предложить подумать на вариантом обернуть одну из функций Quik в функцию с таймаутом, и в случае срабатывания таймаута пересоздавать экземпляр объекта класса Quik, с последующей реинициализацией робота.

KonstantinReim commented 1 year ago

Спасибо за ответ! В принципе в эту сторону уже и начал думать (пересоздавать экземпляр объекта класса Quik), но решил спросить у более опытных пользователей данной библиотекой, еще раз спасибо!