С каждой записью в файл утекает ~ 50 байтов памяти, а почему она не собирается сборщиком мусора??
Код
local mess = 'abc'
local function toFile()
local lf=io.open('srrhb346fhs', 'ab')
lf:write(mess)
lf:close()
end
function main()
for i = 1, 20 do
toFile()
sleep(1000)
end
end
Serge123 написал: С каждой записью в файл утекает ~ 50 байтов памяти, а почему она не собирается сборщиком мусора??
Утечка есть. Это ошибка разработчика языка Lua 5.4.1 при реализации стандартных функций io. Файлы это не тип данных Lua и сборщиком мусора они не обрабатываются, поэтому и требуется функция close (в которой похоже есть ошибка).
Спасибо, интересно... А до вер. 5.4.1 этой ошибки не было? Я подозреваю, что утечка памяти имеется не только при работе с файлами: как я вчера писал в другой ветке, мой скрипт по записи в файл содержимого стаканов и обезл. сделок потихоньку увеличивает занятую память, хотя в это время нет работы с файлом и я присваиваю false ссылкам на таблицы...
TGB написал: Неиспользуемым ссылкам надо присваивать nil.
Попробую присваивать ссылкам на таблицы nil, хотя, я не понимаю, что от этого изменится для сборщика мусора... Ссылке на таблицу можно присвоить nil, а потом можно ещё что-нибудь присвоить, а сборщик мусора не заметит, что было присвоено nil. А если переменная объявлена внутри блока, то после завершения блока она вроде бы должна сталь nil. А что, если будет опять передача управления в этот блок и опять эта переменная получит значение, это будет та же самая переменная, или на неё каждый раз будет выделятья память? Я этого не представляю. Каждый раз выделять память переменной в блоке, который может быть внутри цикла, - дорогое удовольствие с точки зрения быстродействия...
В прошлой версии скрипта эти таблицы передавались как параметры коллбэка, а таблица от getQuoteLevel2 была локальной переменной в OnQuote, поэтому ссылкам на эти таблицы я ничего не присваивал (а зачем?) Но память всё равно почему-то потихоньку утекала.
Nikolay написал: Проверьте с новой нотацией , что была введена в lua 5.4
Проверил, память утекает раза в 2 сильнее... А где можно прочитать о нововведениях с примерами, я использовал только <const>, видел упоминание о <clear>, но поиск по документации в архиве lua-5.4.6.tar.gz с сайта lua.org не находит ни <const> ни аналогичных образцов...
collectgarbage("collect") помогает, даже слишком: в момент запуска в окне "Доступные скрипты" показывается, что занято скриптом 36.53 Кб, потом память, как и раньше, растёт, а в конце, после вызова collectgarbage, она становится 35.43 Кб. Чтобы это увидеть, я после collectgarbage вставил sleep(1000). Но остаётся вопрос: почему сборщик мусора не освобождает память во время работы цикла??
И ещё я мог бы опубликовать свой скрипт, который записывает в файл стакан и сделки по OnQuote и OnAllTrade, чтобы народ посмотрел и сказал, почему он потихоньку увеличивает занятую память, хотя, файловых операций не выполняет? Но боюсь, что, если никто не знает, почему, то просто не ответят, чтобы не признавать, что кто-то что-то не знает. Был уже пример на такую тему: я спросил, почему mciSendString в dll работает, а в exe файле то же самое не даёт звука, даже привёл программку. Так никто не ответил (видимо, никто не знает и в Интернете ответ не находится).
Насколько я понимаю, сборку мусора вроде бы надо делать так: в структуре каждого объекта ставят счётчик ссылок на него, тогда сборщик мусора просто просматривает эту информацию и бысто освобождает память под объекты со счётчиками ссылок == 0. Но в Lua, похоже, сборщик мусора просматривает вообще всё, что попало и смотрит, есть ли там ссылки на какие-то объекты. А если в программе имеется таблица из миллиона таблиц, тогда что делать сборщику мусора, кроме как тормозить программу?
сборщик мусора в настоящее время используется во многих языках. И основное отличие - алгоритм самой сборки и определение момента сборки. Если кратко, то в луа сборщик контролирует скорость выделение памяти и ее увеличение и в зависимости от этого начинает утилизацию. У вас память растет медленно и мало. Нет смысла запускать сборщик, так как он будет тормозить VMLua. Если памяти на компе достаточно, то его даже вообще отключают. Вы можете поиграть с настройками и подобрать нужный для вас режим сборки.
Serge123, Чтобы не гонять постоянно сборщик, я создаю таблицы требуемого размера изначально и потом не уничтожаю их. В результате сборщику просто нечего делать.
nikolz написал: У вас память растет медленно и мало. Нет смысла запускать сборщик, так как он будет тормозить VMLua.
В принципе, ясно. Тогда, получается, что у меня память не утекает? Надо попробовать запустить сборщик мусора явно и посмотреть, сколько памяти освободится.
Я сегодня ещё подумал, что м.б. дело ещё в том, что сейчас у меня ПК с 2-мя ядрами, поэтому ядра всё время заняты и переключаются для выполнения разных потоков. А поток сборщика мусора, как я понимаю, имеет наинизший приоритет, поэтому до его выполнения на этом моём ПК дело не доходит.
Нет, ядра у Вас не сильно заняты. Вы можете это увидеть в диспетчере задач. -------------------- У Вас в main используется sleep(1000) т е Вы останавливаете поток Main на 1 секунду. В винде квант, который выделяется задаче составляет 15 ms. У Вас VMLua в потоке работает 1 квант из 60, т е примерно 2% доступного времени.
Serge123 написал: В принципе, ясно. Тогда, получается, что у меня память не утекает? Надо попробовать запустить сборщик мусора явно и посмотреть, сколько памяти освободится.
Возможно я ошибаюсь, но вашей целью является получение прибыли на фондовом рынке. А если это так, то тестирование Qlua - это потеря вашего времени. Я понимаю, что вы по своей натуре перфекционист (все должно быть понятно и идеально), но вам приходится жить в этом неидеальном мире и поэтому, как мне кажется, стоит "забить" на его несовершенство. Среда, в которой вы реализуете свои алгоритмы несовершенна, но этим стоит заниматься только тогда, когда это вам мешает конкретно. Иначе вы будете решать чужие задачи (вроде отладки Lua).
TGB написал: Возможно я ошибаюсь, но вашей целью является получение прибыли на фондовом рынке.
Спасибо, что напомнили, а то я в перфекционистско-программистском угаре действительно часто об этом забываю...
В диспетчере задач занятость CPU показывает 4-12% (память занята на ~40%), во время сделки занятость CPU подскакивает до 23%, (при свёрнутом окне Квика 13%), но, когда идёт много моих сделок, я ясно вижу торможение, возможно, в связи с проигрыванием короткого звука для каждой сделки. В это время слышны только звуки, содержимое окон сделок и заявок не обновляется, щелчки по стаканам для выставления заявок не отрабатываются по несколько секунд. Иногда приходится завершать скрипт, который записывает в файл стаканы и все сделки по инструменту.
И ещё я вижу торможение, когда окно "Доступные скрипты" располагаю поверх стаканов. В этом случае хорошо видно, что циферки занятости памяти напротив скрипта перерисовываются не мгновенно. Хотя, GPU в диспетчере тоже простаивает, как и CPU. Поэтому я не знаю, как объяснить это торможение. Если перенести это окно на фоновую область окна Квика, то циферки рисуются мгновенно.
Перед началом работы я в диспетчере задач на всякий случай ставлю процессу info.exe высокий приоритет. Но каких-то изменений в связи с этим я не заметил.
Serge123 написал: И ещё я вижу торможение, когда окно "Доступные скрипты" располагаю поверх стаканов. В этом случае хорошо видно, что циферки занятости памяти напротив скрипта перерисовываются не мгновенно. Хотя, GPU в диспетчере тоже простаивает, как и CPU. Поэтому я не знаю, как объяснить это торможение.
Serge123 написал: В диспетчере задач занятость CPU показывает 4-12% (память занята на ~40%), во время сделки занятость CPU подскакивает до 23%, (при свёрнутом окне Квика 13%), но, когда идёт много моих сделок, я ясно вижу торможение, возможно, в связи с проигрыванием короткого звука для каждой сделки. В это время слышны только звуки, содержимое окон сделок и заявок не обновляется, щелчки по стаканам для выставления заявок не отрабатываются по несколько секунд. Иногда приходится завершать скрипт, который записывает в файл стаканы и все сделки по инструменту.
При обработке многих сделок сразу подвисание на 2-3 секунды это нормально. Это и от звука, и от версии Квика, и от процессора зависит, от всего, короче. Такие зависания - обычное дело, а вы ещё и стаканы в файл записываете. Главное, что всё срабатывает, а отображение на экране и работа контролов GUI вторично.
Serge123 написал: Спасибо, что напомнили, а то я в перфекционистско-программистском угаре действительно часто об этом забываю...
В диспетчере задач занятость CPU показывает 4-12% (память занята на ~40%), во время сделки занятость CPU подскакивает до 23%, (при свёрнутом окне Квика 13%), но, когда идёт много моих сделок, я ясно вижу торможение, возможно, в связи с проигрыванием короткого звука для каждой сделки. В это время слышны только звуки, содержимое окон сделок и заявок не обновляется, щелчки по стаканам для выставления заявок не отрабатываются по несколько секунд. Иногда приходится завершать скрипт, который записывает в файл стаканы и все сделки по инструменту.
И ещё я вижу торможение, когда окно "Доступные скрипты" располагаю поверх стаканов. В этом случае хорошо видно, что циферки занятости памяти напротив скрипта перерисовываются не мгновенно. Хотя, GPU в диспетчере тоже простаивает, как и CPU. Поэтому я не знаю, как объяснить это торможение. Если перенести это окно на фоновую область окна Квика, то циферки рисуются мгновенно.
Перед началом работы я в диспетчере задач на всякий случай ставлю процессу info.exe высокий приоритет. Но каких-то изменений в связи с этим я не заметил.
Это не очень нормальное поведение. У меня бывает до 1000 транзакций. Каких-то особых "зависаний" не наблюдается. Впрочем, если Вы активно используете основной поток терминала, т.е. производите действия в колбеках, то вполне возможно, что так и будет. Я придерживаюсь мнения, что колбек это событие, которое необходимо обрабатывать в потоке main скрипта. Кроме как записать в очередь тип события в колбеке ничего не делается. Что касается железа, то я уже лет 15 не работал на машинах где было меньше 16-32 гб и 4 ядер, так что не знаю как терминал реагирует на слабое железо.
Также писал скрипт для проверки возможности записи слепка стакана в базу данных, а второй скрипт из базы уже читал и выводил в окно этот стакан. Тоже как-то все работало корректно, без особых притормаживаний.
И ещё я вижу торможение, когда окно "Доступные скрипты" располагаю поверх стаканов. В этом случае хорошо видно, что циферки занятости памяти напротив скрипта перерисовываются не мгновенно. Хотя, GPU в диспетчере тоже простаивает, как и CPU. Поэтому я не знаю, как объяснить это торможение. Если перенести это окно на фоновую область окна Квика, то циферки рисуются мгновенно.
Перед началом работы я в диспетчере задач на всякий случай ставлю процессу info.exe высокий приоритет. Но каких-то изменений в связи с этим я не заметил.
Сказать, что конкретно у Вас тормозит не делая лог файлы не реально. ------------------ Могу лишь рассказать результаты моих тестов, которые указывают на то, что КВИК может работать очень быстро. Я выкладывал результаты КРАШ теста, который делал на демо сервере. В тесте я принимал инструменты по колбеку onParam и выставлял на принятый инструмент заявку на покупку в очередь, После подтверждения регистрации заявки на сервере, я отменял ее. В результате 4 часового теста было выставлено и снято более 200 тысяч заявок (это 400 тысяч транзакций) по 200 инструментам. Никаких тормозов я не заметил. Терминал тратил на отправку очередной транзакции не более 0.1 ms. ----------------- После этого теста получил предупреждение от разработчиков, чтобы больше так не грузил их сервер. ------------------------ Поэтому полагаю у Вас может быть либо проблема с Вашим скриптом, либо с Вашим брокером. Сделайте вывод в лог файл в колбеке и в main и сделайте анализ задержек.
nikolz написал: Возможно Вы знаете, но причина тормозов при отправке заявки может быть из-за алгоритма Нэгла.
Я попробовал его отключить, но Квик начал очень сильно тормозить, занятость ЦП 82%, только и делал, что крутил бублик вместо курсора мыши, я не смог ничего сделать. Поэтому отключение этого алгоритма не для этого 2-ядерного ПК. Попробую на другом ПК.
Nikolay написал: Это не очень нормальное поведение. У меня бывает до 1000 транзакций. Каких-то особых "зависаний" не наблюдается.
Цитата
nikolz написал: В результате 4 часового теста было выставлено и снято более 200 тысяч заявок (это 400 тысяч транзакций) по 200 инструментам. Никаких тормозов я не заметил.
Как я понял, он про сделки писал, а не про транзакции. На транзакциях у меня тоже не наблюдается задержек, а когда много сделок приходит разом, бывает что бублик 2-3 секунды крутится, особенно, если в этот момент пытаешься в Квике что-то делать. При этом в лог всё в нормальное время пишется без особых задержек, так что я не думаю, что здесь проблема из-за интернета. Для процессора на 4ГГц будет задержка в 1-1,5 секунды в подобной ситуации и на неё внимание просто не обращают. Прямая зависимость времени зависания от количества поступивших на обработку записей в таблицу сделок и частоты процессора. Сергей не написал какое количество записей в таблицу сделок пришло, какой у него проц по частоте и сколько зависание в секундах длилось, а так по его описанию у меня тоже бывают такие моменты, но 2-3 секунды это не проблема, конечно.
Nikolay написал: Это не очень нормальное поведение. У меня бывает до 1000 транзакций. Каких-то особых "зависаний" не наблюдается.
Цитата
nikolz написал: В результате 4 часового теста было выставлено и снято более 200 тысяч заявок (это 400 тысяч транзакций) по 200 инструментам. Никаких тормозов я не заметил.
Как я понял, он про сделки писал, а не про транзакции. На транзакциях у меня тоже не наблюдается задержек, а когда много сделок приходит разом, бывает что бублик 2-3 секунды крутится, особенно, если в этот момент пытаешься в Квике что-то делать. При этом в лог всё в нормальное время пишется без особых задержек, так что я не думаю, что здесь проблема из-за интернета. Для процессора на 4ГГц будет задержка в 1-1,5 секунды в подобной ситуации и на неё внимание просто не обращают. Прямая зависимость времени зависания от количества поступивших на обработку записей в таблицу сделок и частоты процессора. Сергей не написал какое количество записей в таблицу сделок пришло, какой у него проц по частоте и сколько зависание в секундах длилось, а так по его описанию у меня тоже бывают такие моменты, но 2-3 секунды это не проблема, конечно.
В моем тесте использовался колбек опParam , а это и есть сообщения, которые отображаются в ТТП. Там не только сделки, но и любые изменения по инструменту. Тест выставлял заявки по инструменту, по которому совершена сделка. Снимал заявку, когда она зарегистрирована сервером, т е выставлена в стакан. Тормоз 2-3 секунды наблюдается в КВИКЕ, если много окон и других приложений открыто. Я такое наблюдал давно на одноядерном компе по XP. ------------------ Можно увидеть это вечером, когда мало сделок или на неликвиде.. --------------- Но что конкретно происходит без логов сказать точно невозможно.
nikolz написал: Возможно Вы знаете, но причина тормозов при отправке заявки может быть из-за алгоритма Нэгла.
Я попробовал его отключить, но Квик начал очень сильно тормозить, занятость ЦП 82%, только и делал, что крутил бублик вместо курсора мыши, я не смог ничего сделать. Поэтому отключение этого алгоритма не для этого 2-ядерного ПК. Попробую на другом ПК.
Если правильно отключаете, то этого быть не может даже теоретически. алгоритм не связан с числом ядер. Он просто не отсылает Ваши пакеты в интернет пока они не станут большими или не пройдет достаточно много времени. Если Вы ничего не посылаете, то нет никакой разницы включен он или нет.
Вызвать regedit, перейти в ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\ и далее зайти в подветку, где есть параметр DhcpIPAddress, который равен моему IP. Добавить/изменить 2 параметра (вначале их там нет): DWORD 32 бита TcpAckFrequency и TCPNoDelay со значением 1. Для его восстановления надо установить эти 2 параметра в 0. Для вступления в силу изменённых параметров надо перезагрузить ПК.
Вызвать regedit, перейти в ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\P arameters\Interfaces\ и далее зайти в подветку, где есть параметр DhcpIPAddress, который равен моему IP. Добавить/изменить 2 параметра (вначале их там нет): DWORD 32 бита TcpAckFrequency и TCPNoDelay со значением 1. Для его восстановления надо установить эти 2 параметра в 0. Для вступления в силу изменённых параметров надо перезагрузить ПК.
вроде все так. Этот алгоритм с давних времен отключают для игр по интернету. ----------------------- проверил ничего не виснет.
nikolz написал: В моем тесте использовался колбек опParam , а это и есть сообщения, которые отображаются в ТТП. Там не только сделки, но и любые изменения по инструменту. Тест выставлял заявки по инструменту, по которому совершена сделка. Снимал заявку, когда она зарегистрирована сервером, т е выставлена в стакан. Тормоз 2-3 секунды наблюдается в КВИКЕ, если много окон и других приложений открыто. Я такое наблюдал давно на одноядерном компе по XP. ------------------ Можно увидеть это вечером, когда мало сделок или на неликвиде.. --------------- Но что конкретно происходит без логов сказать точно невозможно.
Видимо, тут и есть недопонимание. Я писал про сделки совершенные мной лично и таблицу сделок в режиме их прихода. Когда их разом приходит много, бывают (не всегда) зависания по 2-3 секунды (окна и прочее у меня всегда одни и те же). Поэтому ваш тест не показателен, он про другое. Предполагаю, что Сергей описывал ситуацию зависания при приходе его личных сделок ("когда идёт много моих сделок, я ясно вижу торможение") , хотя конкретики мало дал. Отключать алгоритм Нейгла ему смысла нет. Его никто не отключает и у всех всё работает, значит, не в нём дело. Вы первый человек на моей памяти, который его отключал.
Игорь М написал: Предполагаю, что Сергей описывал ситуацию зависания при приходе его личных сделок ("когда идёт много моих сделок, я ясно вижу торможение") , хотя конкретики мало дал. Отключать алгоритм Нейгла ему смысла нет. Его никто не отключает и у всех всё работает, значит, не в нём дело.
Точно, я даже предположил, что особенно на задержку влияют звуковые сигналы. Какая нужна конкретика? Где-то до октября 2023 я и в утреннюю и в вечернюю сессии удачно выставлял заявки с пом. скрипта, иногда даже видел по содержимому стаканов в файле, что я в очереди первый. Первым быть не всегда хорошо, потому что во время премаркета бывает в сумме крупная встречная заявка, за это снимают деньги. Но потом перестало получаться попадать в начало очереди на вечерней сессии (а утром по-прежнему всё ОК). Такое впечатление, что мосбиржа вечером варьирует время начала приёма заявок в пределах 2 секунд. То ли вечером возникли какие-то задержки (в том числе с получением ответов от сервера на заявки). Поэтому я и решил попробовать вечером отключить алгоритм Нейгла, но от этого получился полный затык в работе Квика.
Если вы на открытии сделки совершаете, то помимо непосредственно ваших сделок ещё и большой поток информации в эти моменты приходит, поэтому Квик это тяжело переваривает. А, вообще, нужно знать время, когда зависание происходит, количество сделок (строк в таблице сделок (собственных)), частоту процессора, что ещё одновременно работает и т.п., и, главное, сколько сама задержка длится.
nikolz написал: В моем тесте использовался колбек опParam , а это и есть сообщения, которые отображаются в ТТП. Там не только сделки, но и любые изменения по инструменту. Тест выставлял заявки по инструменту, по которому совершена сделка. Снимал заявку, когда она зарегистрирована сервером, т е выставлена в стакан. Тормоз 2-3 секунды наблюдается в КВИКЕ, если много окон и других приложений открыто. Я такое наблюдал давно на одноядерном компе по XP. ------------------ Можно увидеть это вечером, когда мало сделок или на неликвиде.. --------------- Но что конкретно происходит без логов сказать точно невозможно.
Видимо, тут и есть недопонимание. Я писал про сделки совершенные мной лично и таблицу сделок в режиме их прихода. Когда их разом приходит много, бывают (не всегда) зависания по 2-3 секунды (окна и прочее у меня всегда одни и те же). Поэтому ваш тест не показателен, он про другое. Предполагаю, что Сергей описывал ситуацию зависания при приходе его личных сделок ("когда идёт много моих сделок, я ясно вижу торможение") , хотя конкретики мало дал. Отключать алгоритм Нейгла ему смысла нет. Его никто не отключает и у всех всё работает, значит, не в нём дело. Вы первый человек на моей памяти, который его отключал.
Предположу следующее. Зависит от того каким образом обрабатывать таблицы сделок и заявок. В моем случае в таблице заявок в конце теста было 200 000 строк, но я обрабатываю колбеки до появления соответствующих изменений в таблицах. Поэтому я не лезу в эти таблицы. Если туда ходить, то задержки существенно увеличиваются. ------------------- Кроме того, у меня нет sleep. Поэтому задержка на обработку любого колбека не более 0.1 ms. Это на порядки меньше чем задержка со sleep.
Игорь М написал: Предполагаю, что Сергей описывал ситуацию зависания при приходе его личных сделок ("когда идёт много моих сделок, я ясно вижу торможение") , хотя конкретики мало дал. Отключать алгоритм Нейгла ему смысла нет. Его никто не отключает и у всех всё работает, значит, не в нём дело.
Точно, я даже предположил, что особенно на задержку влияют звуковые сигналы. Какая нужна конкретика? Где-то до октября 2023 я и в утреннюю и в вечернюю сессии удачно выставлял заявки с пом. скрипта, иногда даже видел по содержимому стаканов в файле, что я в очереди первый. Первым быть не всегда хорошо, потому что во время премаркета бывает в сумме крупная встречная заявка, за это снимают деньги. Но потом перестало получаться попадать в начало очереди на вечерней сессии (а утром по-прежнему всё ОК). Такое впечатление, что мосбиржа вечером варьирует время начала приёма заявок в пределах 2 секунд. То ли вечером возникли какие-то задержки (в том числе с получением ответов от сервера на заявки). Поэтому я и решил попробовать вечером отключить алгоритм Нейгла, но от этого получился полный затык в работе Квика.
Попробуйте вывести в лог файл время прихода колбеков OnTransReply и OnOrder и сравните с временем регистрации сделки из таблицы сделок. Если выложите эти времена, то можно будет что-то конкретное сказать.
Игорь М написал: Если вы на открытии сделки совершаете, то помимо непосредственно ваших сделок ещё и большой поток информации в эти моменты приходит, поэтому Квик это тяжело переваривает.
Да, я видел, что причина торможения во время моих сделок в том, что иногда почему-то идёт большое число мелких сделок, напр., десятки сделок по 1 акции. Я так и не могу понять, зачем кто-то выставляет заявки по одной акции, как будто кто-то отлаживает свою программу или что-то тестирует. Если нет потока мелких сделок, то торможения нет.
Игорь М написал: Если вы на открытии сделки совершаете, то помимо непосредственно ваших сделок ещё и большой поток информации в эти моменты приходит, поэтому Квик это тяжело переваривает.
Да, я видел, что причина торможения во время моих сделок в том, что иногда почему-то идёт большое число мелких сделок, напр., десятки сделок по 1 акции. Я так и не могу понять, зачем кто-то выставляет заявки по одной акции, как будто кто-то отлаживает свою программу или что-то тестирует. Если нет потока мелких сделок, то торможения нет.
По одной заявке выставляют HFT роботы, скальперы и ММ.
Serge123, Если хотите определить причину, то запишите в лог значения времени : время выставления заявки скриптом, время колбек транзакции время колбека заявки время колбека сделки ----------------- По этим данным Вы увидите что тормозит. ----------------- Относительно тормоза при проигрывании музыки Специально для вас выкладывал исходник с асинхронным проигрыванием. Чтобы не ждать, надо в нем установить второй параметр 0.
nikolz написал: Кроме того, у меня нет sleep. Поэтому задержка на обработку любого колбека не более 0.1 ms. Это на порядки меньше чем задержка со sleep.
Здесь я не понял, о каком sleep идёт речь. У меня в скрипте sleep(10) используется один раз в main в цикле обработки очереди от коллбэков. В Lua по-моему нельзя прервать паузу, если в мой массив (очередь) коллбэк что-то записал.
nikolz написал: Кроме того, у меня нет sleep. Поэтому задержка на обработку любого колбека не более 0.1 ms. Это на порядки меньше чем задержка со sleep.
Здесь я не понял, о каком sleep идёт речь. У меня в скрипте sleep(10) используется один раз в main в цикле обработки очереди от коллбэков. В Lua по-моему нельзя прервать паузу, если в мой массив (очередь) коллбэк что-то записал.
Да именно sleep в main. Когда очередь main остановится на указанное время. Все это время колбеки будут забивать очередь и даже для sleep(10) . Но при sleep(10) будет пустая трата времени ядра. Посмотрите сколько у вас будет загрузка процессора, если sleep(10) или sleep(1000). ------------------------- Вместо sleep ставим wait в и создаем event. в итоге main просыпается сразу по срабатыванию колбека и спит произвольное время, если сигналов нет. Пустой траты времени нет совсем. И main реагирует на колбек примерно в 100 раз быстрее. ------------- Кроме того, с помощью wait можно реализовать дополнительно запуск main по таймеру. --------------- Например, делал так: -------------------- main запускается колбеками, но не реже 1 раз в секунду(10 секунд).
Видимо, имелось в виду, что длл получает инфо, что коллбэк что-то записал в очередь, и длл запускает main, которая всё остальное время спит. Или что-то подобное.
Serge123 написал: Видимо, имелось в виду, что длл получает инфо, что коллбэк что-то записал в очередь, и длл запускает main, которая всё остальное время спит. Или что-то подобное.
Если не ошибаюсь, Вы осваиваете написание dll для луа. Вроде бы уже выкладывал исходник для event и wait ----------------- Можете взять библиотеку w32 для Lua:
nikolz написал: По одной заявке выставляют HFT роботы, скальперы и ММ.
А какой смысл это делать на дешёвом инструменте с шагом цены ноль целых шиш десятых копейки?
Тут дело в округлении... https://roem.ru/12-08-2021/286525/tinkoff-cents/ Вот продали вы один лот ценой 1.3862, а получили 1.39 из-за округления. А можно можно купить сразу два лота по той же цене за 2.77. То есть продали два раза по одному, купили сразу два - заработали копейку. Сумеете купить пятьсот заявок по два лота и потом продать тысячу по одному - плюс 5 рублей. С теми объемами торгов, которые там есть - можно и много больше. Вопрос только в том, когда брокер скажет "ай ай ай".
А, да, еще надо чтобы брокер считал свою комиссию не с каждой сделки, а как процент от дневного оборота. Вроде есть такие. А биржевая комиссия с мейкера не берется.