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

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

Страницы: 1 2 3 4 5 6 7 След.
Почему в этой программке утекает память??
 
Цитата
nikolz написал:
Кроме того, у меня нет sleep. Поэтому задержка на обработку любого колбека не более 0.1 ms. Это на порядки меньше чем задержка со sleep.
Здесь я не понял, о каком sleep идёт речь. У меня в скрипте sleep(10) используется один раз в main в цикле обработки очереди от коллбэков. В Lua по-моему нельзя прервать паузу, если в мой массив (очередь) коллбэк что-то записал.
Почему в этой программке утекает память??
 
Цитата
nikolz написал:
По одной заявке выставляют HFT роботы, скальперы и ММ.
А какой смысл это делать на дешёвом инструменте с шагом цены ноль целых шиш десятых копейки?
Почему в этой программке утекает память??
 
Цитата
Игорь М написал:
Если вы на открытии сделки совершаете, то помимо непосредственно ваших сделок ещё и большой поток информации в эти моменты приходит, поэтому Квик это тяжело переваривает.
Да, я видел, что причина торможения во время моих сделок в том, что иногда почему-то идёт большое число мелких сделок, напр., десятки сделок по 1 акции. Я так и не могу понять, зачем кто-то выставляет заявки по одной акции, как будто кто-то отлаживает свою программу или что-то тестирует. Если нет потока мелких сделок, то торможения нет.
Почему в этой программке утекает память??
 
Цитата
Игорь М написал:
Предполагаю, что Сергей описывал ситуацию зависания при приходе его личных сделок ("когда идёт много моих сделок, я ясно вижу торможение") , хотя конкретики мало дал. Отключать алгоритм Нейгла ему смысла нет. Его никто не отключает и у всех всё работает, значит, не в нём дело.
Точно, я даже предположил, что особенно на задержку влияют звуковые сигналы.
Какая нужна конкретика?
Где-то до октября 2023 я и в утреннюю и в вечернюю сессии удачно выставлял заявки с пом. скрипта, иногда даже видел по содержимому стаканов в файле, что я в очереди первый. Первым быть не всегда хорошо, потому что во время премаркета бывает в сумме крупная встречная заявка, за это снимают деньги. Но потом перестало получаться попадать в начало очереди на вечерней сессии (а утром по-прежнему всё ОК). Такое впечатление, что мосбиржа вечером варьирует время начала приёма заявок в пределах 2 секунд. То ли вечером возникли какие-то задержки (в том числе с получением ответов от сервера на заявки). Поэтому я и решил попробовать вечером отключить алгоритм Нейгла, но от этого получился полный затык в работе Квика.
Почему в этой программке утекает память??
 
Вкратце:

Вызвать regedit, перейти в ветку
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\P­arameters\Interfaces\
и далее зайти в подветку, где есть параметр DhcpIPAddress, который равен моему IP.
Добавить/изменить 2 параметра (вначале их там нет):
DWORD 32 бита TcpAckFrequency и TCPNoDelay со значением 1.
Для его восстановления надо установить эти 2 параметра в 0.
Для вступления в силу изменённых параметров надо перезагрузить ПК.
Почему в этой программке утекает память??
 
Цитата
nikolz написал:
Если правильно отключаете, то этого быть не может даже теоретически.
Я отключал, как здесь написано:
https://vk.com/@scum_survival-algoritm-neigla
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Цитата
Nikolay написал:
Если речь была про задержку потока main, то да она должна быть.
Как раз хотел спросить: какую задержку выставлять в main после цикла обработки очереди от OnAllTrade и OnQuote? Я сделал 10 мс, может, есть более правильная задержка?
Почему в этой программке утекает память??
 
Цитата
nikolz написал:
Возможно Вы знаете, но причина тормозов при отправке заявки может быть из-за  алгоритма Нэгла.
Я попробовал его отключить, но Квик начал очень сильно тормозить, занятость ЦП 82%, только и делал, что крутил бублик вместо курсора мыши, я не смог ничего сделать. Поэтому отключение этого алгоритма не для этого 2-ядерного ПК. Попробую на другом ПК.
Почему в этой программке утекает память??
 
Цитата
TGB написал:
Возможно я ошибаюсь, но вашей целью является получение прибыли на фондовом рынке.
Спасибо, что напомнили, а то я в перфекционистско-программистском угаре действительно часто об этом забываю...

В диспетчере задач занятость CPU показывает 4-12% (память занята на ~40%), во время сделки занятость CPU подскакивает до 23%, (при свёрнутом окне Квика 13%), но, когда идёт много моих сделок, я ясно вижу торможение, возможно, в связи с проигрыванием короткого звука для каждой сделки. В это время слышны только звуки, содержимое окон сделок и заявок не обновляется, щелчки по стаканам для выставления заявок не отрабатываются по несколько секунд. Иногда приходится завершать скрипт, который записывает в файл стаканы и все сделки по инструменту.

И ещё я вижу торможение, когда окно "Доступные скрипты" располагаю поверх стаканов. В этом случае хорошо видно, что циферки занятости памяти напротив скрипта перерисовываются не мгновенно. Хотя, GPU в диспетчере тоже простаивает, как и CPU. Поэтому я не знаю, как объяснить это торможение. Если перенести это окно на фоновую область окна Квика, то циферки рисуются мгновенно.

Перед началом работы я в диспетчере задач на всякий случай ставлю процессу info.exe высокий приоритет. Но каких-то изменений в связи с этим я не заметил.
Звук через mciSendString и MessageBeep
 
Цитата
paluke написал:
Ну например, может оно как-то использует оконные сообщения.
Сомнительно: не видно логики для неработоспособности этой функции в консольных программах. И в документации на сайте МС нет такого предупреждения... Аналогично для более современной функции PlaySound.
Как тогда МС вообще планирует использование звука в консольных программах??
Почему в этой программке утекает память??
 
Цитата
nikolz написал:
У вас память растет медленно и мало. Нет смысла запускать сборщик, так как он будет тормозить VMLua.
В принципе, ясно. Тогда, получается, что у меня память не утекает? Надо попробовать запустить сборщик мусора явно и посмотреть, сколько памяти освободится.

Я сегодня ещё подумал, что м.б. дело ещё в том, что сейчас у меня ПК с 2-мя ядрами, поэтому ядра всё время заняты и переключаются для выполнения разных потоков. А поток сборщика мусора, как я понимаю, имеет наинизший приоритет, поэтому до его выполнения на этом моём ПК дело не доходит.
Почему в этой программке утекает память??
 
collectgarbage("collect") помогает, даже слишком: в момент запуска в окне "Доступные скрипты" показывается, что занято скриптом 36.53 Кб, потом память, как и раньше, растёт, а в конце, после вызова collectgarbage, она становится 35.43 Кб. Чтобы это увидеть, я после collectgarbage вставил sleep(1000). Но остаётся вопрос: почему сборщик мусора не освобождает память во время работы цикла??

И ещё я мог бы опубликовать свой скрипт, который записывает в файл стакан и сделки по OnQuote и OnAllTrade, чтобы народ посмотрел и сказал, почему он потихоньку увеличивает занятую память, хотя, файловых операций не выполняет? Но боюсь, что, если никто не знает, почему, то просто не ответят, чтобы не признавать, что кто-то что-то не знает. Был уже пример на такую тему: я спросил, почему mciSendString в dll работает, а в exe файле то же самое не даёт звука, даже привёл программку. Так никто не ответил (видимо, никто не знает и в Интернете ответ не находится).

Насколько я понимаю, сборку мусора вроде бы надо делать так: в структуре каждого объекта ставят счётчик ссылок на него, тогда сборщик мусора просто просматривает эту информацию и бысто освобождает память под объекты со счётчиками ссылок == 0. Но в Lua, похоже, сборщик мусора просматривает вообще всё, что попало и смотрит, есть ли там ссылки на какие-то объекты. А если в программе имеется таблица из миллиона таблиц, тогда что делать сборщику мусора, кроме как тормозить программу?
339 сделок по одному тикеру в течение 1 мкс
 
Хотя, т.к. изменения в стаканах приходят кучей, и вроде бы с каким-то наименьшим периодом (> 0.01 с.), то о точном времени здесь говорить не приходится.
339 сделок по одному тикеру в течение 1 мкс
 
Цитата
Serge123 написал:
а откуда мне его ещё взять (от getQuoteLevel2 вестимо...)?
Ошибся, время здесь я беру через ossysdate() опять же с моего ПК. Ни OnQuote, ни getQuoteLevel2 времени не дают (хотя, здесь кто-то просил об этом в 2015 г. нашей эры...)
339 сделок по одному тикеру в течение 1 мкс
 
Цитата
nikolz написал:
У Вас время  09:50:00  не содержит микросекунд.  Это время Вашего компьютера, а не биржи.
Все времена содержат микросекунды, а время для содержимого стакана, естественно, берётся с моего ПК, а откуда мне его ещё взять (от getQuoteLevel2 вестимо...)? А время сделок, видимо, передаётся в OnAllTrade с сервера биржи(?)
339 сделок по одному тикеру в течение 1 мкс
 
В файлике a1.txt видно, что два рекорда по числу сделок с неизменным временем были не на аукционе открытия.
А почему время сделок не меняется, можно только предполагать, а может кто-то, кто сидит ближе к мосбирже, спросит у неё: как объясняется этот феномен?
339 сделок по одному тикеру в течение 1 мкс
 
Закачал сюда этот файл с содержимым стаканов и сделками:
drive.google.com/file/d/1fbPQM0Xfd-ULQFV7M0vBPW8m_6boaulj/view?usp=sharing
Там на 3-х отрезках за одно и то же время происходит > 300 сделок.
Рекорд 509 сделок, почему-то в этом месте много сделок с одной акцией, кто объяснит?
Где рекордные сделки искать, см. в файлике a1.txt.
Почему в этой программке утекает память??
 
Цитата
Nikolay написал:
Проверьте с новой нотацией  , что была введена в lua 5.4
Проверил, память утекает раза в 2 сильнее...
А где можно прочитать о нововведениях с примерами, я использовал только <const>, видел упоминание о <clear>, но поиск по документации в архиве lua-5.4.6.tar.gz с сайта lua.org не находит ни <const> ни аналогичных образцов...
Почему в этой программке утекает память??
 
Цитата
TGB написал:
Неиспользуемым ссылкам надо присваивать nil.
Попробую присваивать ссылкам на таблицы nil, хотя, я не понимаю, что от этого изменится для сборщика мусора... Ссылке на таблицу можно присвоить nil, а потом можно ещё что-нибудь присвоить, а сборщик мусора не заметит, что было присвоено nil. А если переменная объявлена внутри блока, то после завершения блока она вроде бы должна сталь nil. А что, если будет опять передача управления в этот блок и опять эта переменная получит значение, это будет та же самая переменная, или на неё каждый раз будет выделятья память? Я этого не представляю. Каждый раз выделять память переменной в блоке, который может быть внутри цикла, - дорогое удовольствие с точки зрения быстродействия...

В прошлой версии скрипта эти таблицы передавались как параметры коллбэка, а таблица от getQuoteLevel2 была локальной переменной в OnQuote, поэтому ссылкам на эти таблицы я ничего не присваивал (а зачем?) Но память всё равно почему-то потихоньку утекала.
До каких пор живёт таблица, передаваемая функции?
 
Интересно: как можно проверить, что мой вариант скрипта, в котором я перенёс обработку стаканов и обезл. сделок в main, имеет смысл? Мне кажется, что добавилось лишней работы в потоке main с разбором очереди, а в потоке Квика работа уменьшилась неощутимо...
Почему в этой программке утекает память??
 
Цитата
TGB написал:
Утечка есть.
Спасибо, интересно... А до вер. 5.4.1 этой ошибки не было?
Я подозреваю, что утечка памяти имеется не только при работе с файлами: как я вчера писал в другой ветке, мой скрипт по записи в файл содержимого стаканов и обезл. сделок потихоньку увеличивает занятую память, хотя в это время нет работы с файлом и я присваиваю false ссылкам на таблицы...
339 сделок по одному тикеру в течение 1 мкс
 
Цитата
nikolz написал:
Т е Ваши 339 это в 40 раз быстрее, чем реально достигнуто на уровне ядра системы на бирже
Может быть, дело было в том, что кто-то сделал крупную заявку по рыночной цене, а с другой стороны сервер просто пособирал лимитные заявки на эту сумму, и это можно сделать намного быстрее?

Иначе получается, что переданное время сервера биржи не соответствует его реальным часам. Напр., чтобы не тормозить с обработкой заявок, сервер не для каждой сделки опрашивает показания часов?
До каких пор живёт таблица, передаваемая функции?
 
Работает, но память, занимаемая скриптом, понемногу растёт, хотя, я после обработки в main таблиц из очереди записываю на место ссылок на них false.

И на мой сегодняшний вопрос в https://forum.quik.ru/forum10/topic8600/ так никто и не ответил, видно, не знают, что сказать...  :what:  
До каких пор живёт таблица, передаваемая функции?
 
Цитата
funduk написал:
Объекты живут, пока на них есть ссылки.
Похоже, что всё хорошо: переделал скрипт, чтобы он обрабатывал очередь от коллбэков в main, всё работает.
До каких пор живёт таблица, передаваемая функции?
 
Смутно помнится, в документации на lua.org я видел, что жизнь таблицы из параметров функции гарантируется до выхода из этой функции (т.е. до выхода из OnAllTrade). Какая-то ерунда пока получается с этим переносом обработки таблиц в поток main...
До каких пор живёт таблица, передаваемая функции?
 
Пытаюсь перенести обработку OnQuote и OnAllTrade в поток main. C OnAllTrade приходит ссылка на таблицу alltrade:
Код
function OnAllTrade(alltrade)
Сама таблица alltrade находится в стеке вызова этого коллбэка (очевидно, в стеке тоже ссылка, а сама таблица ещё где-нибудь?)

Если я эту ссылку на alltrade помещу в очередь и выйду из OnAllTrade, то не получится ли так, что после выхода из OnAllTrade эта таблица окажется мусором?

Аналогичный вопрос с OnQuote, которая вызывает getQuoteLevel2 и помещает возвращаемую ей таблицу (ссылку на неё) в ту же очередь для обработки в main.

Мне что, перед выходом из этих функций отключать сборку мусора, а после обработки всей очереди в main опять включать??
339 сделок по одному тикеру в течение 1 мкс
 
Цитата
nikolz написал:
Сервер не может провести 339 заявок за 1 мкс.
В 1-м моём сообщении речь шла о сделках. Ошибочно сделки перетекли в заявки...
Почему в этой программке утекает память??
 
С каждой записью в файл утекает ~ 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
339 сделок по одному тикеру в течение 1 мкс
 
Цитата
paluke написал:
339 разных заявок в стакане кто-то собрал одной крупной встречной заявкой.
А, ясно, почему такая высокая скорость. А если бы мелкие заявки собирали мелкими, то сервер не успел бы за 1 мкс провести все 339 сделок и образовалась бы очередь?
339 сделок по одному тикеру в течение 1 мкс
 
Цитата
nikolz написал:
Можете показать фрагмент этих сделок?
Это конфиденциальная информация. :cool:  
339 сделок по одному тикеру в течение 1 мкс
 
Сегодня наблюдал сабж по некоторой акции на мосбирже с пом. моего скрипта с OnAllTrade. При этом время сделки было то же самое по самую микросекунду. Это произошло сразу после смены цен покупки/продажи. Как такое возможно? Действительно ли эти 339 сделок произошли менее, чем за 1 мкс?

Можно ли где-то получить общее представление о том, как организованы торги на мосбирже и какие там характеристики у серверов (какая ОС, память, ЦП, диски, пропускной канал, ...)? Т.е. как бы совершить виртуальный тур по бирже. Примерно, как в видео на ютюбе о работе tsmc, где клепают лучшие ЦП.
Альтернатива CanSell/CanBuy
 
Из аналогичных функций есть ещё
getBuySellInfoEx
CalcBuySell
Утечка памяти в обработчике SetTableNotificationCallback, Функция обратного вызова обработчика событий пользовательской таблицы не освобождает память между вызовами
 
Цитата
Nikolay написал:
Это тоже лучше делать в main.
Мне желательно знать, когда было изменение в стакане, напр., чтобы знать, где я стою в очереди на сделки. Мне кажется, getQuoteLevel2 работает быстро, т.к. эту информацию даёт Квик, который уже получил её с сервера брокера.
К сожалению, квиковцы так и не сделали, чтобы можно было получать через OnQuote или хотя бы getQuoteLevel2 время с сервера биржи, в которое произошло изменение в стакане.

А что же с моим вопросом в #7?
Утечка памяти в обработчике SetTableNotificationCallback, Функция обратного вызова обработчика событий пользовательской таблицы не освобождает память между вызовами
 
У меня в связи с выносом обработки в main вопрос: напр., я хочу вынести из OnQuote разбор стакана в main, OnQuote будет вызывать getQuoteLevel2 и запоминать результат в циклический массив, а main будет брать его оттуда по текущему индексу, обрабатывать и освобождать память под эту табличку, которую получила через OnQuote от getQuoteLevel2. Не хочется использовать медленные sinsert и sremove. Можно ли сделать такую схему, чтобы не было конфликтов в связи с параллельным использованием данных между потоком main и потоком коллбэков?
Время начала приёма заявок на вечерней сессии
 
Кто знает, сабж для всех инструментов один? Такое впечатление, что нет, сегодня в моём инструменте, по-моему, заявки начали принимать раньше 19:00:01. Возможно, чтобы свои люди, кому хотелось очень продать, встали в очередь пораньше.

Говорят, продают, чтобы купить татнефть(?)
Сортировка в таблице quik
 
Вот описание SetCell, может, пригодится:

Функция задает значение для ячейки в строке с ключом key, кодом колонки code в таблице t_id. Параметр text задает строковое представление значение параметра value. Параметр value необязательный и по умолчанию равен 0. Для столбцов со строковыми типами данных параметр value не задается. Если параметр value не задан для ячеек всех остальных типов, то по столбцам, содержащим такие ячейки, не будет корректно работать сортировка, фильтрация и условное форматирование (см. Приложение 2). Функция возвращает true в случае успешного завершения, иначе – false.

Формат вызова:
BOOLEAN SetCell(NUMBER t_id, NUMBER key, NUMBER code, STRING text, NUMBER value)
Как в текстовом редакторе Far сворачивать (collapse) функции?
 
Чтобы от текста для кода функции оставался один заголовой функции.
Наверно, должен быть такой плагин, не могу найти...
Пример передачи управления из коллбэка в другой поток
 
Хочу посмотреть пример dll на C, которая обрабатывает коллбэк (напр., OnAllTrade) и для ускорения работы передаёт обработку коллбэка в заранее созданный повторно используемый поток и сразу делает выход. Примеры на C++ не очень интересуют...

И ещё подскажите, в каком потоке работает сборщик мусора? В main, в Квике или в своём собственном? И этот сборщик существует для каждого скрипта свой?
Проверка на nil
 
А может быть такое, что Квик что-то меняет в своей таблице, а скрипт в это время читает это поле?
Помню, в районе quik2dde.ru упоминаемый мною kalikazandr писал, что такое возможно, якобы, даже неполный кусок изменяемой Квиком строки можно прочитать. Или это байки алготрейдеров?
Есть ли оптимизация при конкатенации строк?
 
Ничего не понятно, но всё так, как надо.  :smile:

Где-то в Интернете есть онлайн сервисы, на которых вводишь код на разных языках и смотришь скомпилированный код. Возможно, так можно увидеть через байт-код Луа, как фрагменты компилируются.

А я вчера много времени потратил на выяснение: будет ли ускорение от такой оптимизации в OnAllTrade и в OnQuote, где вычисляется символьное время сделки/изменения в стакане для вывода типа
Код
UWGN 18:49:59.388251 47.4 482 S
IRKT 18:48:33.469798 bids=20 85.45/1806 85.40/56 85.35/6 85.20/163 85.15/4 85.05/12 85.00/36 84.90/28 84.85/11 84.80/3 84.60/2 84.50/99 84.40/3 84.30/2 84.25/6 84.20/10 84.15/7 84.10/43 84.05/129 84.00/482 offers=3 85.20/15 85.40/13 85.45/512
Часы и минуты меняются редко, цена и количество акций в стакане по нелучшим ценам тоже: что, если запоминать эти значения в строках, и если они не изменились, вставлять закэшированные?
Мерял время выполнения этих коллбэков через os.sysdate().mcs, получал 0. Снизил частоту ЦП до 800 МГц, внутри коллбэка сделал цикл на 10 повторов, опять 0. Как-то не верится в такое: слишком быстро. А если повтор цикла увеличить, то выскакивают цифры ~ 5000 мкс, 10000, 15500. Про 15500 я знаю, что это квант времени для работы потока. Поэтому я так и не понял, есть ли от этого ускорение. Ведь в этом случае этой оптимизации придётся делать проверки, что время не поменялось, запоминать новое время, конкатенировать строки... В общем, НИР/ОКР ерундой прозанимался... :what:
Есть ли оптимизация при конкатенации строк?
 
Кто-нибудь знает, при нескольких конкатенациях:
Код
str1 = 'b'
str = str .. 'a' .. str1 .. str1
str будет 3 раза удаляться и пересоздаваться, или будет какая-то оптимизация этого присваивания?
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Если скрипту давать работать с 10% от депозита, то получится 37% годовых грязными, или 32% чистыми. Если вместо воды пить шампанское, получается не так уж и много...

Когда-то давно в телеграм канале один старый трейдер советовал брать и держать акции сберика, когда одна стоила 132 р., потом когда 137 р., 142 р., т.к. идёт долгострочный тренд с прицелом на ист. максимум. Если бы я послушал его, то сейчас без всяких "ботов" и "стратегий" имел бы 100% годовых чистыми...

Подозреваю, что если бы я подписался на платный канал к.э.н. с птичьей фамилией из Владивостока, который следит за фондовым рынком, то было бы примерно то же...
Повторное использование строки
 
Цитата
TGB написал:
Почему бы не записывать строку сразу в файл (в системе это буферизуется). Вы проверяли, сколько записей выполняется в файл за 1 секунду, если писать напрямую? Если вы это сделаете, то, возможно, удивитесь.
Я кэш буферам виндовс уже давно не удивляюсь, на диске тоже что-то похожее есть... Если писать с буферизацией, то сначала кусочки будут переписываться из памяти в память, а потом на диск, а если я сам буду писать без буферизации, то, как я надеюсь, винда будет писать сразу на диск. Хотя, в принципе, не факт, что это будет быстрее, тут опять нужны эксперименты (за которые денег не дают).
Повторное использование строки
 
Цитата
TGB написал:
При этом надо понимать, что реально работающую стратегию, стабильно, без провалов, приносящую доход хотя бы в 20% (в текущий момент) на годовом периоде, вам никто не предложит.
Я безо всякой "стратегии" как раз этим давно занимаюсь, акциями металлами я уже давно не торгую и уже отвык от этих стрёмных активов. Я ещё в октябре "силовым методом" получил статус квала и получаю взаймы от брокера столько, что можно купить квартирку в Москве (но, правда, не для всех активов). Проблема, как успеть продать лишнее по цене на шаг выше, а не по цене покупки...

Ближайшая задача слегка автоматизировать эту торговлю, чтобы не щёлкать в бешеном темпе по 5-ти стаканам, когда "шара попёрла"...

Кстати, я вчера день потратил на выяснение возможности повторного использования строки и выяснил, что это невозможно, т.к. Луа при малейшей попытке конкатенации моментально отправляет эту строку в мусор, пусть даже её длина равна 0 (очевидно, проверок не делается). Поэтому, надо либо держать строки в массиве и использовать concat, либо в длл.
Повторное использование строки
 
Когда я это делал, то только начал писать на Луа, не знал, что мне нужно делать, и какая дорога к деньгам более прямая. Просто хотел накопить таких файлов и попробовать найти закономерности взлёта цены. И у меня околонаучный склад ума, как у киплинговского слонёнка: хочется копать вглубь и искать там золотые самородки. До сих пор ничего роботоподобного не сделал...
На этом форуме могут до кровохарканья обсуждать двойные и тройные очереди, показывать загадочные картинки, от которых рябит в глазах, но ничего действительно полезного не скажут.
Повторное использование строки
 
Цитата
TGB написал:
Этот коллбек я до сих пор не использовал.
Тогда посмотрите на кусочек от вывода моего Луа скрипта, который обрабатывал OnAllTrade от 4 января 2023 г.:
Скрытый текст
Он записывал из таблицы, переданной ему, тикер, время, цену, количество лотов и направление сделки. И таких строк с тем же самым тикером и временем набралось 58. И это только по одному тикеру, а ещё работал обработчик OnQuote, который в этот же файл выводил содержимое стаканов.
Вот ещё кусочек из того же файла, со стаканами:
Скрытый текст
Повторное использование строки
 
Цитата
TGB написал:
Где вы обнаружили коллбеки QUIK, вызываемые десятки раз за 1 мкс?
В OnAllTrade видел: время на сервере биржи с точностью 1 мкс не меняется, а в файл записалось больше 64 сделок...
Повторное использование строки
 
Можно найти, что эта тема (чудовищная конкатенация строк в Луа) волнует народ в районе англоязычного stackoverflow, а здесь создатель Луа предлагает такую полумеру: https://www.lua.org/pil/11.6.html
Повторное использование строки
 
И да, ваш перегруженный вариант анекдота некорректен: ведь я с самого начала играл на стороне чукчи...
Повторное использование строки
 
Тут дело не в том, что есть запись на диск, а в том, что за 1 мкс десятки раз может выполняться оператор
Код
mess = mess .. <строка от коллбэка>
что будет приводить к созданию новой строки и переписыванию в неё содержимое старой, которую должен убрать сборщик мусора. И ЦП будет занят этой бесполезной издевательской работой. Я считаю, что в этом причина торможения.
Страницы: 1 2 3 4 5 6 7 След.
Наверх