Какие варианты? Например, хранить данные портфеля в файле и не начинать торговлю, пока данные в квике не совпадут с нашими?
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
Пользователь
Сообщений: Регистрация: 02.01.2026
22.01.2026 11:11:38
Цитата
Nikolay написал: брокер может разорвать соединение, вызвать OnClenUp
OnConnected может быть вызван и без разрыва соединения. И это штатная ситуация.
Цитата
OnConnected
Функция вызывается терминалом QUIK при установлении связи с сервером QUIK и получении терминалом описания хотя бы одного класса. Если в течение торгового дня терминал получает новый класс, то функция вызывается еще раз, при этом параметр вызова flag принимает значение «false».
Но, если брокер разорвал соединение и перезапустил шлюзы с очисткой данных, то OnConnected будет вызван с флагом true. Получается в скрипте нужно хранить информацию об обработанных заявках/сделках, как минимум, до смены торговой даты.
После обновления на версию 12.8.3.4 появился глюк в таблице "купить-продать", Глюк с фильром инструментов в таблице
Пользователь
Сообщений: Регистрация: 02.01.2026
19.01.2026 12:09:28
Как тут скрины вставлять - не понял. Ivan Smirnov, нажмите "Цитировать" на моём сообщении. Там скрин с настройкой.
После обновления на версию 12.8.3.4 появился глюк в таблице "купить-продать", Глюк с фильром инструментов в таблице
Пользователь
Сообщений: Регистрация: 02.01.2026
19.01.2026 12:07:26
Ivan Smirnov, [img]data:image/png;base64,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[/img]
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
Не обратил внимание на данный нюанс. У меня скрипт очищает таблицы при получении OnClenUp. Надо будет внести правки в скрипт.
Рыночная заявка для торговли фьючерсами
Пользователь
Сообщений: Регистрация: 02.01.2026
15.01.2026 22:22:06
Цитата
Ziveleos написал: MARKET_STOP_LIMIT = "YES" и позиция закроется по рынку.
В отсутствии встречных заявок рыночная заявка будет отклонена, лимитная - встанет в стакан в очередь. Если выставлять стоп-заявку с ценой исполнения на уровне верхней/нижней планки, то тоже есть нюанс: уровни планок постоянно меняются. Сегодня вы поставили стоп с одной ценой, а завтра при срабатывании стопа планка будет другой, и заявка может оказаться за пределами планок, и будет отклонена.
Нули в индикаторе там, где должны быть пустые интервалы
Пользователь
Сообщений: Регистрация: 02.01.2026
14.01.2026 12:32:33
Такая же история, если в настройках диаграммы поставить галку "Показывать пустые интервалы". Стандартный индикатор экспортируется нормально, а самописный (код ) - с нулями там, где ничего не должно быть.
Драг энд Дроп в стакане не работает
Пользователь
Сообщений: Регистрация: 02.01.2026
12.01.2026 21:51:38
Сделать опциональный параметр, чтобы пользователь мог сам выбрать один из: 1) передвигать первую заявку; 2) передвигать последнюю заявку; 3) объединять все заявки в одну.
Cкорость обмена данными через файлы
Пользователь
Сообщений: Регистрация: 02.01.2026
11.01.2026 14:46:31
nikolz, так что, не знаете как в QLua синхронизировать запись из разных скриптов в один файл?
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
Один из программистов этого робота по секрету поделился, что они не успели протестировать алгоритм, но начальник приказал его запускать в бой. Сказано - сделано.
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
Пользователь
Сообщений: Регистрация: 02.01.2026
10.01.2026 18:24:15
Цитата
VPM написал: мой алгоритм оставленный мной без присмотра, поймал какую то ошибку (уже и не припомню причину) наделал столько заявок, что брокер заблокировал канал, а затем выставил штраф.
Я думаю, тут надо какую-то защиту "от дурака" реализовывать: типа, при превышении заданного порога количества ошибочных транзакций подряд, останавливать скрипт до выяснения причин.
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
Пользователь
Сообщений: Регистрация: 02.01.2026
10.01.2026 17:51:45
Цитата
Nikolay написал: А во время простоя исполнились ордера, то колбеки пропущены
Ещё раз:
Цитата
Йцукен написал: При запуске скрипта обработка таблиц происходит в OnInit.
Цитата
Nikolay написал: Если только при запуске Вы сами не проверите что изменилось в таблицах с прошлого запуска.
Скрипт сохраняет, допустим, номер своей активной заявки или id транзакции в файл. И при запуске он в состоянии проверить результат транзакции/заявки, пробежав однократно по соответствующим таблицам.
Цитата
Nikolay написал: брокер может разорвать соединение, вызвать OnClenUp и тогда приедут ВСЕ колбеки с начала сессии
Да и пофиг: скрипт запомнил, какие заявки/сделки (в т.ч. и те, что были в таблицах при запуске скрипта) он обработал и дубли проигнорирует.
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
Пользователь
Сообщений: Регистрация: 02.01.2026
10.01.2026 17:17:44
Цитата
TGB написал: Обработка перезапусков скрипта по любой неконтролируемой вами причине у вас не предусмотрена? Пока он перезапускается заявки на бирже могут быть выполнены, а коллбеки пропущены.
При запуске скрипта обработка таблиц происходит в OnInit. Соответственно, все новые колбеки будут получены и обработаны после выхода из OnInit.
Цитата
TGB написал: Вы предполагаете что и коллбеки в работающем скрипте не теряются?
Если колбеки потеряются, то и данные в таблицах квика не будут заполняться.
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
Пользователь
Сообщений: Регистрация: 02.01.2026
10.01.2026 13:55:24
Цитата
TGB написал: можно проверять циклически, по изменению их размеров, нужные вам таблицы QUIK (таблицы заявок, стоп-заявок, сделок и т.д.)?
Думаю такой подход сложнее, чем обработка колбеков. На примере данной ситуации: если пришедший колбек не содержит значения нужных мне параметров, то я его пропускаю и жду колбек, который их содержит. В случае же обработки таблиц вместо колбеков, нужно хранить не просто индекс последней обработанной строки таблицы, а индексы всех обработанных строк либо общее количество строк и индексы необработанных строк (пропущенных по причине отсутствия в них значений нужных параметров). И циклически проверять, не появились ли новые значения в пропущенных строках.
получение параметров индикатора, обращение к line
Пользователь
Сообщений: Регистрация: 02.01.2026
08.01.2026 20:25:46
При добавлении индикатора из контекстного меню "Добавить график (индикатор)..." Init OnCalculate OnCalculate
При изменении таймфрейма: OnCalculate
При изменении инструмента в режиме связанных окон: Init OnChangeSettings OnCalculate
получение параметров индикатора, обращение к line
Пользователь
Сообщений: Регистрация: 02.01.2026
08.01.2026 17:55:36
Цитата
Старатель написал: индикатор рассчитывается три раза (!), причём первый расчёт идёт со старым значением, но уже после нажатия на кнопку OK.
Сохраню для будущих поколений В общем случае при добавлении индикатора через меню "Редактирование настроек графика" происходит вызов функций в таком порядке: Init OnCalculate - с дефолтными значениями, заданными в скрипте OnChangeSettings - тут скрипт читает значения, заданные пользователем вручную в диалоговом окне OnCalculate OnCalculate
При запуске QUIK на один OnCalculate меньше: Init OnChangeSettings OnCalculate OnCalculate
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
Пользователь
Сообщений: Регистрация: 02.01.2026
07.01.2026 09:35:34
Цитата
nikolz написал: Поправьте так и ничего не повесится
А слона-то вы и не заметили. Я специально модифицировал скрипт, чтобы показать, какие инструкции выполняются под блокировкой (в используемой версии Lua).
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
Пользователь
Сообщений: Регистрация: 02.01.2026
06.01.2026 23:46:33
Цитата
User12501 написал: Являются ли эти три поля синхронными всегда? (Т.е. либо все три равны 0, либо все три не равны 0?)
Нет
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
Пользователь
Сообщений: Регистрация: 02.01.2026
06.01.2026 23:45:30
Цитата
User12501 написал: Гарантируется ли, что вызов OnTrade, в котором эти поля нулевые, является не последним
Нет. trans_id и uid в некоторых ситуациях могут иметь и нулевые значения.
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
Атомарность операций может обеспечиваться аппаратно (аппаратурой) и программно (программным кодом). В первом случае используются особые машинные инструкции, атомарность выполнения которых гарантируется аппаратурой. Во втором случае используются специальные программные средства синхронизации, с помощью которых осуществляется блокировка разделяемого ресурса; после блокировки выполняется операция, которую требуется выполнить атомарно. Блокировка представляет собой атомарную операцию, которая либо предоставляет ресурс в пользование потоку, либо сообщает потоку о том, что ресурс уже используется другим потоком или процессом (занят).
Теперь если ваш код модифицировать следующим образом:
Код
local x, y
function main()
while true do
y = 99
x = 199
x, y = y, x
if x ~= 99 or y ~= 199 then
s = tostring(x)..","..tostring(y).."\n"
end
end
end
и запустить, то QUIK повесится (версия Lua: 5.4.1).
Если же конкатенацию строк с си-функцией tostring вынести за пределы блока if
Код
local x, y
function main()
while true do
y = 99
x = 199
x, y = y, x
if x ~= 99 or y ~= 199 then end
s = tostring(x)..","..tostring(y).."\n"
end
end
то QUIK, хоть и загрузит одно ядро на 100%, но остаётся доступным и позволяет остановить скрипт. Что, как бы, намекает, что инструкции
Код
y = 99
x = 199
x, y = y, x
if x ~= 99 or y ~= 199 then
выполняются под блокировкой. А вот преобразование числа в строку - нет. Отсюда и ответ на 2-й : вы не сможете таким образом гарантированно вывести в файл значения переменных x и y, которые были в момент проверки их оператором if, поскольку другой поток может подменить их значения в этот момент.
Если писать из main разных скриптов, то часть данных теряется
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
Пользователь
Сообщений: Регистрация: 02.01.2026
06.01.2026 15:19:37
Цитата
nikolz написал: x,y=y,x; if x~=99 or y~=199 then Log:write(tostring(x)..","..tostring(y).."\n")
Даже если вы поймаете тут ошибку, то подумайте вот о чём: 1) Может ли другой поток поменять значения переменных перед if ? Будет ли это означать отсутсвие атомарности в операторе присваивания? 2) Может ли другой поток поменять значения переменных перед выводом их в файл, т.е. гарантированно ли вы получите те значения, которые проверяли в if ?
Скрытый текст
Ответ на 2-й вопрос - Нет.
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
Пользователь
Сообщений: Регистрация: 02.01.2026
06.01.2026 15:10:18
Цитата
Йцукен написал: В моём тесте неатомарность проявится, если значение любой из переменных (a1, a2, a3, a4, a5, a6, a7, a8, a9) в любой момент времени будет отличным от остальных. Это будет означать, что поток main стал читать значения переменных в то время, когда в другом потоке произошла запись значений только части из них.
Другими словами, если мы попадём внутрь блока
Код
if a1 ~= a2 or a1 ~= a3 or a1 ~= a4 or a1 ~= a5 or a1 ~= a6 or a1 ~= a7 or a1 ~= a8 or a1 ~= a9 or a1 == nil then
error("error")
end
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
Пользователь
Сообщений: Регистрация: 02.01.2026
06.01.2026 15:08:05
Цитата
nikolz написал: Вы, очевидно, ждете системные ошибки, типа ошибок обращения к памяти. Верно?
Не верно. В моём тесте неатомарность проявится, если значение любой из переменных (a1, a2, a3, a4, a5, a6, a7, a8, a9) в любой момент времени будет отличным от остальных. Это будет означать, что поток main стал читать значения переменных в то время, когда в другом потоке произошла запись значений только части из них.
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
Пользователь
Сообщений: Регистрация: 02.01.2026
06.01.2026 09:14:37
Похоже, операция множественного присвоения выполняется атомарно. Вот такой код работает без ошибок:
Скрытый текст
Код
local run = true
local a1, a2, a3, a4, a5, a6, a7, a8, a9 = 0, 0, 0, 0, 0, 0, 0, 0, 0
local n = 100
function OnAllTrade()
for i = 1, n do
a1, a2, a3, a4, a5, a6, a7, a8, a9 = i, i, i, i, i, i, i, i, i
end
end
function OnParam()
for i = 1, n do
a1, a2, a3, a4, a5, a6, a7, a8, a9 = i, i, i, i, i, i, i, i, i
end
end
function main()
while run do
sleep(1)
local t = prec_time()
for i = 1, n do
if a1 ~= a2 or a1 ~= a3 or a1 ~= a4 or a1 ~= a5 or a1 ~= a6 or a1 ~= a7 or a1 ~= a8 or a1 ~= a9 or a1 == nil then
error("error")
end
end
end
end
function OnStop()
run = nil
end
Cкорость обмена данными через файлы
Пользователь
Сообщений: Регистрация: 02.01.2026
06.01.2026 09:12:04
Цитата
nikolz написал: Но если это разные потоки или приложения, то надо синхронизировать
Как в QLua синхронизировать запись из разных скриптов в один файл?
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
Пользователь
Сообщений: Регистрация: 02.01.2026
05.01.2026 09:52:58
Цитата
nikolz написал: При множественном присваивании Lua сначала вычисляет все значения, а затем выполняет присваивание.
А если все значения уже вычислены, как в примерах выше?
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
Пользователь
Сообщений: Регистрация: 02.01.2026
04.01.2026 21:53:08
Является ли атомарной операция присвоения одновременно нескольким переменным?
Код
a, b = 1, 2
или
Код
x, y = y, x
Нули в индикаторе там, где должны быть пустые интервалы
Пользователь
Сообщений: Регистрация: 02.01.2026
03.01.2026 13:55:31
Вот код тестового индикатора:
Код
Settings = {
Name = "Test",
line = {{ Name = "Test" }}
}
function Init()
return 1
end
function OnCalculate(index)
if true == CandleExist(index) then
return C(index)
end
--return nil
end
Если его добавить на диаграмму с несколькими графиками и сделать экспорт в текстовый файл, то на тех свечах, где индикатор не рассчитывался будут нули.
Нули в индикаторе там, где должны быть пустые интервалы
Пользователь
Сообщений: Регистрация: 02.01.2026
02.01.2026 23:50:08
Пишу индикатор. При отсутсвии свечки OnCalculate не рассчитывает значение (когда на одну диаграмму добавляется несколько графиков). Но если сохранить индикатор в текстовый файл (ПКМ - Сохранить данные в файл), то на месте нерассчитанных значений будут нули. На примере Moving Average: