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

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

Страницы: Пред. 1 2 3 4 5 6 7 След.
Добавить функции для отложения выполнения колбеков
 
Imersio Arrigo, во-первых проигнорированный колбек не будет исоплнен повторно. Во-вторых колбек вызванный при обработке очереди этого же колбека создает потерю данных.

Не было бы проблемы - не было бы просьбы её решить.
Добавить функции для отложения выполнения колбеков
 
https://forum.quik.ru/messages/forum10/message55112/topic6356/#message55112

Добавить функции вида pauseCallbacks и resumeCallbacks, где первая приостанавливает вызовы многопоточных колбеков, а вторая возобновляет. Использование таких функций позволит избежать потери данных и обрушения скриптов в некоторых ситуациях.
Отладка QUIK 8.13
 
Владимир, ну тогда новую модель API в студию. А то губами шлёпать это не мешки ворочать.
Отладка QUIK 8.13
 
Владимир, интерфейс тут и так минимальный, слишком скудный и с неполным покрытием я бы сказал. Его надо расширять и углублять, а вы наоборот кастрировать предлагаете. При том что по итогу юзерам весь этот функционал придётся велосипедить самостоятельно, то есть в области простоты пользования будет отрицательный рост что называется.
Получать объемы сделок
 
Старатель, в Lua5.1 лок снимается в кажом цикле ВМ, в последующих версиях - только когда это требуется.
Отладка QUIK 8.13
 
Старатель, локи снимаются автоматически при вызове любой С-функции а также при выделении памяти.

* любая функция QUIK
* любая функция Lua (все библиотечные функции + pairs, next, getmetatable и т.п.)
* любая функция из внешней DLL
* любая операция со строковым результатом
* любая операция по созданию новых объектов
Откуда брать идентификатор транзакции trans_id или же он рандомиться?
 
Инкрементация это самый надежный способ. При наличии нескольких источников транзакций, каждый из них приклеивает к своему внутреннему номеру транзкции свой глобальный уникальный идентификатор, что обеспечивает уникальность чисел.
Отладка QUIK 8.13
 
TGB, изестный интернетный феномен - когда кто-то несет чушь, люди хотят такое недоразумение исправить. Когда предъявляют исходники или дизассемблер или хотя бы логически жёсткую цепочку, тогда есть разговор. Когда говорят "ну у меня вот в моем игрушечном стенде все работает" и удобно игнорируют то что у других людей проблемы никуда не делись - это чушь. Впрочем вы товарищ скатываетесь в такой же уровень самоуверенной шизофазии как Владимир так что вас тоже скоро буду игнорировать наотрез. Если вдруг забыли, напоминаю что по вашему-же умозаключению мои навыки и/или познания гораздо превосходят ваши.
Отладка QUIK 8.13
 
TGB, Если бы у вас были весомые аргументы, то был бы другой разговор. Но у вас аргумент уровня "works on my machine", причём только для версии 8.13.0 а не 8.13.1, и поверх этого ваш код тестирует совершенно другой вид ошибки. Хэт-трик просто.
Отладка QUIK 8.13
 
TGB, между официальной документацией и "мне так кажется" от рандома в интернете, выбор несложный.
Отладка QUIK 8.13
 
TGB, прочитал логи изменений на обоих языках, ничего про такого рода ошибки не увидел.
Отладка QUIK 8.13
 
TGB, судя по всему не было.

https://forum.quik.ru/messages/forum10/message54811/topic5823/#message54811
Telegram-каналы в таблицу новостей, Добавить telegram-каналы в агентства
 
Контр-предложение: добавить API для работы с таблицей новостей, чтобы можно было впоследствии разрабатывать скрипты для загрузки новостей с различных платформ.
Отладка QUIK 8.13
 
TGB, такого рода изменения падают скорее в область "защиты от дурака". Что Эйнштейн по этому поводу думал мы все знаем, Мёрфи еще добавил что на защиту от большого дурака попросту находится еще больший дурак, так что ничего свыше санитизации входных данных делать не требуется - особо одарённые всё равно сломают. С учётом того, что такая ситуация возникает в настолько маргинальных сценариях, что само явление обнаружено было только в синтетическом тесте, считаю что делать патчи - тем более хакать сам язык Lua - здесь нецелесообразно. Достаточно просто упомянуть в документации, что голая арифметика и булевая логика вообще безничего в численном цикле может завесить систему. Также смею заметить что обсуждение этого изменения представляет собой байкшеддинг, и вместо лёгких задач надо бы решать важные - то что прерывания иногда разрушают стек и вызывают обрушение скрипта, например.
Отладка QUIK 8.13
 
На мой взгляд достаточно просто добавить в инструкцию предупреждение, что код, не вызывающий никаких С-функций и не создающий никаких объектов в памяти, не может быть прерван и соответственно может создавать зависания до окончания выполнения.


Предложить пользователям вставить sleep(0) во внешних циклах при отсутствии каких-либо других операций, снимающих лок.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Баги были есть и будут. Тут есть два подхода: постоянно обновляться до самой свежей версии, в процессе чего что-то может сломаться, либо выбрать версию и сидеть на ней всё обозримое будущее, а с багами люди разберутся на месте.
Рисование отрезка (тренда) с "шифтом", сложно нарисовать строго горизонтальный отрезок.
 
Есть кнопка которая рисует строго горизонтальную линию.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
После 15 лет общения с людьми посредственного уровня программирования но очень высокого самомнения (вроде вас двоих) я перестал считать нужным удерживать нужный курс беседы когда фокус меняется с посредственного программирования на высокое самомнение.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Таблетки примите, уважаемый.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Старатель,  аргументы я привел, вы их благополучно проигнорировали. Тут что называется нами три типа людей: есть джентльмены которые соглашаются, есть обезьяны которые начинают спорить с задокументированными и/или воспроизводимыми вещами, и есть такие вот индивиды которые просто делают вид что ничего сказано и не было. Неприятно когда просишь обосновать что-то думая что умнее всех и никто ничего не скажет, а кто-то берет и обосновывает, понимаю.

Совет от профи: просто не работайте с одной и той же памятью из разных тредов, вот и все. В луа конечно мутексов нету, уж не предусмотрено многопоточности на уровне вм, просто в арке люди слову на глобус натягивают. Но вам родина нафига двойную буферизацию дала?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
TGB, подразумевая что заспавнить вторую вм с аргументами это сложная и нетривиальная задача. Можно конечно изголяться чтобы например глобалки сами синхронизировались, но это вы уже сами себе Буратино.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Classics are classics for a reason. На русский не переводятся.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
По поводу многопоточности кстати. Существует классические (т.е. не родом из пьяного угара) имплементации, например LuaLanes. Советую такого рода библиотеки использовать.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Старатель, посты тех кто жалуется на язык читаю про диагонали.


https://lmgtfy.app/?q=lua+remove+from+table+in+loop

https://forum.quik.ru/forum10/topic5294/
Очистить стол - N операций вм и N операций гц. Заменить пустым - 1 операция вм и N+1 операций гц.

То что вам поенепременно надо использовать  непотокобезопасные методы в многопоточной программе - тут что называется  своих мозгов в чужую голову не вставишь.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Старатель, sinsert sremove.


То что небо голубое мне тоже обосновать? Я понимаю что если вы живете в пещере то вам это неочевидно, но всё же.
Отладка QUIK 8.13
 
Евгений,у вас message1 и message разные переменные.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Старатель, ходить по массиву можно обычными функциями, а удалять/добавлять значения надо потокобезопасными. Вообще, удалять значения из массива в цикле по этому же массиву это плохая практика; вы тут судя по всему просто очищаете стол, вместо этого можно просто создать пустой - это не только надежнее и проще, но еще и работает быстрее.
Изменить версию Lua с 5.4.1 до 5.4.2
 
Если у вас колбеки могут изменять столы, то нужно пользоваться потокобезопасными функциями.
Отладка QUIK 8.13
 
Евгений, да, ваш браузер окончательно скуколдился. Пора переходить на Google Chrome или Microsoft Edge. Для мазохистов еще есть Brave, Opera и старые форки файрфокса.
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Kolossi, да. Если ждать в цикле пока количество свечек станет больше 0, то видно что значение прыгает от 0 сразу к 5000 (или сколько свечек вернёт брокер + имеется в архиве).
Получение тикеров инсрументов
 
getClassSecurities ( class )
Событие получения данных всех таблиц и графиков после подключения к серверу
 
Kolossi, это неважно - размер датасорца меняется в момент завершения загрузки данных. При работе с колбеками тоже неважно - они явно указывают какая свеча была загружена.
Получать объемы сделок
 
Владимир, кстати вынужден согласиться что здесь колбеки действительно работают как прерывания. Когда я спорил по этому вопросу я допустил ошибку, что предрассудил будто в QUIK используется такая же простая и адекватная система многопоточности скриптовых языков как и во всём остальном мире.
Получать объемы сделок
 
Таки нет. Колбеки приходят когда им удобно. При этом тред скрипта может  прерываться в любой точке либо не прерываться вообще (с зависанием QUIK) по  велению левой пятки хоста и оптимизатора байткода.

Судя по всему в примере просто sleep(0) занимает больше всего времени и вероятность что колбек выпадет в этот момент наивысшая.
Получать объемы сделок
 
Код
i = 1e8
s = ""
function OnStop ( )
    i = -i
    s = s .. " stop "
    return 5000
end



function main ( )
    -- sleep = function ( ) end
    while i > 0 do i = i - 1; s = "before "; sleep ( 0 ) s = s .. " after" end
    message ( s )
end
Колбеки дёргаются внутри sleep(). Я помнится говорил что можно так сделать, не знаю было ли уже так сделано к тому моменту. То что весь скрипт работает в одном потоке это хорошо. Теперь осталось отсоединить этот поток от главного треда QUIK. Впрочем Старатель вроде как поймал всю ту же старую ошибку с разрушением стека, может где-то что-то пытается прервать тред скрипта. С многопоточностью в скриптовых языках конечно есть только один надежный подход - не иметь её, на каждый тред создавать отдельную виртуалку.
Как читать диаграмму "Глубина рынка"?, Не понимаю изменений суммарного объема на диаграмме.
 
Длина тени показывает суммарный объем заявок которые могут исполниться по этой цене. Только ступеньки должны быть вровень с заявками, а не свешены вниз.
Получать объемы сделок
 
Владимир, колбеки из главного треда, как в инструкции написано. Может я инструкцию неправильно понял?
Цитата
Во время выполнения функции main() Lua скрипт не мешает работе основного функционала РМ QUIK, таким образом, внутри функции main() использование функции sleep() не приводит к «подвисанию» РМ QUIK

При использовании событийной модели Lua скрипт выполняется в двух потоках: функции обратного вызова выполняются в основном потоке РМ QUIK, а функция main() в дополнительном потоке РМ QUIK
А тут у нас подвисание если НЕ использовать sleep() в main(), и события не приходят.
Получать объемы сделок
 
Хм. При исполнении кода без sleep не то что колбеки не вызываются, а вообще терминал намертво зависает. 8.13.0

Код
i = 1e5
run = true
function OnStop ( )
    message ( "OnStop" )
    run = false
    return 5000
end

--sleep = function ( ) end
function main ( )
    while run and i > 0 do i = i - 1; sleep ( 0 ) end
    message ( tostring ( i ) )
end
Получать объемы сделок
 
Старатель, пардон за вопрос, а колбеки есть-ли вообще? В отсутствие торгов вроде нечему их дёргать.
Получать объемы сделок
 
Anton, дрочение таймаута слипа это не архитектура. Ну и да, примерно также двадцать лет методом ватерфол никто не разрабатывает, потому что в итоге получается долго, дорого и криво, т.к. от апгрейда архитектуры в процессе разработки стараются отказываться.
Получать объемы сделок
 
Ан нет, скорее всего это было бы две инструкции.
Код
LE false 0 N
ADD N N 1
В любом случае не атомарно.
Получать объемы сделок
 
Старатель,надо смотреть в байткод. ЕМНИП это 4 операции - проверка, прыжок, прибавление, запись.
Получать объемы сделок
 
Anton, тут скорее что два старпёра привыкли программировать с аутизмом олимпийского уровня потому что иначе в 2 килобайта 2 мегагерца не влезало, а теперь даже если делать через жопу то всё равно получается микроскопическая нагрузка. По итогу имеем что у старпёров тратится большое количество времени разработки ради экономии на спичках, а могли бы в это время чем-то полезным заниматься. Уже двадцать лет учат людей что не надо делать оптимизацию там, где и так хорошо работает, потому что это пустая трата времени - алё очнись Нео ты обосрался.
Получать объемы сделок
 
Anton, задействовать вытесняющую многопоточность - религия не позволяет. Сильный ОКР, таблетки не пъете, понимаю.
Получать объемы сделок
 
Не вижу причин по которым собственно надо использовать задержки. Загрузится ЦП на 100% да и фиг с ним, сейчас в каждом тостере по 12 ядер. Вы же не батарею на ноутбуке экономите?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
 
Инструкцию не читай @ велосипед изобретай. Классика.
[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения
 
Старатель, у меня там стоял таймаут на пустые источники. Все данные приходили исправно на все заказаные источники.
[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения
 
Точнее сказать, ожидания подключения там вообще нет.
Цитата
Старатель написал:
У вас стоит 10-секундное ожидание после подключения
Перед подключением. Ну и для поста на форуме я нулей от балды бахнул просто, получилось 10 секунд. Тут суть не в этом совершенно.
[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения
 
Старатель, во-первых если раньше с этим кодом каждый раз работало а теперь каждый раз отказы, то не в коде проблема. Во-вторых выбросить пять тысяч сообщений занимает несколько минут так что если просто в ожидании было дело то их бы там было гораздо меньше. И в-третьих это демонстрационный код, в реальном коде ожидание подключения стоит в другом месте - суть от этого не меняется.
[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения
 
Код
 if error then message ( string.format ( "Failed to create data source: %s\n%s %s %s" , error, class, sec, int ) ) end
 
Страницы: Пред. 1 2 3 4 5 6 7 След.
Наверх