Получение данных из таблиц при автостарте

Страницы: 1
RSS
Получение данных из таблиц при автостарте
 
Добрый день.

Есть скрипт, который стартует автоматически при запуске QUIK. В самом начале идёт поиск заданного торгового счета:
Код
function main()
  local Index = SearchItems("trade_accounts", 0, getNumberOf("trade_accounts")-1, function(trdaccid) return trdaccid == Account end, "trdaccid")
  ...
end

В настройках стоит "Очищать данные после смены даты: На сервере (при установлении связи)". Т.е., при первичном старте скрипт берёт данные из кэша.
Запуск QUIK происходит долго, открыто несколько тиковых графиков и индикаторов.
Но обычно скрипт работает нормально. Но сегодня SearchItems не нашла торговый счёт и вернула nil. Повторный запуск скрипта вручную (до подключения к серверу) отработал корректно.

По какой причине данный код мог дать сбой?
Надо делать так, как надо. А как не надо - делать не надо.
 
Есть ли ожидание (либо проверка) чтобы все пакеты были получены с сервера на момент запроса, прежде чем запрашивать данные?
 
Цитата
Старатель написал:
до подключения к серверу
Цитата
Старатель написал:
при первичном старте скрипт берёт данные из кэша.
Надо делать так, как надо. А как не надо - делать не надо.
 
Support?
Надо делать так, как надо. А как не надо - делать не надо.
 
Выяснилось следующее: имеются два списка trade_accounts. Первый - в acnt.dat, второй - в info.wnd.
Первый список загружается вместе с QUIK.
Второй загружается вместе с файлом настроек уже после того, как стартуют скрипты.
И, видимо, так сошлись звёзды, что в этот раз, скрипт обратился к таблице trade_accounts как раз в момент подмены списков, когда таблица была очищена.

Внимание вопрос: это баг или было сделано злонамерено? Почему бы не стартовать скрипты уже после полной загрузки настроек?
Надо делать так, как надо. А как не надо - делать не надо.
 
Здравствуйте, Старатель.

Для выполнения эффективной диагностики - просим написать нам по почте quiksupport@arqatech.com, прислать архив копии рабочего места с используемым "тяжёлым" файлом настроек *.wnd и прочими локальными справочниками в т.ч. acnt.dat, а также минимальный и достаточной для воспроизведения проблемы фрагмент скрипта. Архив необходимо формировать при закрытом рабочем месте QUIK. Перед отправкой убедитесь, что в архиве не будут представлены Ваши файлы ключа *.txk.

В письме просьба явным образом указать данную тему форума.

Заранее большое спасибо!
 
Andrey Bezrukov,
Никакого архива, конечно же, не будет. В этом нет смысла. Вероятность воспроизвести точно такую же ситуацию не высока, и ваш ответ ("проблема не воспроизводится") очевиден.
Вы можете только подтвердить или опровергнуть гипотезу:
Цитата
Старатель написал:
Первый список загружается вместе с QUIK.
Второй загружается вместе с файлом настроек уже после того, как стартуют скрипты.
А заодно проверить в своём коде терминала, что в момент подмены списков таблица trade_accounts сначала очищается, а затем вставляются списки из info.wnd. И в этот момент как раз существует гипотетическая вероятность получения nil из вышеприведённого кода. Как-то так, других вариантов у меня нет.

И зарегистрировать пожелание на доработку: стартовать скрипты после полной загрузки настроек. Если, конечно пользы от этого будет больше, чем вреда.

Пример ещё нескольких функций, которые зависят от последовательности загрузки настроек: getNumCandles, getLinesCount, getCandlesByIndex
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель,

В случае таблицы торговых счетов - действительно, рабочее место сначала загружает их из acnt.dat, если таковой имеется, в противном случае - из используемого файла *.wnd, при наличии этой информации в нём, иначе ждёт данных от сервера.

Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
 
Цитата
Старатель написал:
Andrey Bezrukov,
Никакого архива, конечно же, не будет. В этом нет смысла. Вероятность воспроизвести точно такую же ситуацию не высока, и ваш ответ ("проблема не воспроизводится") очевиден.
Вы можете только подтвердить или опровергнуть гипотезу:
Цитата
Старатель написал:
Первый список загружается вместе с QUIK.
Второй загружается вместе с файлом настроек уже после того, как стартуют скрипты.
А заодно проверить в своём коде терминала, что в момент подмены списков таблица trade_accounts сначала очищается, а затем вставляются списки из info.wnd. И в этот момент как раз существует гипотетическая вероятность получения nil из вышеприведённого кода. Как-то так, других вариантов у меня нет.

И зарегистрировать пожелание на доработку: стартовать скрипты после полной загрузки настроек. Если, конечно пользы от этого будет больше, чем вреда.

Пример ещё нескольких функций, которые зависят от последовательности загрузки настроек: getNumCandles, getLinesCount, getCandlesByIndex
Попробуйте решить подобную проблему путем контроля времени пинга до сервера.
---------------
примечание:
Решал эту проблему давно, поэтому не уверен, что один этот параметр использовал, но помню, что решил.
В настоящее время встраиваю роботов в индикаторы, поэтому подобные скрипты где-то в архивах пылятся.  
Страницы: 1
Читают тему
Наверх