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

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 35 След.
Подкиньте идею
 
Цитата
Старатель написал:
Цитата
Nikolay написал:
Если источник-приемник один, то достаточно в источнике открыть файл в режиме записи, а в приемнике в режиме чтения и просто проверять новые данные в этом файле через read("*l").
Можно и так. Тогда отпадает необходимость в открытии/зактытии/удалении файлов, что затратно.
При частой записи данных файл обмена может сильно разрастись. В этом случае есть сомнения в скорости сброса данных на диск.
Маленькие файлы кешируются в памяти операционной системой, а большие? Не получится ли  так, что каждый новый flush будет дольше предыдущего?

Цитата
Игорь Б написал:
Я делаю так же, только с одним файлом. Передатчик создает файл и пишет туда инфу. Приемник смотрит наличие этого файла. Для него это флаг, что можно читать свежую инфу. Он (приемник) ее читает и удаляет файл. Для передатчика отсутствие файла означает, что файл прочитан и можно создавать файл для передачи новой инфы. Если это и хуже варианта с двумя файлами, то интересно чем?  
Думаю, не хуже. Но в обоих случаях при одновременном открытии файла обмена несколькими источниками гипотетически часть данных может быть потеряна.

Цитата
Владимир написал:
файл - один, но для каждого скрипта выделяется собственное пространство (фиксированного объёма). Далее они читают и пишут только в свои зоны, а общий диспетчер (который эту таблицу формирует) ставит флаги "прочитано, можно писать следующую порцию".
Вариант, заслуживающий внимания.

Ещё вариант: читать/писать под локом. Файл один, открывается один раз, при остановке скрипта закрывается. Данные записываются в режиме изменения в начало файла, сообщение добивается нулями до фиксированной длины.
Подкиньте идею
 
Цитата
Nikolay написал:
Конечно, все это для обмена большими объемами и несколькими источниками-потребителями. Если данных мало и они редки, то все это излишне.
ТС задал вопрос по выводу данных в общую визуальную таблицу. Врядли там большие объёмы данных.

Цитата
Nikolay написал:
Если пара одна, то это приведет к тому, что все будут ждать пока он освободится.
А в других перечисленных вами вариантах ждать не будут?

Цитата
Nikolay написал:
Если источник-приемник один, то достаточно в источнике открыть файл в режиме записи, а в приемнике в режиме чтения и просто проверять новые данные в этом файле через read("*l").
Можно и так. Тогда отпадает необходимость в открытии/зактытии/удалении файлов, что затратно.
Подкиньте идею
 
Цитата
Nikolay написал:
Это надо для каждый пары источник-приемник создавать пару файлов. Как только несколько писателей, с двумя файлами может быть блокировка.
Второй файл как раз служит для писателей индикатором, что первый файл занят, и запись не возможна.
Как только приёмник прочитает данные, он удаляет 2-й файл, что сигнализирует о возможности записи.
Т.е. организуются синхронные запись/чтение.

Кстати, ни разу не видел, блокировок файлов, одновременно открытых несколькими Lua-скриптами.
Если файл открыт другим приложением, то, да, было.
Подкиньте идею
 
Цитата
Kolossi написал:
Номер окна выдает каждый раз следующий.16-17-18-19... и так по порядку каждый раз при убиении и запуске скрипта.
Так и есть. При перезапуске скрипта идентификаторы новых окон увеличиваются.

Цитата
Nikolay написал:
Вариант 3 - файлы. Но взаимные блокировки будет проблемой.
Вот тут пример организации обмена с двумя файлами: 1-й файл для передачи данных, 2-й - пустой файл, служит флагом для индикации готовности данных к считыванию.
Подкиньте идею
 
Цитата
s_mike@rambler.ru написал:
Имея номер окна, можно писать в него из любых скриптов.
Не знаю, может у меня версия квика какая-то другая. Но нумерация окон не сквозная, у каждого скрипта своя, начинающаяся с 1.
Т.е., идентификаторы окон разных скриптов могут совпадать. И писать в окно другого скрипта не получается.
Как поставить заявку на LUA с переносом
 
Сохраните Lua-скрипт в кодировке ANSI (Win-1251)
Самый быстрый способ получить данные по инструменту
 
Цитата
Алексей Злобин написал:
если мне достаточно цену сделки определить...то какой метод более  эффективный?
Зависит от контекста.
Если не нужны цены каждой сделки, то эффективней - getParamEx2
Самый быстрый способ получить данные по инструменту
 
Скрытый текст

Цитата
Алексей Злобин написал:
нужна лучшая цена спроса/предложения
Цитата
Алексей Злобин написал:
Какой способ более эффективный?
Тот, который даёт нужную информацию - getParamEx2.
В OnAllTrade спроса/предложения нет.
Самый быстрый способ получить данные по инструменту
 
ParamRequest только заказывает получение параметров с сервера.
Сами значения параметров можно получить в getParamEx2. Т.ч., 3 + 1 - это один способ.
Цитата
Алексей Злобин написал:
нужна лучшая цена спроса/предложения
Самый быстрый способ получить данные по инструменту
 
ParamRequest только заказывает получение параметров с сервера.
Сами значения параметров можно получить в getParamEx2. Т.ч., 3 + 1 - это один способ.
Цитата
Алексей Злобин написал:
нужна лучшая цена спроса/предложения
Самый быстрый способ получить данные по инструменту
 
ParamRequest только заказывает получение параметров с сервера.
Сами значения параметров можно получить в getParamEx2. Т.ч., 3 + 1 - это один способ.
Цитата
Алексей Злобин написал:
нужна лучшая цена спроса/предложения
Перестают работать события SetTableNotificationCallback
 
При нажатии клавиш с кодами 107 (+), 109 (-), 111 (/) на цифровом блоке клавиатуры не работают события QTABLE_CHAR и QTABLE_VKEY.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Чтобы обход таблицы был более корректным, изменим тестовый скрипт, так, чтобы добавление и удаление полей таблицы осуществлялось в одном потоке:
Скрытый текст

Ошибка "invalid key to 'next'" никуда не делась.
Для форсирования: перезаказать все обезличенные сделки.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Цитата
Roman Azarov написал:
С некоторой вероятностью может появиться следующая ошибка?
Верно

Цитата
Roman Azarov написал:
У себя подобного за целый день не увидели
Можете форсировать события:
Скрытый текст
и сделать перезаказ всех обезличенных сделок.
Изменить версию Lua с 5.4.1 до 5.4.2
 
В Lua 5.3 и Lua 5.4:
Цитата
invalid key to 'next'
Изменить версию Lua с 5.4.1 до 5.4.2
 
Существует ненулевая вероятность, что сборщик придёт как раз во время обхода таблицы в одном из потоков.
Скрытый текст
Кривые шибки в QLua
 
QUIK v.8.11.0.66, Lua 5.4
Однократная ошибка
Цитата
attempt to call a nil value
в цикле for in pairs в main:
Код
local T = {}

function main()

    while run do
      ...
        for k, v in pairs(T) do  -- тут ошибка
          ...
        end
      ...
      sleep(1)
    end

end
stack traceback:
Цитата
in for iterator 'for iterator'

На момент возникновения ошибки таблица T была пуста: за время работы (3 часа) робота в таблицу элементы не добавлялись.
Написать тестовый скрипт для воспроизведения или повторить ошибку не удалось.
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
Цитата
swerg написал:
Согласитесь, то, что речь про демо-сервер
Да, как оказалось, отсутствие canceled_uid в заявках для "KILL_ORDER" относится к только демо-серверу.
В боевом квике все заявки без canceled_uid были сняты "MOVE_ORDERS".
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
Roman Azarov,
В заявках, снятых транзакцией "KILL_ORDER", не заполняется UID снявшего, если транзакция снята вскоре после выставления. В 8.11 наблюдается в junior.
В заявках, снятых в результате транзакций "MOVE_ORDERS" на FORTS и "Изменение заявки" на ФР, UID снявшего не заполняется в любом случае. Наблюдается как на демо, так и на боевом.

Будете ли вы это исправлять в своём ПО - это ваше решение.
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
Хотя инициатором "MOVE_ORDERS" был пользователь. Иногда, не сразу разберёшь...
Логичнее всё же проставлять canceled_uid
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
Цитата
Старатель написал:
Для "MOVE_ORDERS" актуально.
Видимо, canceled_uid = 0 - торговая система.
Вопрос можно пока закрывать, спасибо.
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
В боевом квике v.8.11 для "KILL_ORDER" вопрос снимается.
Для "MOVE_ORDERS" актуально.
Отладка QUIK 8.11
 
Цитата
Anton написал:
Так-то компилятор (одного файла) выглядит вот так и запускается в самом квике
Скомпилил библиотеку в 4к строк данным скриптом и в luac54.exe по ссылке выше. Результаты совпадают до байта.
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
И ещё: у снятой заявки в результате транзакции "MOVE_ORDERS" вообще не заполняется UID снявшего.

Цитата
Roman Azarov написал:
Действительно наблюдаем подобное поведение.
Я не понял: наблюдаете или нет? Запустите предложенный скрипт на своём демо.
Метки
 
Цитата
Andrey Bezrukov написал:
Зарегистрировали пожелание на возврат возможности изменения прозрачности меток и их фона из окна настроек метки.
У программиста всегда будет работа
Индикатор объема Volume, Корректность индикатора под сомнением
 
Цитата
Евгений написал:
растет цена или падает на свече тоже видно на свечках
На свече цены. Это надо ещё виртуальную линию провести от объёма к свече цены, и попасть в правильную. При мелком масштабе - не очевидно.

Цитата
Евгений написал:
сигнал индикатора объема в том и состоит чтобы видеть быстро скачки объемов
Скачки объёмов сразу видно, и цветовая индикация тут не помощник, имхо.
Ну раскрасили вы объёмы по росту-падению. Тут объём вырос на два лота, тут - упал, какая разница?
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
swerg,
canceled_uid - это UID снявшего заявку. Смотреть можно в скрипте или в визуальной таблице заявок.

Цитата
Roman Azarov написал:
Уточните, пожалуйста, версию терминала, на котором была обнаружена проблема.
Версия любая, вплоть до 8.11
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
Цитата
Anton написал:
Что будет, если в OnTransReply строку run = nil перенести после sendTransaction?
Можно эту строку вообще убрать, без разницы.

Цитата
Anton написал:
Зе пойнт что уже во время sendTransaction в колбеке скрипт мертв и что там серверу на самом деле посылается - загадка.
KILL_ORDER посылается, раз заявка снята. А заполнение полей в заявке - это уже дело сервера.
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
Цитата
Anton написал:
мейн завершается раньше sendTransaction из колбека
Как это должно повлиять на заполнение поля сервером?
Индикатор объема Volume, Корректность индикатора под сомнением
 
Цитата
Евгений написал:
При присвоении индикатору объема Volume цветовых настроек с учетом цвета для роста и падения учитывается рост и падение свечи
Вроде, норм, так и должно быть.

Цитата
Евгений написал:
Должно быть так: Цвет столбца гистограммы меняется в зависимости от предыдущего объема
Больше, меньше и так видно
У снятой заявки не заполняется поле canceled_uid, если заявка снята вскоре после выставления
 
Пример
Скрытый текст
Как определить абсолютный путь к исполняемому файлу lua?
 
Цитата
TGB написал:
вариант с локальным объявлением  gcrunner
Так __gc вызывается до OnInit
Скрытый текст

Убираем какую-нибудь строку, например
Код
file:write("OnInit\n")
и срабатывает при вызове collectgarbage. Как-то так.

Цитата
TGB написал:
вариант с локальным объявлением  gcrunner  не работает в QLua 5.3.5 для финализации скрипта.
Без collectgarbage сработает и для финализации.
Как определить абсолютный путь к исполняемому файлу lua?
 
Цитата
TGB написал:
Цитата
Старатель написал:
Цитата TGB  написал:-- collectgarbage ()  ---  Если эту строку раскомментировать и при этом local gcrunner = {}, то при запуске collectgarbage () сработает __gc.
Вроде, не срабатывает.
  Здравствуйте!
При этом необходимо, чтобы gcrunner был объявлен локальным:       local gcrunner = {}
__gc срабатывает до вызова collectgarbage, возможно при автоматической сборке.
Как определить абсолютный путь к исполняемому файлу lua?
 
Цитата
TGB написал:
-- collectgarbage ()  ---  Если эту строку раскомментировать и при этом local gcrunner = {}, то при запуске collectgarbage () сработает __gc.
Вроде, не срабатывает.
Не работают горячие клавиши
 
При активном окне "Доступные скрипты" не работают никакие горячие клавиши.
Отладка QUIK 8.11
 
Цитата
Старатель написал:
Очень похоже
Хотя, может, из другой оперы...
Отладка QUIK 8.11
 
Цитата
Евгений написал:
Key removed from a table during traversal may not be accepted by 'next'.
Очень похоже:
https://forum.quik.ru/messages/forum10/message49163/topic5802/#message49163

Цитата
TGB написал:
при существующей архитектуре обработки событий в QLua, уборка мусора в нем должна быть потокобезопасной
Наверное, придётся согласиться ))
На демо сервере junior quik не передается таблица firms при смене пользователя
 
Цитата
Nikolay написал:
По какому признаку мне понять, что пока рано идти и смотреть позицию в таблице futures_client_holding?
Цитата
Andrey Bezrukov написал:
можем зарегистрировать пожелание на индикацию в скрипте о том, что необходимые для отображения таблиц данные были получены с сервера после очистки

Может, будет полезно добавить трансляцию таблицы sys_events со шлюза?
Скрытый текст
Highlight с дробным timeout, не работает, но возвращает true
 
Было бы неплохо в руководстве указывать тип данных, как для передаваемых параметров, так и возвращаемых, не number, а dooble или integer, раз уж теперь это важно.
Отладка QUIK 8.11
 
Цитата
Александр написал:
Как понять в каком окружении запущен скрипт?
_VERSION
Отладка QUIK 8.11
 
После этой ошибки при закрытии QUIK (крестиком) с остановленными скриптами - падение с дампом
Отладка QUIK 8.11
 
Lua 5.3.5 в QUIK 8.11 в этом тесте падает с ошибкой
Цитата
Critical error ACCESS_VIOLATION in script
Про Lua 5.4.1 пока сказать ничего могу.
Звуки в Qlua, Вопрос по звуковой индикации
 
Код
os.execute('start "SoundPlayer" /b "cmd /c PowerShell -c (New-Object Media.SoundPlayer "' .. File .. '").PlaySync();')
Зависание QUIK
 
Отправлял три дампа. Ответили:
Цитата
есть синхронизационная ошибка возникающая в момент остановки скрипта. Мы исправим её в очередном обновлении ПО.
Цитата
Речь идет об аварийной остановке скрипта из-за ошибки, сообщение о которой Вы не получаете по причине зависания терминала.
Думаю, это ошибки вида: раз, два
Об устранении самой проблемы, из-за которой возникают ошибки в рабочих скриптах, ни слова.

А тем временем поймал ещё одно зависание, уже в колбеке.
Тестовый скрипт для воспроизведения:
Скрытый текст
Запустил 4 скрипта. Через несколько часов квик повесился.
Отключение горизонтальных полос прокруток на графиках цен
 
Цитата
Andrey Bezrukov написал:
Мы постараемся рассмотреть его и сообщить Вам результаты анализа.
Рассмотреть пока не удалось?
Отключение горизонтальных полос прокруток на графиках цен
 
+1
Некорректная выгрузка DLL при завершении скрипта, Некорректная выгрузка DLL при завершении скрипта
 
Цитата
Виталий написал:
Код
  Critical error ACCESS_VIOLATION  in  script 
  

https://forum.quik.ru/messages/forum1/message50121/topic5947/#message50121
Createsource и смена сессии
 
Цитата
Egor Zaytsev написал:
Вы можете написать вопрос здесь, обязательно он будет отвечен.

Похоже, сообщение не дошло до адресата.

Доступные скрипты, Некорректное поведение в режиме "Показывать на всех вкладках"
 
На видео окну с графиком ставлю "Показывать на всех вкладках". Остальные окна размещаю поверх него.
Скрытый текст

Переключаюсь на вкладку 2 и сразу возвращаюсь на вкладку 1. В результате окна перетасовались
Скрытый текст

Кто-нибудь, кроме саппорта, считает такое поведение окон корректным?
Задержка при поиске инструментов
 
Цитата
Roman Azarov написал:
У себя подобного поведения не наблюдаем.
Нужно не на игровом квичке смотреть: в нём инструментов на порядок меньше.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 35 След.
Наверх