Что изменилось в 11.1.1.11, что перестали приходить данные по CreateDataSource?
Пользователь
Сообщений: Регистрация: 30.01.2015
05.06.2024 19:14:36
Цитата
Georgii написал: Всем привет. В продолжении вопроса ветки еще раз хочу уточнить: выполняю операцию создания источника данных, пытаюсь получить значение функции size и мне выдает ошибку Текст модуля:
Код
function main ()
if isConnected () then
DataSource = CreateDataSource ( "TQBR" , "FLOT" , INTERVAL_H1)
dssize = DataSource:size()
message (tostring(dssize))
end
end
Текст ошибки: " attempt to call a nil value (method 'size') "
Добавлял ожидание в 10 секунду перед обращением к размеру, результат тот же.
CreateDataSource надо делать один раз, а у вас на каждый чих. Вы сервер просто за...ли . Напишите с проверкой и ожиданием. На форуме когда выкладывал.
Сложный индикатор с сохранением его данных для каждой свечи
Хочу написать индикатор, для которого нужно сохранять данные предыдущих значений индикатора в контейнер. Как при инициализации индикатора пройтись по всем предыдущим свечкам и записать значения индикатора для каждой из них в контейнер?
может не писать индикатор куда-то, а читать индикатор с графика , когда надо. либо записать формулу и вычислять, когда надо.
написал: т е два квака запущены на одном компе?Два брокера?
Да. Один брокер ВТБ. И на одном сервере даже. Просто 2 UID. Версии одинаковые.
предположу, что проблема на стороне сервера.
Колбек на остановку Скрипта, Колбек на остановку Скрипта
Пользователь
Сообщений: Регистрация: 30.01.2015
04.06.2024 03:20:22
OnStop
Функция вызывается терминалом QUIK при остановке скрипта из диалога управления и при закрытии терминала QUIK.
Формат вызова:
[NUMBER time_out] OnStop(NUMBER flag)
Функция возвращает количество миллисекунд, которое дается скрипту на завершение работы. Если функция не возвращает число, то таймаут завершения работы скрипта остается равным 5 секундам.
По истечении интервала времени, данного скрипту на завершение работы, функция main() завершается принудительно. При этом возможна потеря системных ресурсов.
При остановке или удалении работающего скрипта Lua из диалога управления «Доступные скрипты» параметр вызова flag принимает значение «1». При закрытии терминала QUIK – значение «2».
Пример:
function OnStop(flag) stopped = true return 3000 -- задается таймаут в 3 секунды end function OnStop(flag) stopped = true return '3000' -- возвращаемое значение - не число, таймаут остается равным 5 секундам end
написал: , как уже подметили ранее: рекомендуем обновить рабочее место QUIK. Если обновиться нет возможности, то просьба увеличить интервал обновления данных.
Поставил 3 сек. Но опять произошло зависание приёма данных на 60 секунд. При этом в файл curr_data.log ничего не записалось. Так что дело не в нём. Так же дело и не в интервале обновления, потому что в другом терминале стоит 1 сек и существенно больший объём данных принимается и он не зависал. Может это брокер блокирует?
Правильно я понимаю, что у Вас два компа в одной сети. На одном все ок, на другом виснет? Если так, то я бы сравнил в диспетчере задач параметры CPU ,памяти и сети.
Глобальные переменные индикатора, не работает код индикатора на lua при попытке обратится к переменной объявленной в функции Init()
Пользователь
Сообщений: Регистрация: 30.01.2015
31.05.2024 07:17:02
Цитата
zveno013 написал: К сожалению я так и не избавился от многократного расчёта индикатора,
Это глюк КВИКА. Существует давно и избавиться от него сложно. Можно сделать костыль, но он не удобный. Делал но потом отказался. --------------------- Вы очевидно не правильно понимаете работу функции Init Она вызывается один раз при загрузки скрипта. ------------------------ Надо делать как у меня написано. т е все глобальные переменные надо устанавливать внутри onCalculate в условии равенства индекса 1.
Глобальные переменные индикатора, не работает код индикатора на lua при попытке обратится к переменной объявленной в функции Init()
Добавлю в вопросу глобальных переменных еще один: Возможен ли доступ к глобальной переменной индикатора из скрипта lua и какими методами? (подразумевается обращение по индификатору)
Предлагаю уточнить терминологию. ---------------- глобальные переменные есть в языке Луа, но не в индикаторе. В индикаторе есть настраиваемые параметры, которые задаются в массиве settings и которые можно изменять на графике через функцию окна редактирования. ------------------ Значения самого индикатора можно читать в других индикаторах с графика, если присвоить индикатору метку (см. док на библиотеку QLua) ================ Поясните свой вопрос подробнее, можно с примером.
Глобальные переменные индикатора, не работает код индикатора на lua при попытке обратится к переменной объявленной в функции Init()
Пользователь
Сообщений: Регистрация: 30.01.2015
29.05.2024 08:12:09
попробуйте так ( переписал Ваш скрипт, но не проверял.)
Код
name="KEZ_Casper"
Settings={Name =name,period = 28,period2 = 28}
function OnCalculate(i)
if i==1 then
VuEma,Vu,Pu,Pd,F = 1,0,0,0,0
message("VuEma = " .. VuEma)
end
local d=C(i)-O(i);
Pu=H(i)-L(i); pd=Pu-d;
if 0>d then d=Pu; Pu=Pd; Pd=d end -- отрицательная свеча
Vd=(Pd*V(i))/(Pu + Pd)
Vu= V(i)-Vd
F=2/(Settings.period + 1)
VuEma = Vu * F + VuEma * (1 - F)
return Vu, -Vd, VuEma
end
function Init()
local t={} Settings.line=t;
t[#t+1]={ Name = "Casper", Color = RGB(255, 0, 0), Type = TYPE_LINE, Width = 1}
t[#t+1]={ Name = "A", Color = RGB(0, 100, 100), Type = TYPE_LINE, Width = 1}
t[#t+1]={ Name = "B", Color = RGB(100, 100, 0), Type = TYPE_LINE, Width = 1}
return #t
end
Access Violation at adress и Unknown exception at adress, Прошу помощи с ошибкой Lua
написал: А то то, что при этом остаётся рабочим QUIK - это прям я очень удивлен и восхищен разработчиками квика!
По-моему, это нормально, у меня вчера подряд много раз так было в dll на C. И только, когда я попытался записать в неоткрытый файл, Квик не устоял. ::
dll проще и быстрее отлаживать не в КВИКЕ, а в SCITE
Access Violation at adress и Unknown exception at adress, Прошу помощи с ошибкой Lua
Пользователь
Сообщений: Регистрация: 30.01.2015
27.05.2024 17:59:33
Цитата
Кот написал: Обращаюсь к форуму, потому что уже сам не понимаю где ловить ошибку.
История :
Quik 8.13 Боевой робот, достаточно масштабный, но стабильно работающий более года. Внешняя библиотека DLL на Cpp.
После совершенно незначительных обновлений библиотеки (тип переменных) и управляющего библиотекой скрипта Lua (тип переменных) скрипт регулярно падает с двумя видами ошибок - 1. Access Violation at adress XXX 2. Unknown Exception at adress XXX
При этом сам Quik остается рабочим, просто завершает скрипт.
Помогите сузить круг поиска, правильно ли я понимаю, что проблема исключительно в DLL или, возможно, во внутренних функциях, например GetParamEx() и подобных?
Спасибо.
1) Вы случаем при небольших изменениях не сменили версию Lua c 5.3 на 5.4? ----------------------- 2) Проверьте свои библиотеки на предмет границ массивов в циклах . Ошибка Access Violation at adress намекает на то, что где-то программа пытается выйти за границы массива. --------------------- 3) Unknown Exception at adress -система сообщает, что она не может обработать данную ошибку, так как для нее нет обработчика. =================== Поставьте вывод в лог файл, чтобы локализовать функцию, в которой возникает ошибка.
Формат вывода double без правых нулей
Пользователь
Сообщений: Регистрация: 30.01.2015
27.05.2024 08:42:13
до кучи:
SciTE
Пользователь
Сообщений: Регистрация: 30.01.2015
18.05.2024 06:53:02
Цитата
VPM написал: , Спасибо, только не понятно где переключаете, и где и как подключается путь к исполняемому файлу луа разных версий?
версия луа определяется моими dll. У меня сейчас dll собраны под 5.3, то работаю с 5.3 Поэтому для lua версии переключаю редко и руками, переставляя #. ----------------------- Для других языков, а также Luajit переключаю расширением. Можно и версии луа переключать расширением.
Как узнать, какому инструменту принадлежит метка на графике?
Пользователь
Сообщений: Регистрация: 30.01.2015
17.05.2024 17:23:12
Как вариант возможно, что КВИК записывает теги меткам по имени инструмента. Когда отключаем перемещение, то метка пустая
Quik ОЧЕНЬ долго загружается на виртуальной машине.
Пользователь
Сообщений: Регистрация: 30.01.2015
17.05.2024 17:12:23
Цитата
Кирилл написал: Точно - нет, но раза в три. При старте с сетевого диска и лог-файлом тормоза такие, что неоднократно видно строку "сервер принудительно разорвал соединение". Похоже, даже брокер терпеть не может тормоза этой программы. Причем, по операциям диска, не такие уж там и объемы.
предположу, что на виртуальной иначе реализована работа с экраном. Вот графический драйвер и тормозит по сравнению с ноутом. Попробуйте перед выходом из квика сворачивать графики , а после загрузки - разворачивать.
Как узнать, какому инструменту принадлежит метка на графике?
Пользователь
Сообщений: Регистрация: 30.01.2015
17.05.2024 17:08:49
Провел тест. Как и говорил ранее, КВИК никак не связывает метку с инструментом. Но метка связывается с ценой, временем и номером отсчета. --------------------- Как говорят фокусники - следите за руками: --------------------------- График инструмента ГАЗПРОМ c меткой Меняем инструмент на SOLF и выставляем новую метку. Старой метки не видно. теперь возвращаем первый инструмент и видим старую метку. и редактируем метку, отключаем ее перемещение со шкалой времени и со шкалой цены Теперь устанавливаем второй инструмент обратно. И видим обе метки
Как узнать, какому инструменту принадлежит метка на графике?
Пользователь
Сообщений: Регистрация: 30.01.2015
17.05.2024 15:28:59
метки выводите скриптом?
Как узнать, какому инструменту принадлежит метка на графике?
Пользователь
Сообщений: Регистрация: 30.01.2015
17.05.2024 15:26:35
вариантов нет. попробую так сделать
Как узнать, какому инструменту принадлежит метка на графике?
непонятно, у Вас на графике есть какие-то индикаторы и на них метки. Кидаете на этот график индикатор. В нем в функции init удаляете все метки и далее в onCalc рисуются новые. что не так?
Индикаторов нет. Есть всего один график.
Последовательность моих действий: 1. Открыл на графике SBER. 2. Поставил метки для SBER 3. Заменил SBER на ROSN на этом же графике. Метки SBER-а теперь не отображаются. 4. Поставил метки для ROSN 5. Переключился снова на SBER. Отобразились метки SBER-а, а метки ROSN теперь скрыты.
Как терминал понимает, какие метки надо отображать, а какие скрывать? Можно как-то программно это распознать, без записи в HINTы или массивы?
Полагаю, что ответ -никак. На разных графиках инструментов у Вас разные значения цены. Метки другого инструмента вне поля картинки. Попробуйте сжать масштаб по Y так чтобы он покрывал диапазон цен двух инструментов.
Как узнать, какому инструменту принадлежит метка на графике?
Нет, метка привязывается к графику (идентификатор графика привязан к графику, а не к инструменту). Варианты, типа как предложил, я не писал, так как там сложно: если руками метку удалили, то все идентификаторы при перезагрузке терминала сдвигаются). Перебором и проверкой всех существующих меток проще.
Это я понимаю, что метки в одной куче лежат. Но если я метку вручную поставил через меню, и не указал инструмент в HINT, то мне уже никак не понять, на каком инструменте я ее поставил? Сам торговый терминал распознает как-то.
непонятно, у Вас на графике есть какие-то индикаторы и на них метки. Кидаете на этот график индикатор. В нем в функции init удаляете все метки и далее в onCalc рисуются новые. что не так?
Как узнать, какому инструменту принадлежит метка на графике?
Пользователь
Сообщений: Регистрация: 30.01.2015
16.05.2024 19:17:44
Если хотите удалять избирательно при новом старте, то тогда пишите в файл.
Как узнать, какому инструменту принадлежит метка на графике?
Имеется в виду строки, где вызываются разные версии Lua, в моем варианте это command.go.*.lua;*.macro=dofile $(FilePath) command.go.subsystem.*.lua;*.macro=3
файл lua.properties фрагмент из него запишите в конец файла:
так я его не писал. Есть на официальном сайте. Работаю в основном на этой : SciTE Version 1.75 Apr 25 2009 11:30:59 by Neil Hodgson. December 1998-November 2007.
Lua scripting language by TeCGraf, PUC-Rio
-------------------- но есть эта: SciTE Version 3.7.5 Jan 16 2023 18:01:44 by Neil Hodgson. December 1998-May 2017.
[QUOTE]VPM написал: В SciTE, ну по крайней мере до версии указанной выше, в качестве внутреннего интерпретатора, используется Lua 5.1, и ее нельзя просто заменить на версию Lua 5.4. В статье выше был предложен вариант использования внешнего интерпретатора в моем случае это Lua 5.4, для этого был скачен
Код
[/CODE] [URL=/user/62/]nikolz[/URL], Тут видимо дело в версиях, в Lua 5.3 есть поддержка Lua 5.1, а Lua 5.4 уже нет такой поддержки, да и изменения есть серьезные, которые не поддерживаются в ранних версиях.
[URL=/user/3132/]Nikolay[/URL], Так ведь просто удобно, нажал кнопочку и привет. Потом просто привычка, быстрая проверка кода, не отходя от "кассы". [QUOTE]
[/QUOTE]
[/QUOTE]
вот запускаю скрипт в lua5.4 Он работает и в lua 5.3 и и lua5.1[CODE]>D:/lua54/lua54.exe -e "io.stdout:setvbuf 'no'" "test2020.lua"
>Exit code: 0
можете выложить Ваш скрипт я его проверю в 5.3 и 5.4
SciTE
Пользователь
Сообщений: Регистрация: 30.01.2015
14.05.2024 10:34:55
Цитата
VPM написал: Скорее всего на прямую и нельзя, один и тот же код, выводит:
использую лишь компилировать и выполнить(Lua 5.3. ) это исполнение теста(получение данных с биржи):
Код
>D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "Moex.lua"
engines
id;name;title
1;stock;Фондовый рынок и рынок депозитов
2;state;Рынок ГЦБ (размещение)
3;currency;Валютный рынок
4;futures;Срочный рынок
5;commodity;Товарный рынок
6;interventions;Товарные интервенции
7;offboard;ОТС-система
9;agro;Агро
1012;otc;ОТС с ЦК
1282;quotes;Квоты
markets
id;trade_engine_id;trade_engine_name;trade_engine_title;market_name;market_title;market_id;marketplace;is_otc;has_history_files;has_history_trades_files;has_trades;has_history;has_candles;has_orderbook;has_tradingsession;has_extra_yields;has_delay
5;1;stock;Фондовый рынок и рынок депозитов;index;Индексы фондового рынка;5;INDICES;0;1;0;1;1;1;0;1;0;0
1;1;stock;Фондовый рынок и рынок депозитов;shares;Рынок акций;1;MXSE;0;1;1;1;1;1;1;1;0;1
2;1;stock;Фондовый рынок и рынок депозитов;bonds;Рынок облигаций;2;MXSE;0;1;1;1;1;1;1;1;1;1
Добрый день, Всем С момента появления VMLua в КВИКЕ неоднократно рассказывал о том, что применение event вместо sleep не только экономит ресурсы процессора, но и позволяет не пропускать события в колбеках и максимально бысто на них реагировать. говорил об этом например здесь:
--------------------- К сожалению, кроме бессмысленного хамства некоторых посетителей форума, ничего конкретного никто не написал. --------------- Но вот наконец-то появился вменяемый чел . и после моей попытки в очередной раз объяснить преимущество event
он все же решил проверить это и убедился, что это так действительно:
Код
Просто проверка концепции:
Кодw32 = require("w32")
run = true
evt = false
function OnInit()
evt = w32.CreateEvent(nil, 0, 0, nil)
end
function OnStop()
run = false
w32.SetEvent(evt)
end
function main()
while run do
w32.WaitForSingleObject(evt, 1000000)
end
w32.CloseHandle(evt)
end
В колбеках вызываете SetEvent - main сразу просыпается.
С чем Всех и поздравляю.
Таблица CreateDataSorce в Lua стеке и изменение положение в стеке, Таблица CreateDataSorce в Lua стеке и изменение положение в стеке
Пользователь
Сообщений: Регистрация: 30.01.2015
28.04.2024 07:25:29
Цитата
Ramy написал: Или CreateDataSource обращается к таблице помещенной в Луа-стек по указателю и изменение положения в Луа-стеке не меняет адрес таблицы ?
CreateDataSource создает эту таблицу и при выходе помещает ее на вершину стека. Ей пофиг, что Вы удаляли или нет из стека из стека.
Что будет, если внешняя dll изменит содержимое строки Lua?
написал: как вы предполагаете изменить значение локальной переменной. Она не передается как таблицы по указателю, поэтому Вы не получите к ней доступ в функции, а получите ее копию.
Странное рассуждение... Адрес структуры для локальной строки передаётся в виде указателя в параметре при вызове из Lua скрипта моей dll.
А вдруг кто-то знает, но не хочет сказать... Вот TGB, по-моему, глубоко копает.
Вы на ходу придумываете? Вы хотя бы смотрели что написали. Где в вашем примере структура?
Код
local str = 'abc'
--------------------------- "Один дурак может задать столько вопросов,что сто мудрецов не смогут ответить"
Ошибки использование функции 'unpack')
Пользователь
Сообщений: Регистрация: 30.01.2015
28.04.2024 07:15:37
Цитата
Роман написал: Подскажите, почему при использовании в скриптах функции 'unpack' может возникать такая ошибка "LuaIndicators\SO.lua:61: attempt to call a nil value (global 'unpack')"? Хотя индикатор от разработчиков и без скрипта в терминале он таких ошибок не вызывает.
LuaIndicators\SO.lua:61: attempt to call a nil value (global 'unpack')"? -- попытка вызвать nil значение. в строке 61 ---------------- Это старая версия индикаторов для Lua 5.1 в которой unpack был глобальной функцией -------------- сейчас в квике используется версия 5.3 .и 5 .4 в них функция unpack перенесена в библиотеку table. ----------------- Надо в скрипте вместо unpack записать table.unpack
Почему в этой программке утекает память??
Пользователь
Сообщений: Регистрация: 30.01.2015
27.04.2024 16:35:22
Вы учтите, что за все что ММ выставит против рынка биржа ему заплатит. Если ММ будет каждую ms выставлять по 1 заявке против рынка и биржа будет платить ему 1 руб за заявку, то 10 часов торгов он получит 36 млн. руб. в день. Разве этого мало? --------------------------- HFT роботы тем и страшны для обычных трейдеров, что они как пираньи нападают быстро кусают понемногу, а в итоге быстро скушают и слона.
Почему в этой программке утекает память??
Пользователь
Сообщений: Регистрация: 30.01.2015
27.04.2024 16:29:20
Цитата
paluke написал: Маркетмейкеры не выставляют заявок по одному лоту. Для них есть минимальный объем заявки, и это не один лот.
Cоглашусь, что по 1 заявке больше всего выставляют роботы. ММ еще как выставляют. Они тоже роботы.
Что будет, если внешняя dll изменит содержимое строки Lua?
При этом str не используется для индексирования в таблицах, т.е. нет такого: table.str ...
Похвально, что Вы интересуетесь такими вопросами, на которые скорее всего Вам на этом форуме не ответят. Но чтобы ответить Вам на него мало информации. ---------------- Попробуйте уточнить следующее: как вы предполагаете изменить значение локальной переменной. Она не передается как таблицы по указателю, поэтому Вы не получите к ней доступ в функции, а получите ее копию. т е чтобы изменить ее из DLL надо сделать хорошие грабли и достать большой бубен.
Смысл в том, что ММ ставит встречную сделку и и если Вы выставляете по рынку и бъете в заявку MM, то ему(ММ) биржа платит денюшку. ----------------------- Поэтому он и ММ.
Почему в этой программке утекает память??
Пользователь
Сообщений: Регистрация: 30.01.2015
26.04.2024 11:57:29
Цитата
Serge123 написал: Видимо, имелось в виду, что длл получает инфо, что коллбэк что-то записал в очередь, и длл запускает main, которая всё остальное время спит. Или что-то подобное.
Если не ошибаюсь, Вы осваиваете написание dll для луа. Вроде бы уже выкладывал исходник для event и wait ----------------- Можете взять библиотеку w32 для Lua:
Почему в этой программке утекает память??
Пользователь
Сообщений: Регистрация: 30.01.2015
25.04.2024 17:04:34
пардон, печатка: Да именно sleep в main. Когда очередь пустая, то main остановится на указанное время.
написал: Кроме того, у меня нет 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 секунд).
написал: так как вызов функции getQuoteLevel2 существенно меньше рисования стаканов.
А у Вас обработка сравнима по времени с getQuoteLevel2 и другими необходимыми Вам вызовами qlua? Я тестирую на том, чем сам потом пользоваться буду, для меня пока нет разницы. В очереди для стаканов не вижу смысла, кстати, я просто хэш-таблицу заюзаю с ключами по sec и содержимым sent,updates,received,стакан.
Обработка сравнима. Создаю потоки из пула системных потоков и в них запускаю Luajit (из всего, что пробовал это быстрее всех работает). В указанном ранее тесте в отдельные моменты создавалось максимум 11 потоков. ------------------ Я не рисую стаканы. Скальпингом не занимаюсь. Использовал стакан при реализации алгоритма закрытия позиции по стопу. Но в основном использую либо лучшие предложения либо по рынку, так как торгую лишь ликвидными акциями.
Я провёл тест, который не выявил разницы. Может быть, getQuoteLevel2 не нужна синхронизация? Запустил два почти одинаковых скрипта, рисующих стакан каждый в своём потоке (настроено так, чтобы гуи рисовался в main скрипта, а не в главном потоке квика). Ниже часть кода одного из скриптов с комментами про замены, чтобы получить второй скрипт. Единственная стабильная разница, что вызов в main даёт на 1 секунду больше CPU time, хотя этот скрипт был запущен на 4 секунды позже (запускал в дневной клиринг, как видно на скрине, чтобы не было обновлений стакана на срочке)
Код
Мы с Вам о принципиально разных решениях говорим. -------------------------------------- В вашем тесте - один инструмент, стакан которого вы рисуете. В этом случае Вы не заметите разницы, так как вызов функции getQuoteLevel2 существенно меньше рисования стаканов. ============== Моя постановка задачи для теста такая. ---------------------- Торгуется портфель инструментов. Поток main работает по событиям. Все события формируют очередь(может быть несколько очередей) ---------------- 1) В этом случае, если getQuoteLevel2 вызывать в колбеке, то в очередь попадет весь стакан и clas и sec. Т е время работы колбека всегда будет включать запрос стакана. ========= 2) Если в колбеке не запрашивать стакан, то в очередь запишется clas и sec. Т е время работы колбека будет меньше всегда, чем в первом случае. -------------------- В main будет вызываться функция getQuoteLevel2 . Она находится в глобальном стеке и обращение к ней уже синхронизировано в библиотеке QLUA. Но так как к ней никто вне main не обращается, то ее вызов не будет ничего тормозить и ничего блокировать не надо. ------------------ Если рынок очень активен, то в первом варианте Вы получите целую толпу стаканов, которые уже устарели. --------------------- Во втором варианте в очереди будет всего один колбек и в main будет прочитан самый последний стакан. -------------------- У меня робот работает именно так.
Почему в этой программке утекает память??
Пользователь
Сообщений: Регистрация: 30.01.2015
24.04.2024 11:36:00
, Если хотите определить причину, то запишите в лог значения времени : время выставления заявки скриптом, время колбек транзакции время колбека заявки время колбека сделки ----------------- По этим данным Вы увидите что тормозит. ----------------- Относительно тормоза при проигрывании музыки Специально для вас выкладывал исходник с асинхронным проигрыванием. Чтобы не ждать, надо в нем установить второй параметр 0.
написал: Если вы на открытии сделки совершаете, то помимо непосредственно ваших сделок ещё и большой поток информации в эти моменты приходит, поэтому Квик это тяжело переваривает.
Да, я видел, что причина торможения во время моих сделок в том, что иногда почему-то идёт большое число мелких сделок, напр., десятки сделок по 1 акции. Я так и не могу понять, зачем кто-то выставляет заявки по одной акции, как будто кто-то отлаживает свою программу или что-то тестирует. Если нет потока мелких сделок, то торможения нет.
По одной заявке выставляют HFT роботы, скальперы и ММ.
написал: Предполагаю, что Сергей описывал ситуацию зависания при приходе его личных сделок ("когда идёт много моих сделок, я ясно вижу торможение") , хотя конкретики мало дал. Отключать алгоритм Нейгла ему смысла нет. Его никто не отключает и у всех всё работает, значит, не в нём дело.
Точно, я даже предположил, что особенно на задержку влияют звуковые сигналы. Какая нужна конкретика? Где-то до октября 2023 я и в утреннюю и в вечернюю сессии удачно выставлял заявки с пом. скрипта, иногда даже видел по содержимому стаканов в файле, что я в очереди первый. Первым быть не всегда хорошо, потому что во время премаркета бывает в сумме крупная встречная заявка, за это снимают деньги. Но потом перестало получаться попадать в начало очереди на вечерней сессии (а утром по-прежнему всё ОК). Такое впечатление, что мосбиржа вечером варьирует время начала приёма заявок в пределах 2 секунд. То ли вечером возникли какие-то задержки (в том числе с получением ответов от сервера на заявки). Поэтому я и решил попробовать вечером отключить алгоритм Нейгла, но от этого получился полный затык в работе Квика.
Попробуйте вывести в лог файл время прихода колбеков OnTransReply и OnOrder и сравните с временем регистрации сделки из таблицы сделок. Если выложите эти времена, то можно будет что-то конкретное сказать.