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

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

Страницы: Пред. 1 2 3 4 5 6 7 След.
Почему в этой программке утекает память??
 
Цитата
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 .. <строка от коллбэка>
что будет приводить к созданию новой строки и переписыванию в неё содержимое старой, которую должен убрать сборщик мусора. И ЦП будет занят этой бесполезной издевательской работой. Я считаю, что в этом причина торможения.
Повторное использование строки
 
И всё-таки, я на этом форуме несколько раз видел, что людям издавна не хватает скорости (и для них это "жизненно важно"), а наращивание числа ядер и повышение тактовой частоты мало что не даёт, вот ещё пример такой темы: https://forum.quik.ru/forum10/topic3872/

А геологам просто надо держать свои снегоходы заведёнными. :smile:
Повторное использование строки
 
Мне кажется, что ничего не случится, если извне (из длл) строка будет изменена, ведь, если строка не находится внутри таблицы, вычисление хеша от неё не нужно?
Повторное использование строки
 
Кто-то предлагал вместо наращивания строки запоминать каждый вывод коллбэка в строку таблицы t, а потом делать
Код
s = table.concat(t)
Но это тоже дурацкий костыль для обхода неизменяемости строк Луа... Чувствую, что можно сделать, как я хотел в #1...
Звук через mciSendString и MessageBeep
 
Вопрос, почему mciSendString в консольной программе не выдаёт звук, так и остался открытым...
Как вы боретесь с описками в именах переменных?
 
Не нашёл нормального "линтера", а условный оператор это не совсем то и громоздко...
Повторное использование строки
 
Как-то уже об этом писал...
Есть строка mess (age), в которой коллбэки накапливают свой вывод, при превышении определённой длины строка записывается в файл. Потом обычно пишут mess='', чтобы сбросить длину строки в 0, но что в этом случае произойдёт? Создастся новая строка, или в структуре TString для этой строки её длина установится в 0?
Я не вижу, где хранится число байтов, выделенных под строку, и как контролируется выход за её предел при дописывании к строке?
Не хочется ненужного пересоздания строки и сборки мусора, а хочется просто зарезервировать под строку 10 Мб и использовать эту же память под строку постоянно. Зачем выметать сор из избы строки, если можно обойтись без этого? Как это всё оптимизировать и сделать, как в нормальных языках типа того же си?
DNS влияет на скорость работы Квика?
 
Похоже, что DNS не ускорит работу Квика, хотя, в доступных соединениях у Сервер1 и Резерв стоят IP, а у Сервер 2 в столбце IP стоит почему-то quik.vtb.ru.
Как получить цены "BID" и "OFFER" чтобы они выводились как в стакане?
 
Цитата
paluke написал:
Код
string.format('%.'..tostring(price_scale)..'f', tonumber(price))
Здесь вызов tostring по-моему лишний.
DNS влияет на скорость работы Квика?
 
Цитата
nikolz написал:
Serge123 ,
А Вы знаете, зачем нужен DNS?
----------------------
Судя по вопросу, Вы этого не знаете.
----------------------
Прочитайте в интернете и вопрос отпадет сам собой.  
Я когда-то знал это, даже своей программкой получал пакет по UDP с корневого сервера. Сейчас поискал в Гугле, зачем нужен DNS, оказалось, что для того же, для чего и раньше:

===
DNS (система доменных имен) преобразует доменные имена, удобные для человеческого восприятия (например, www.amazon.com), в IP-адреса, понимаемые машиной (например, 192.0.2.44).
===

и вдобавок

===
Какой DNS самый быстрый?
1.1.1.1 — самый быстрый в мире, ориентированный на конфиденциальность DNS-резолвер
===

А в чём был замечен криминал у этой темы?
DNS влияет на скорость работы Квика?
 
Ошибся: не провайдеру, а брокеру...
DNS влияет на скорость работы Квика?
 
Как часто ПК запрашивает DNS сервер для посылки данных провайдеру? Можно эту частоту уменьшить?
DNS влияет на скорость работы Квика?
 
Или DNS родного провайдера лучше? Чем можно сравнить скорости, в Квике можно как-то заметить ускорение?
DNS влияет на скорость работы Квика?
 
Сегодня увидел, что кое-кто на западе советует установить самые быстрые и бесплатные DNS 1.1.1.1 и 1.0.0.1, например:
nimaboldi.uz/как-настроить-в-windows-10-самый-быстрый-dns/
Есть ли от этого польза В РФ?
А есть ещё DNS от Гугла 8.8.8.8.
Что из этого всего лучше?
Вопрос по стеку Lua, стеку Lua и нюансы его чтения
 
Цитата
nikolz написал:
nil  в Lua  - это всегда false.
Добавлю отсебятину: в Lua для логического типа и типа nil не используется память под данные: просто байт для хранения типа переменной указывает, что тип этой переменной nil. Для логического типа байт типа указывает, что это лог. тип, а дополнительный бит в этом байте равен 0/1 в случае false/true.
Как вы боретесь с описками в именах переменных?
 
В Луа нет опции предупреждать об использовании необъявленных переменных, как это сделано в Перле, поэтому могут возникать труднонаходимые ошибки. Есть ли какие-нибудь сторонние программы для проверки скриптов на такие описки?
Получить всю таблицу целиком, Получить всю таблицу целиком без цикла
 
Не знаю, почему не выводит, но я бы написал fn так (для чего в неё передавать sec_code и currentbal?):
Код
function fn(limit_kind)
 return limit_kind==2
end
Схема торговой программы
 
Цитата
Constantin написал:
Я тоже свою систему написал. Правда не торгую.
Она у вас по какому принципу покупает: по индикаторам, по всплеску цены акции, по минимуму у волны в коридоре цен?.. При проверке работы в плюсе торгует?
Страницы: Пред. 1 2 3 4 5 6 7 След.
Наверх