Добавить функции для отложения выполнения колбеков
Пользователь
Сообщений: Регистрация: 03.02.2021
29.04.2021 15:25:45
Imersio Arrigo, во-первых проигнорированный колбек не будет исоплнен повторно. Во-вторых колбек вызванный при обработке очереди этого же колбека создает потерю данных.
Не было бы проблемы - не было бы просьбы её решить.
Добавить функции для отложения выполнения колбеков
Пользователь
Сообщений: Регистрация: 03.02.2021
29.04.2021 02:40:24
Добавить функции вида pauseCallbacks и resumeCallbacks, где первая приостанавливает вызовы многопоточных колбеков, а вторая возобновляет. Использование таких функций позволит избежать потери данных и обрушения скриптов в некоторых ситуациях.
Отладка QUIK 8.13
Пользователь
Сообщений: Регистрация: 03.02.2021
29.04.2021 02:28:38
Владимир, ну тогда новую модель API в студию. А то губами шлёпать это не мешки ворочать.
Отладка QUIK 8.13
Пользователь
Сообщений: Регистрация: 03.02.2021
28.04.2021 00:37:57
Владимир, интерфейс тут и так минимальный, слишком скудный и с неполным покрытием я бы сказал. Его надо расширять и углублять, а вы наоборот кастрировать предлагаете. При том что по итогу юзерам весь этот функционал придётся велосипедить самостоятельно, то есть в области простоты пользования будет отрицательный рост что называется.
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
27.04.2021 14:58:51
Старатель, в Lua5.1 лок снимается в кажом цикле ВМ, в последующих версиях - только когда это требуется.
Отладка QUIK 8.13
Пользователь
Сообщений: Регистрация: 03.02.2021
27.04.2021 14:55:21
Старатель, локи снимаются автоматически при вызове любой С-функции а также при выделении памяти.
* любая функция QUIK * любая функция Lua (все библиотечные функции + pairs, next, getmetatable и т.п.) * любая функция из внешней DLL * любая операция со строковым результатом * любая операция по созданию новых объектов
Откуда брать идентификатор транзакции trans_id или же он рандомиться?
Пользователь
Сообщений: Регистрация: 03.02.2021
27.04.2021 14:47:03
Инкрементация это самый надежный способ. При наличии нескольких источников транзакций, каждый из них приклеивает к своему внутреннему номеру транзкции свой глобальный уникальный идентификатор, что обеспечивает уникальность чисел.
Отладка QUIK 8.13
Пользователь
Сообщений: Регистрация: 03.02.2021
23.04.2021 18:31:27
TGB, изестный интернетный феномен - когда кто-то несет чушь, люди хотят такое недоразумение исправить. Когда предъявляют исходники или дизассемблер или хотя бы логически жёсткую цепочку, тогда есть разговор. Когда говорят "ну у меня вот в моем игрушечном стенде все работает" и удобно игнорируют то что у других людей проблемы никуда не делись - это чушь. Впрочем вы товарищ скатываетесь в такой же уровень самоуверенной шизофазии как Владимир так что вас тоже скоро буду игнорировать наотрез. Если вдруг забыли, напоминаю что по вашему-же умозаключению мои навыки и/или познания гораздо превосходят ваши.
Отладка QUIK 8.13
Пользователь
Сообщений: Регистрация: 03.02.2021
23.04.2021 17:27:26
TGB, Если бы у вас были весомые аргументы, то был бы другой разговор. Но у вас аргумент уровня "works on my machine", причём только для версии 8.13.0 а не 8.13.1, и поверх этого ваш код тестирует совершенно другой вид ошибки. Хэт-трик просто.
Отладка QUIK 8.13
Пользователь
Сообщений: Регистрация: 03.02.2021
22.04.2021 22:09:06
TGB, между официальной документацией и "мне так кажется" от рандома в интернете, выбор несложный.
Отладка QUIK 8.13
Пользователь
Сообщений: Регистрация: 03.02.2021
22.04.2021 21:29:52
TGB, прочитал логи изменений на обоих языках, ничего про такого рода ошибки не увидел.
Telegram-каналы в таблицу новостей, Добавить telegram-каналы в агентства
Пользователь
Сообщений: Регистрация: 03.02.2021
22.04.2021 20:30:03
Контр-предложение: добавить API для работы с таблицей новостей, чтобы можно было впоследствии разрабатывать скрипты для загрузки новостей с различных платформ.
Отладка QUIK 8.13
Пользователь
Сообщений: Регистрация: 03.02.2021
22.04.2021 20:06:35
TGB, такого рода изменения падают скорее в область "защиты от дурака". Что Эйнштейн по этому поводу думал мы все знаем, Мёрфи еще добавил что на защиту от большого дурака попросту находится еще больший дурак, так что ничего свыше санитизации входных данных делать не требуется - особо одарённые всё равно сломают. С учётом того, что такая ситуация возникает в настолько маргинальных сценариях, что само явление обнаружено было только в синтетическом тесте, считаю что делать патчи - тем более хакать сам язык Lua - здесь нецелесообразно. Достаточно просто упомянуть в документации, что голая арифметика и булевая логика вообще безничего в численном цикле может завесить систему. Также смею заметить что обсуждение этого изменения представляет собой байкшеддинг, и вместо лёгких задач надо бы решать важные - то что прерывания иногда разрушают стек и вызывают обрушение скрипта, например.
Отладка QUIK 8.13
Пользователь
Сообщений: Регистрация: 03.02.2021
22.04.2021 19:18:53
На мой взгляд достаточно просто добавить в инструкцию предупреждение, что код, не вызывающий никаких С-функций и не создающий никаких объектов в памяти, не может быть прерван и соответственно может создавать зависания до окончания выполнения.
Предложить пользователям вставить sleep(0) во внешних циклах при отсутствии каких-либо других операций, снимающих лок.
Изменить версию Lua с 5.4.1 до 5.4.2
Пользователь
Сообщений: Регистрация: 03.02.2021
20.04.2021 17:40:23
Баги были есть и будут. Тут есть два подхода: постоянно обновляться до самой свежей версии, в процессе чего что-то может сломаться, либо выбрать версию и сидеть на ней всё обозримое будущее, а с багами люди разберутся на месте.
Рисование отрезка (тренда) с "шифтом", сложно нарисовать строго горизонтальный отрезок.
Пользователь
Сообщений: Регистрация: 03.02.2021
20.04.2021 16:17:31
Есть кнопка которая рисует строго горизонтальную линию.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Пользователь
Сообщений: Регистрация: 03.02.2021
19.04.2021 16:56:19
После 15 лет общения с людьми посредственного уровня программирования но очень высокого самомнения (вроде вас двоих) я перестал считать нужным удерживать нужный курс беседы когда фокус меняется с посредственного программирования на высокое самомнение.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Пользователь
Сообщений: Регистрация: 03.02.2021
19.04.2021 12:43:52
Таблетки примите, уважаемый.
Изменить версию Lua с 5.4.1 до 5.4.2
Пользователь
Сообщений: Регистрация: 03.02.2021
19.04.2021 12:41:57
Старатель, аргументы я привел, вы их благополучно проигнорировали. Тут что называется нами три типа людей: есть джентльмены которые соглашаются, есть обезьяны которые начинают спорить с задокументированными и/или воспроизводимыми вещами, и есть такие вот индивиды которые просто делают вид что ничего сказано и не было. Неприятно когда просишь обосновать что-то думая что умнее всех и никто ничего не скажет, а кто-то берет и обосновывает, понимаю.
Совет от профи: просто не работайте с одной и той же памятью из разных тредов, вот и все. В луа конечно мутексов нету, уж не предусмотрено многопоточности на уровне вм, просто в арке люди слову на глобус натягивают. Но вам родина нафига двойную буферизацию дала?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Пользователь
Сообщений: Регистрация: 03.02.2021
19.04.2021 10:05:25
TGB, подразумевая что заспавнить вторую вм с аргументами это сложная и нетривиальная задача. Можно конечно изголяться чтобы например глобалки сами синхронизировались, но это вы уже сами себе Буратино.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Пользователь
Сообщений: Регистрация: 03.02.2021
19.04.2021 09:56:12
Classics are classics for a reason. На русский не переводятся.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Пользователь
Сообщений: Регистрация: 03.02.2021
19.04.2021 09:27:13
По поводу многопоточности кстати. Существует классические (т.е. не родом из пьяного угара) имплементации, например LuaLanes. Советую такого рода библиотеки использовать.
Изменить версию Lua с 5.4.1 до 5.4.2
Пользователь
Сообщений: Регистрация: 03.02.2021
19.04.2021 09:15:22
Старатель, посты тех кто жалуется на язык читаю про диагонали.
Очистить стол - N операций вм и N операций гц. Заменить пустым - 1 операция вм и N+1 операций гц.
То что вам поенепременно надо использовать непотокобезопасные методы в многопоточной программе - тут что называется своих мозгов в чужую голову не вставишь.
То что небо голубое мне тоже обосновать? Я понимаю что если вы живете в пещере то вам это неочевидно, но всё же.
Отладка QUIK 8.13
Пользователь
Сообщений: Регистрация: 03.02.2021
18.04.2021 15:19:03
Евгений,у вас message1 и message разные переменные.
Изменить версию Lua с 5.4.1 до 5.4.2
Пользователь
Сообщений: Регистрация: 03.02.2021
18.04.2021 15:16:51
Старатель, ходить по массиву можно обычными функциями, а удалять/добавлять значения надо потокобезопасными. Вообще, удалять значения из массива в цикле по этому же массиву это плохая практика; вы тут судя по всему просто очищаете стол, вместо этого можно просто создать пустой - это не только надежнее и проще, но еще и работает быстрее.
Изменить версию Lua с 5.4.1 до 5.4.2
Пользователь
Сообщений: Регистрация: 03.02.2021
18.04.2021 12:47:13
Если у вас колбеки могут изменять столы, то нужно пользоваться потокобезопасными функциями.
Отладка QUIK 8.13
Пользователь
Сообщений: Регистрация: 03.02.2021
18.04.2021 12:08:14
Евгений, да, ваш браузер окончательно скуколдился. Пора переходить на Google Chrome или Microsoft Edge. Для мазохистов еще есть Brave, Opera и старые форки файрфокса.
Событие получения данных всех таблиц и графиков после подключения к серверу
Пользователь
Сообщений: Регистрация: 03.02.2021
18.04.2021 11:00:55
Kolossi, да. Если ждать в цикле пока количество свечек станет больше 0, то видно что значение прыгает от 0 сразу к 5000 (или сколько свечек вернёт брокер + имеется в архиве).
Получение тикеров инсрументов
Пользователь
Сообщений: Регистрация: 03.02.2021
18.04.2021 10:57:04
getClassSecurities ( class )
Событие получения данных всех таблиц и графиков после подключения к серверу
Пользователь
Сообщений: Регистрация: 03.02.2021
18.04.2021 10:01:43
Kolossi, это неважно - размер датасорца меняется в момент завершения загрузки данных. При работе с колбеками тоже неважно - они явно указывают какая свеча была загружена.
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 22:25:49
Владимир, кстати вынужден согласиться что здесь колбеки действительно работают как прерывания. Когда я спорил по этому вопросу я допустил ошибку, что предрассудил будто в QUIK используется такая же простая и адекватная система многопоточности скриптовых языков как и во всём остальном мире.
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 22:22:01
Таки нет. Колбеки приходят когда им удобно. При этом тред скрипта может прерываться в любой точке либо не прерываться вообще (с зависанием QUIK) по велению левой пятки хоста и оптимизатора байткода.
Судя по всему в примере просто sleep(0) занимает больше всего времени и вероятность что колбек выпадет в этот момент наивысшая.
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 21:30:49
Код
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. Впрочем Старатель вроде как поймал всю ту же старую ошибку с разрушением стека, может где-то что-то пытается прервать тред скрипта. С многопоточностью в скриптовых языках конечно есть только один надежный подход - не иметь её, на каждый тред создавать отдельную виртуалку.
Как читать диаграмму "Глубина рынка"?, Не понимаю изменений суммарного объема на диаграмме.
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 21:04:50
Длина тени показывает суммарный объем заявок которые могут исполниться по этой цене. Только ступеньки должны быть вровень с заявками, а не свешены вниз.
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 20:47:12
Владимир, колбеки из главного треда, как в инструкции написано. Может я инструкцию неправильно понял?
Цитата
Во время выполнения функции main() Lua скрипт не мешает работе основного функционала РМ QUIK, таким образом, внутри функции main() использование функции sleep() не приводит к «подвисанию» РМ QUIK
При использовании событийной модели Lua скрипт выполняется в двух потоках: функции обратного вызова выполняются в основном потоке РМ QUIK, а функция main() в дополнительном потоке РМ QUIK
А тут у нас подвисание если НЕ использовать sleep() в main(), и события не приходят.
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 20:28:26
Хм. При исполнении кода без 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
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 19:42:47
Старатель, пардон за вопрос, а колбеки есть-ли вообще? В отсутствие торгов вроде нечему их дёргать.
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 15:22:25
Anton, дрочение таймаута слипа это не архитектура. Ну и да, примерно также двадцать лет методом ватерфол никто не разрабатывает, потому что в итоге получается долго, дорого и криво, т.к. от апгрейда архитектуры в процессе разработки стараются отказываться.
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 14:54:39
Ан нет, скорее всего это было бы две инструкции.
Код
LE false 0 N
ADD N N 1
В любом случае не атомарно.
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 14:47:56
Старатель,надо смотреть в байткод. ЕМНИП это 4 операции - проверка, прыжок, прибавление, запись.
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 14:43:55
Anton, тут скорее что два старпёра привыкли программировать с аутизмом олимпийского уровня потому что иначе в 2 килобайта 2 мегагерца не влезало, а теперь даже если делать через жопу то всё равно получается микроскопическая нагрузка. По итогу имеем что у старпёров тратится большое количество времени разработки ради экономии на спичках, а могли бы в это время чем-то полезным заниматься. Уже двадцать лет учат людей что не надо делать оптимизацию там, где и так хорошо работает, потому что это пустая трата времени - алё очнись Нео ты обосрался.
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 13:42:56
Anton, задействовать вытесняющую многопоточность - религия не позволяет. Сильный ОКР, таблетки не пъете, понимаю.
Получать объемы сделок
Пользователь
Сообщений: Регистрация: 03.02.2021
17.04.2021 09:43:56
Не вижу причин по которым собственно надо использовать задержки. Загрузится ЦП на 100% да и фиг с ним, сейчас в каждом тостере по 12 ядер. Вы же не батарею на ноутбуке экономите?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Пользователь
Сообщений: Регистрация: 03.02.2021
11.04.2021 11:17:16
Инструкцию не читай @ велосипед изобретай. Классика.
[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения
Пользователь
Сообщений: Регистрация: 03.02.2021
11.04.2021 00:54:59
Старатель, у меня там стоял таймаут на пустые источники. Все данные приходили исправно на все заказаные источники.
[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения
Пользователь
Сообщений: Регистрация: 03.02.2021
10.04.2021 18:57:00
Точнее сказать, ожидания подключения там вообще нет.
Цитата
Старатель написал: У вас стоит 10-секундное ожидание после подключения
Перед подключением. Ну и для поста на форуме я нулей от балды бахнул просто, получилось 10 секунд. Тут суть не в этом совершенно.
[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения
Пользователь
Сообщений: Регистрация: 03.02.2021
10.04.2021 18:53:49
Старатель, во-первых если раньше с этим кодом каждый раз работало а теперь каждый раз отказы, то не в коде проблема. Во-вторых выбросить пять тысяч сообщений занимает несколько минут так что если просто в ожидании было дело то их бы там было гораздо меньше. И в-третьих это демонстрационный код, в реальном коде ожидание подключения стоит в другом месте - суть от этого не меняется.
[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения
Пользователь
Сообщений: Регистрация: 03.02.2021
10.04.2021 00:46:17
Код
if error then message ( string.format ( "Failed to create data source: %s\n%s %s %s" , error, class, sec, int ) ) end