Йцукен (Все сообщения пользователя)

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

Страницы: 1
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
 
Цитата
Nikolay написал:
дождаться их загрузки
Какие варианты?
Например, хранить данные портфеля в файле и не начинать торговлю, пока данные в квике не совпадут с нашими?
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
 
Цитата
Nikolay написал:
брокер может разорвать соединение, вызвать OnClenUp

OnConnected может быть вызван и без разрыва соединения. И это штатная ситуация.
Цитата
OnConnected

Функция вызывается терминалом QUIK при установлении связи с сервером QUIK и получении терминалом описания хотя бы одного класса. Если в течение торгового дня терминал получает новый класс, то функция вызывается еще раз, при этом параметр вызова flag принимает значение «false».

Но, если брокер разорвал соединение и перезапустил шлюзы с очисткой данных, то OnConnected будет вызван с флагом true.
Получается в скрипте нужно хранить информацию об обработанных заявках/сделках, как минимум, до смены торговой даты.
После обновления на версию 12.8.3.4 появился глюк в таблице "купить-продать", Глюк с фильром инструментов в таблице
 
Как тут скрины вставлять - не понял.
Ivan Smirnov, нажмите "Цитировать" на моём сообщении. Там скрин с настройкой.
После обновления на версию 12.8.3.4 появился глюк в таблице "купить-продать", Глюк с фильром инструментов в таблице
 
Ivan Smirnov,
[img]data:image/png;base64,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[/img]
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
 
Цитата
Nikolay написал:
вызвать OnClenUp
Не обратил внимание на данный нюанс. У меня скрипт очищает таблицы при получении OnClenUp.
Надо будет внести правки в скрипт.
Рыночная заявка для торговли фьючерсами
 
Цитата
Ziveleos написал:
MARKET_STOP_LIMIT = "YES" и позиция закроется по рынку.
В отсутствии встречных заявок рыночная заявка будет отклонена, лимитная - встанет в стакан в очередь.
Если выставлять стоп-заявку с ценой исполнения на уровне верхней/нижней планки, то тоже есть нюанс: уровни планок постоянно меняются. Сегодня вы поставили стоп с одной ценой, а завтра при срабатывании стопа планка будет другой, и заявка может оказаться за пределами планок, и будет отклонена.
Нули в индикаторе там, где должны быть пустые интервалы
 
Такая же история, если в настройках диаграммы поставить галку "Показывать пустые интервалы".
Стандартный индикатор экспортируется нормально, а самописный (код выше) - с нулями там, где ничего не должно быть.
Драг энд Дроп в стакане не работает
 
Сделать опциональный параметр, чтобы пользователь мог сам выбрать один из:
1) передвигать первую заявку;
2) передвигать последнюю заявку;
3) объединять все заявки в одну.
Cкорость обмена данными через файлы
 
nikolz, так что, не знаете как в QLua синхронизировать запись из разных скриптов в один файл?
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
 
Цитата
nikolz написал:
А как Вам это
Бывает.
Сбой в работе алгоритмической системы одного из участников торгов фьючерсами на доллар/рубль на бирже ММВБ-РТС мог принести владельцу максимальный убыток в $4,3 миллиона.
Один из программистов этого робота по секрету поделился, что они не успели протестировать алгоритм, но начальник приказал его запускать в бой. Сказано - сделано.
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
 
Цитата
VPM написал:
мой алгоритм оставленный мной без присмотра, поймал какую то  ошибку (уже и не припомню причину) наделал столько заявок, что брокер заблокировал канал, а затем выставил штраф.
Я думаю, тут надо какую-то защиту "от дурака" реализовывать: типа, при превышении заданного порога количества ошибочных транзакций подряд, останавливать скрипт до выяснения причин.
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
 
Цитата
Nikolay написал:
А во время простоя исполнились ордера, то колбеки пропущены
Ещё раз:
Цитата
Йцукен написал:
При запуске скрипта обработка таблиц происходит в OnInit.

Цитата
Nikolay написал:
Если только при запуске Вы сами не проверите что изменилось в таблицах с прошлого запуска.
Скрипт сохраняет, допустим, номер своей активной заявки или id транзакции в файл. И при запуске он в состоянии проверить результат транзакции/заявки, пробежав однократно по соответствующим таблицам.

Цитата
Nikolay написал:
брокер может разорвать соединение, вызвать OnClenUp и тогда приедут ВСЕ колбеки с начала сессии
Да и пофиг: скрипт запомнил, какие заявки/сделки (в т.ч. и те, что были в таблицах при запуске скрипта) он обработал и дубли проигнорирует.
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
 
Цитата
TGB написал:
Обработка перезапусков скрипта по любой неконтролируемой вами причине у вас не предусмотрена? Пока он перезапускается заявки на бирже могут быть выполнены, а коллбеки пропущены.
При запуске скрипта обработка таблиц происходит в OnInit. Соответственно, все новые колбеки будут получены и обработаны после выхода из OnInit.

Цитата
TGB написал:
Вы предполагаете что и коллбеки в работающем скрипте не теряются?
Если колбеки потеряются, то и данные в таблицах квика не будут заполняться.
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
 
Цитата
TGB написал:
можно проверять циклически, по изменению их размеров, нужные вам таблицы QUIK (таблицы заявок, стоп-заявок, сделок и т.д.)?
Думаю такой подход сложнее, чем обработка колбеков.
На примере данной ситуации: если пришедший колбек не содержит значения нужных мне параметров, то я его пропускаю и жду колбек, который их содержит.
В случае же обработки таблиц вместо колбеков, нужно хранить не просто индекс последней обработанной строки таблицы, а индексы всех обработанных строк либо общее количество строк и индексы необработанных строк (пропущенных по причине отсутствия в них значений нужных параметров). И циклически проверять, не появились ли новые значения в пропущенных строках.
получение параметров индикатора, обращение к line
 
При добавлении индикатора из контекстного меню "Добавить график (индикатор)..."
Init
OnCalculate
OnCalculate


При изменении таймфрейма:
OnCalculate

При изменении инструмента в режиме связанных окон:
Init
OnChangeSettings
OnCalculate
получение параметров индикатора, обращение к line
 
Цитата
Старатель написал:
индикатор рассчитывается три раза (!), причём первый расчёт идёт со старым значением, но уже после нажатия на кнопку OK.

Сохраню для будущих поколений  :smile:
В общем случае при добавлении индикатора через меню "Редактирование настроек графика" происходит вызов функций в таком порядке:
Init
OnCalculate - с дефолтными значениями, заданными в скрипте
OnChangeSettings - тут скрипт читает значения, заданные пользователем вручную в диалоговом окне
OnCalculate
OnCalculate

При запуске QUIK на один OnCalculate меньше:
Init
OnChangeSettings
OnCalculate
OnCalculate
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
 
Цитата
nikolz написал:
Поправьте так и ничего не повесится
А слона-то вы и не заметили. Я специально модифицировал скрипт, чтобы показать, какие инструкции выполняются под блокировкой (в используемой версии Lua).
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
 
Цитата
User12501 написал:
Являются ли эти три поля синхронными всегда? (Т.е. либо все три равны 0, либо все три не равны 0?)
Нет
Извечный вопрос: повторные вызовы OnTrade, Даже при заявке на одну акцию
 
Цитата
User12501 написал:
Гарантируется ли, что вызов OnTrade, в котором эти поля нулевые, является не последним
Нет.
trans_id и uid в некоторых ситуациях могут иметь и нулевые значения.
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
 
nikolz, вы же сами дали ссылку на статью:
Цитата
Атомарность операций может обеспечиваться аппаратно (аппаратурой) и программно (программным кодом). В первом случае используются особые машинные инструкции, атомарность выполнения которых гарантируется аппаратурой. Во втором случае используются специальные программные средства синхронизации, с помощью которых осуществляется блокировка разделяемого ресурса; после блокировки выполняется операция, которую требуется выполнить атомарно. Блокировка представляет собой атомарную операцию, которая либо предоставляет ресурс в пользование потоку, либо сообщает потоку о том, что ресурс уже используется другим потоком или процессом (занят).

Теперь если ваш код модифицировать следующим образом:
Код
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, поскольку другой поток может подменить их значения в этот момент.
Cкорость обмена данными через файлы
 
Цитата
nikolz написал:
Что получается?
Если писать из main разных скриптов, то часть данных теряется
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
 
Цитата
nikolz написал:
x,y=y,x;
       if x~=99 or y~=199 then
           Log:write(tostring(x)..","..tostring(y).."\n")
Даже если вы поймаете тут ошибку, то подумайте вот о чём:
1) Может ли другой поток поменять значения переменных перед if ? Будет ли это означать отсутсвие атомарности в операторе присваивания?
2) Может ли другой поток поменять значения переменных перед выводом их в файл, т.е. гарантированно ли вы получите те значения, которые проверяли в if ?

Скрытый текст
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
 
Цитата
Йцукен написал:
В моём тесте неатомарность проявится, если значение любой из переменных (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
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
 
Цитата
nikolz написал:
Вы, очевидно, ждете системные ошибки, типа ошибок обращения к памяти. Верно?
Не верно. В моём тесте неатомарность проявится, если значение любой из переменных (a1, a2, a3, a4, a5, a6, a7, a8, a9) в любой момент времени будет отличным от остальных. Это будет означать, что поток main стал читать значения переменных в то время, когда в другом потоке произошла запись значений только части из них.

Цитата
nikolz написал:
Вот вам тест:
И? Результаты, выводы?
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
 
Цитата
nikolz написал:
как вы проверили, что выполняется атомарно?  Где доказательство?
Вот: #11
Цитата
Йцукен написал:
такой код работает без ошибок

Можете опровергнуть?
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
 
Похоже, операция множественного присвоения выполняется атомарно.
Вот такой код работает без ошибок:
Скрытый текст
Cкорость обмена данными через файлы
 
Цитата
nikolz написал:
Но если это разные потоки или приложения, то надо синхронизировать
Как в QLua синхронизировать запись из разных скриптов в один файл?
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
 
Цитата
nikolz написал:
При множественном присваивании Lua сначала вычисляет все значения, а затем выполняет присваивание.
А если все значения уже вычислены, как в примерах выше?
Вопрос о целостности данных при работе с таблицей из разных вычислительных потоков
 
Является ли атомарной операция присвоения одновременно нескольким переменным?
Код
a, b = 1, 2
или
Код
x, y = y, x
Нули в индикаторе там, где должны быть пустые интервалы
 
Вот код тестового индикатора:
Код
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
Если его добавить на диаграмму с несколькими графиками и сделать экспорт в текстовый файл, то на тех свечах, где индикатор не рассчитывался будут нули.
Нули в индикаторе там, где должны быть пустые интервалы
 
Пишу индикатор. При отсутсвии свечки OnCalculate не рассчитывает значение (когда на одну диаграмму добавляется несколько графиков).
Но если сохранить индикатор в текстовый файл (ПКМ - Сохранить данные в файл), то на месте нерассчитанных значений будут нули.
На примере Moving Average:
Цитата
CHU2 [SPBFUT],1,20251130,175500,94927.555556
CHU2 [SPBFUT],1,20251130,175900,95014.000000
CHU2 [SPBFUT],1,20251130,180100,95059.111111
CHU2 [SPBFUT],1,20251130,180400,0.000000
CHU2 [SPBFUT],1,20251130,180900,0.000000
CHU2 [SPBFUT],1,20251130,181200,0.000000
CHU2 [SPBFUT],1,20251130,181300,0.000000
CHU2 [SPBFUT],1,20251130,181700,0.000000
CHU2 [SPBFUT],1,20251130,182100,95076.111111
При этом, если сохранить стандартный квиковский индикатор с тогой же диаграммы, то он будет без нулей:
Цитата
CHU2 [SPBFUT],1,20251130,175500,94927.555556
CHU2 [SPBFUT],1,20251130,175900,95014.000000
CHU2 [SPBFUT],1,20251130,180100,95059.111111
CHU2 [SPBFUT],1,20251130,182100,95076.111111
Вопрос: как в самописном индикаторе сделать так же?

Пробовал возвращать и nil и ничего не возвращать в OnCalculate
Код
function OnCalculate(index)
  ...
  if v ~= nil then return v
  else return nil end
end
Код
function OnCalculate(index)
  ...
  if v ~= nil then return v end
end
Результат одинаковый.
Страницы: 1
Наверх