Старатель (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 10 11 12 13 14 15 16 17 18 19 20 ... 46 След.
Зависание QUIK
 
Цитата
Anton написал:
Цитата
Старатель написал:
А логические ошибки, когда в непредсказуемом месте вылезает nil, типа attempt to compare number with nil и т.п., они могут как-то в будущем повлиять? QUIK перегружать нужно?
Когда после ошибки в одном скрипте начинают сыпаться ошибки в других, или в нем же после рестарта, это показывает, что стек был покоцан, дальше уже как повезет, насколько сильно и т.д., где-то закончится небольшой утечкой, где-то уже серьезные повреждения, которые вылезут позже.
Я про логические ошибки скрипта, когда где-то что-то недосмотрел, не проверил на nil полученные данные и т.п. И в какой-то момент вместо данных там оказался nil. Скрипт остановился. Это может повлиять на будущую работу?
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
JUNIOR 1 [91.209.122.220:15100:info]
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
А логические ошибки, когда в непредсказуемом месте вылезает nil, типа attempt to compare number with nil и т.п., они могут как-то в будущем повлиять? QUIK перегружать нужно?
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
Цитата
Старатель написал:
Получил ошибку  
Цитата
stack overflow
в строке  
Код
   local  arg  =  { .. .}  
(Это с оригинальной qlua.dll пока)
Не, знаю, после долгого тестирования, QUIK ошибки накапливает или чё?
После перезапуска скрипта словил ошибку
Цитата
bad argument #2 to 'write' (string expected, got FILE*)
в строке
Код
file:write(s)

Я понимаю, стресс-тест, в торговых скриптах столько циклов гонять никто не будет.

Но в боевом квике в реальных условиях всё же виснет на строке
Код
local arg = {...}
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
Цитата
Anton написал:
Приведенный здесь тест у меня не воспроизвелся
Ну тут как повезёт: может и несколько дней проработать без зависаний.

Цитата
Anton написал:
не желаете патченую qlua.dll запробовать со своими тестами?
Погоняю с вашей библиотекой, посмотрим.

Цитата
Anton написал:
Особо нагружать боевой сервер я стесняюсь
Так можно на демке гонять.
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
Получил ошибку
Цитата
stack overflow
в строке
Код
local arg = {...}
(Это с оригинальной qlua.dll пока)
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
Код
local run
local file

local function log(s)
  file:seek('set')
  file:write(s)
  file:flush()
end

function c(func, ...)
  log('1')
  local arg = {...}
  log('2')
end

function OnInit(path)
  local err
  file, err = io.open(path..'.log', 'w+')
  if file == nil then
    message(err, 3)
  else
    run = true
  end
end
function OnAllTrade(alltrade)
end
function OnParam(class, sec)
end
function OnStop()
  run = nil
end


local f2 = function() end
function main()
  if not run then return end
    while run do
      for i = 1, 100 do
        log('0')
        c(f2, i, 1, 2, 3)
        log('3')
      end
      sleep(1)
    end
  file:close()
end
В логе:
Цитата
1
Как и в прошлый раз поток main скрипта прибит. Основной поток остался в состоянии ожидания.
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
Похоже, источник проблемы - функция с переменным числом аргументов.
Возникает либо при вызове функции
Код
c(func, ...)
либо при формировании таблицы аргументов
Код
local arg = {...}

Код демонстрационного скрипта:
Код
local run = true

function c(func, ...)  
  local arg = {...}
end

local f1 = function() end
function OnAllTrade(alltrade)
  c(f1, alltrade)
end
function OnParam(class, sec)
end
function OnStop()
  run = nil
end

local f2 = function() end
function main()
    while run do
      for i = 1, 100 do
        c(f2, i, 1, 2, 3)
      end
      sleep(1)
    end
end
Надо делать так, как надо. А как не надо - делать не надо.
Таблица транзакций
 
Цитата
Sergey Gorokhov написал:
Цитата
Старатель написал:
В OnTransReply как прочитать этот параметр?
Такой возможности нет
Можно сделать
Надо делать так, как надо. А как не надо - делать не надо.
Таблица транзакций
 
Цитата
Alexey Ivannikov написал:
Цитата
Старатель написал:
В таблице транзакций параметр "Транзакция" приходит с сервера или клиент сам вычисляет его?
Добрый день.

С сервера.
В OnTransReply как прочитать этот параметр?
Надо делать так, как надо. А как не надо - делать не надо.
Кривые шибки в QLua
 
Цитата
Anton написал:
у вас всегда параллельно со скриптами работает хоть один луа-индикатор
Если вопрос по скриптам из текущей и этой тем, то нет, в тестовом квике даже графики не открыты.
Открытые окна:
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
Кривые шибки в QLua
 
Скрипт тот же, строка та же: #2
Ошибка
Цитата
attempt to call a nil value
Надо делать так, как надо. А как не надо - делать не надо.
Кривые шибки в QLua
 
Никто и не обещал, что ошибка появляется всегда и сразу.
Можно запустить несколько копий скрипта, как тут, сделать перезаказ обезличенных сделок...
В общем, ошибка именно в этом коде и именно в этом месте присутствует. А как гарантированно воспроизвести - без понятия. Надо смотреть сорцы, откуда там nil.
Надо делать так, как надо. А как не надо - делать не надо.
Таблица транзакций
 
В таблице транзакций параметр "Транзакция" приходит с сервера или клиент сам вычисляет его?

Для транзакций "Переставить заявки" и "Снятие заявки" в поле "Операция" отображается не реальное направление заявки, а всегда - "Купля".
Надо делать так, как надо. А как не надо - делать не надо.
Кривые шибки в QLua
 
Код
local run = true
function OnAllTrade(alltrade)
end
function OnParam(class, sec)
end
function main()
  local getinfo = debug.getinfo
  while run do
    for i = 1, 100 do
      getinfo(1)
    end
    sleep(1)
  end
end
function OnStop()
  run = nil
end

Ошибка в строке getinfo(1)
Цитата
bad argument #1 to 'getinfo' (number expected, got nil)
Надо делать так, как надо. А как не надо - делать не надо.
Кривые шибки в QLua
 
Здесь будут публиковаться кривые ошибки, возникающие, очевидно, из-за двухпоточной схемы работы QLua.
Некоторые ошибки указаны здесь: Потокобезопасные функции в Lua 5.3
Надо делать так, как надо. А как не надо - делать не надо.
Изменяется порядок нахождения сделок в таблице all_trades в зависимости от параметров таблицы все сделки.
 
Цитата
Anton написал:
Цитата
Старатель написал:
Этот флаг никак не должен менять порядок сделок в хранилище
Сам по себе да, а вкупе с шаловливыми ручками? Поставить флажок, накачать чего, снять флажок, накачать еще.
Проверьте. При снятии флага пропущенные сделки закачиваются только при перезаказе. Так что как раз теоретически в пределах одного тикера накрутить невозможно. А что на практике - так это не шаловливые ручки виноваты.
Надо делать так, как надо. А как не надо - делать не надо.
Изменяется порядок нахождения сделок в таблице all_trades в зависимости от параметров таблицы все сделки.
 
Цитата
Anton написал:
флагу "получать с текущего момента"
Этот флаг никак не должен менять порядок сделок в хранилище
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
Цитата
Anton написал:
Результат - уровень рекурсии стоит 1 как влитой.
Погонял ваш тест. Единичка осталась.
Надо делать так, как надо. А как не надо - делать не надо.
Изменяется порядок нахождения сделок в таблице all_trades в зависимости от параметров таблицы все сделки.
 
https://forum.quik.ru/messages/forum10/message38866/topic496/#message38866
Надо делать так, как надо. А как не надо - делать не надо.
Таблица всех сделок
 
Запрашиваемые данные были отправлены 16.10.2019, 03.04.2020
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
Цитата
Anton написал:
Где-то этот лок захвачен и не выпущен, возможно, в одном из (других) скриптов, возможно, косячок в самом квике.
7500 и 5364 - потоки двух скриптов. Они большую часть времени стоят на SleepEx. Один из них, известно точно, периодически просыпается и шлёт отладочную информацию. Так что, лок захвачен явно не ими.
А вот, где поток третьего скрипта, не пойму, может прибит уже?
Скрытый текст


Цитата
Anton написал:
Там совсем другая картина, квик пытается получить колбек через lua_getglobal и падает из-за access violation.
Помимо описанных ошибок и падений в теме, несколько раз были и зависания.
Но зависает не скоро, и написать демонстрационный скрипт, гарантированно приводящий к зависанию в течение разумного времени после запуска не представляется возможным.
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
Цитата
Anton написал:
Квик хочет вызвать колбек OnAllTrade и заполняет для него табличку с очередной сделкой. Все данные из ТВС уже вытащены, почти вся табличка заполнена, в последнюю очередь квик создает вложенную табличку datetime, пытается воткнуть в нее строку "day" и в этот момент виснет на lua_pushstring, как написал выше. В общем, это все мало что дает, косяк где-то в синхронизации все равно.
Anton, спасибо.
Скрытый текст

Скрытый текст
Первые два трейда - это видимо, два скрипта из трёх запущенных. Один из которых, как я написал, выше, раз в минуту шлёт отладочную информацию. Второй просто молча работает (вроде, работает).

А третий скрипт, я также предполагал, что застрял перед вызовом одного из колбеков, потому и не отображается в логе.
Что касается бесконечной рекурсии, то их нет в скрипте. И я почти на 100% уверен, что QUIK "завис" не из-за логической ошибки в скрипте.
За эту версию говорит также тот довод, что неоднократно похожая проблема наблюдалась на скриптах из этой темы.
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
Anton, спасибо.
Скрытый текст
Что можно с этим сделать?

QUIK не совсем завис, а только основной поток находится в ожидании чего-то.
Один из скриптов в main периодически шлёт отладочную информацию через PrintDbgStr.
Надо делать так, как надо. А как не надо - делать не надо.
Склейка графика приводит к сбросу ряда настроек
 
Цитата
Egor Zaytsev написал:
Мы предлагаем исследовать не вам, а нам.

Если склейка (сам этой опцией не пользуюсь) приводит к перезагрузке настроек, то о проблеме сброса фильтров потока всех сделок сообщалось 5 мес. назад:
https://forum.quik.ru/messages/forum1/message43280/topic5160/#message43280
Надо делать так, как надо. А как не надо - делать не надо.
SetCell
 
Это указано и в 6, 7, 8.1 версиях. И там SetCell работает нормально с необязательным пятым параметром
Надо делать так, как надо. А как не надо - делать не надо.
Зависание QUIK
 
Добрый день.

QUIK 8.8.4.3. Стандартная схема оформления.
Иногда после нескольких дней работы зависает. При этом загрузка ЦП процессом 0
Сначала грешил на потокобезопасные функции. Но анализ логов показывает, что зависании происходит вне потокобезопасных функций (но это не точно ))
Можно ли по стеку определить последнюю вызванную QLua функцию?
Надо делать так, как надо. А как не надо - делать не надо.
SetCell
 
Код
id = AllocTable()
AddColumn(id, 1, "", true, QTABLE_STRING_TYPE, 20)
CreateWindow(id)
local col = InsertRow(id, 1)
local value = "Text"
message(tostring(SetCell(id, 1, col, tostring(value), tonumber(value) or 0)))
Надо делать так, как надо. А как не надо - делать не надо.
Преобразование целого числа в строку в QUIK 8.8+
 
Выше пример преобразования числа без потери точности (поэтому format с ним справляется)
А это с потерей точности:
Код
a = 1952336732254970146
b = a + 0.0
print(a == b)
Надо делать так, как надо. А как не надо - делать не надо.
Преобразование целого числа в строку в QUIK 8.8+
 
Цитата
Александр М написал:
проблему не решило, если произошло изменение типа
При преобразовании в double произошла потеря точности. Первоначальное значение никакими ухищрениями уже не вернуть.
Код
a = 1952336732254970112
b = a + 0.0
print(a == b)
Надо делать так, как надо. А как не надо - делать не надо.
SetCell
 
SetCell стал ругаться false на такую конструкцию для строковых ячеек:
Код
SetCell(id, row, col, tostring(value), tonumber(value) or 0)
Надо делать так, как надо. А как не надо - делать не надо.
Потокобезопасные функции в Lua 5.3
 
А у вас студия открывает дамп, созданный диспетчером задач?
Надо делать так, как надо. А как не надо - делать не надо.
MOVE_ORDER на фондовом рынке мос.биржи?
 
На Junior будет этот вид транзакций?
Надо делать так, как надо. А как не надо - делать не надо.
Потокобезопасные функции в Lua 5.3
 
Цитата
Anton написал:
Падает на lua_getglobal. В qlua.dll основным потоком квика вызывается некая функция, она пытается вызвать lua_getglobal(state, "OnAllTrade") и, если успешно, далее заполняет табличку all_trade и вызывает полученную луа-функцию. То есть это как раз место, где вызывается OnAllTrade.
Где вы это смотрите?
Надо делать так, как надо. А как не надо - делать не надо.
Debug function name
 
Анонимная функция
Надо делать так, как надо. А как не надо - делать не надо.
Потокобезопасные функции в Lua 5.3
 
Ложная тревога. Скрипт 4 написан некорректно, потому сделки теряются.
Надо делать так, как надо. А как не надо - делать не надо.
Потокобезопасные функции в Lua 5.3
 
Скрипт 4
Скрытый текст

Запускаю несколько копий. Делаю перезаказ обезличенных сделок. Предполагается, что все скрипты обработают одинаковое количество сделок.
Ан, нет. Спустя чуть больше часа разрываю соединение, чтобы проверить. Часть скриптов потеряла по одной сделке.
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
Отладка QUIK 8.8
 
Вернее так:
Код
SetCell(id, row, col, tostring(value), tonumber(value) or 0)
Надо делать так, как надо. А как не надо - делать не надо.
Потокобезопасные функции в Lua 5.3
 
Скрипт 1 оставляем. Скрипт 2 меняем на Скрипт 3:
Скрытый текст

Можно также запустить несколько копий, чтоб наверняка.
Изредка выскакивает ошибка
Цитата
bad argument #1 to 'ssort' (table expected, got nil)
в строке
Код
table.ssort({0, 0}, function()
Иногда падает.
Причём, может длительное время работать без сбоев. После появления первой ошибки и перезапуска скрипта, ошибки начинают сыпаться чаще.
Надо делать так, как надо. А как не надо - делать не надо.
Отладка QUIK 8.8
 
Ругается false на код для QTABLE_STRING_TYPE:
Код
SetCell(id, row, col, tostring(value), tonumber(value))
Раньше такой код вопросов не вызывал.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Не рассчитывается максимальное возможное количество лотов в заявке
 
Цитата
Anna Lozenko написал:
сформировать архив рабочего места QUIK
Это не моя работа.
Вся необходимая информация, когда и при каких обстоятельствах возникает ошибка, вам предоставлена более трёх месяцев назад:
Цитата
Старатель написал:
После расширения планок в результате стоп-торгов в поле ввода заявки не рассчитывается максимальное возможное количество лотов по ценам выше/ниже каких-то (непонятных) границ (и эти границы не связаны с макс./мин. возможной ценой инструмента).
Цитата
Старатель написал:
после расширения лимитов в следующий клиринг ситуация исправляется
Так, ситуация, скрины, которой представлены в сообщении #5, продолжалась до следующего клиринга 14:00 12.08.20

Есть ощущение, что вы не понимаете, что делаете. Что вы искали через два дня после события - большой вопрос.
Подробно про клиринг, стоп-торги и расширение ценового коридора (планок) можно прочесть на сайте биржи.

В помощь могу написать скрипт:
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
Потокобезопасные функции в Lua 5.3
 
QUIK 8.8.1.5
Можно запустить несколько копий, чтобы наверняка.
Надо делать так, как надо. А как не надо - делать не надо.
Потокобезопасные функции в Lua 5.3
 
Скрипт 1:
Скрытый текст

Скрипт 2:
Скрытый текст

При запущенных обоих скриптах изредка в строке
Код
while #AllTrades > 0 do
возникает странная ошибка:
Цитата
attempt to compare number with function
Для воспроизведения можно Получить заново данные по обезличенным сделкам.
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Не рассчитывается максимальное возможное количество лотов в заявке
 
Anna Lozenko, когда и во сколько пытались воспроизвести?
Надо делать так, как надо. А как не надо - делать не надо.
[BUG] Не рассчитывается максимальное возможное количество лотов в заявке
 
Anna Lozenko, когда и во сколько пытались воспроизвести?
Надо делать так, как надо. А как не надо - делать не надо.
Получение данных из таблиц при автостарте
 
Andrey Bezrukov,
Никакого архива, конечно же, не будет. В этом нет смысла. Вероятность воспроизвести точно такую же ситуацию не высока, и ваш ответ ("проблема не воспроизводится") очевиден.
Вы можете только подтвердить или опровергнуть гипотезу:
Цитата
Старатель написал:
Первый список загружается вместе с QUIK.
Второй загружается вместе с файлом настроек уже после того, как стартуют скрипты.
А заодно проверить в своём коде терминала, что в момент подмены списков таблица trade_accounts сначала очищается, а затем вставляются списки из info.wnd. И в этот момент как раз существует гипотетическая вероятность получения nil из вышеприведённого кода. Как-то так, других вариантов у меня нет.

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

Пример ещё нескольких функций, которые зависят от последовательности загрузки настроек: getNumCandles, getLinesCount, getCandlesByIndex
Надо делать так, как надо. А как не надо - делать не надо.
Таблица текущих торгов
 
При редактировании таблицы текущих торгов параметры, добавленные в правую часть (Заголовки столбцов) убирать из списка "Доступные параметры".
Надо делать так, как надо. А как не надо - делать не надо.
Получение данных из таблиц при автостарте
 
Выяснилось следующее: имеются два списка trade_accounts. Первый - в acnt.dat, второй - в info.wnd.
Первый список загружается вместе с QUIK.
Второй загружается вместе с файлом настроек уже после того, как стартуют скрипты.
И, видимо, так сошлись звёзды, что в этот раз, скрипт обратился к таблице trade_accounts как раз в момент подмены списков, когда таблица была очищена.

Внимание вопрос: это баг или было сделано злонамерено? Почему бы не стартовать скрипты уже после полной загрузки настроек?
Надо делать так, как надо. А как не надо - делать не надо.
session status
 
session_status QUIK заполняет или он едет вместе с позициями из торговой системы?
Надо делать так, как надо. А как не надо - делать не надо.
Получение данных из таблиц при автостарте
 
Support?
Надо делать так, как надо. А как не надо - делать не надо.
Страницы: Пред. 1 ... 10 11 12 13 14 15 16 17 18 19 20 ... 46 След.
Наверх