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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 След.
Quik 8.6 Critical error ACCESS_VIOLATION
 
Пока не теряю надежду, что разработчики ответят на поставленные выше вопросы.
Quik 8.6 Critical error ACCESS_VIOLATION
 
А теперь хотелось бы увидеть ответ от разработчиков терминала, что они по этому поводу думают.

1) Считается ли проблемой ACCESS_VIOLATION, упомянутый выше?

2) Как пользователям корректно сделать цикл по всем имеющимся данным внутри DataSource, чтобы не нарваться в процессе итерирования на изменение данных из-за поступившей новой рыночной информации или очистки объекта DataSource?
Quik 8.6 Critical error ACCESS_VIOLATION
 
Я во всех своих скриптах при доступе к datasource-объектам внутри main применяю примерно такие фрагменты кода, чтобы во время доступа к datasource его содержимое внезапно не изменилось:
Код
local function getRawCandles(ds, maxSize)
    local size = 0
    local T, O, H, L, C, V = {}, {}, {}, {}, {}, {}

    if ds and ds:Size() > 0 then
        table.ssort({ 0, 1 }, function(a, b)
            local dsSize = ds:Size()
            if maxSize == nil then
                maxSize = dsSize
            end
            local count, offset
            if dsSize <= maxSize then
                count, offset = dsSize, 0
            else
                count, offset = maxSize, dsSize - maxSize
            end
            for i = 1, count do
                local j = i + offset
                T[i] = ds:T(j)
                O[i] = ds:O(j)
                H[i] = ds:H(j)
                L[i] = ds:L(j)
                C[i] = ds:C(j)
                V[i] = ds:V(j)
            end
            size = count
            return true
        end)
    end
    return { size = size, T = T, O = O, H = H, L = L, C = C, V = V, }
end
Недостатком является блокировка потока коллбэков, что плохо в случае большого количества скриптов и одновременных запросов данных из datasource.

Но что делать, если такая архитектура терминала?
Quik 8.6 Critical error ACCESS_VIOLATION
 
Какой бы из вариантов не использовался, если запуск скрипта ведёт к падению терминала -- это хороший способ указать его разработчикам, где ошибка. Неоптимальные скрипты в этом смысле хороши, что напрягают систему и выявляют ошибки гораздо быстрее. Терминал же всегда должен без ACCESS_VIOLATION работать при синтаксически корректном коде скрипта.
Отладка QUIK 8.6
 
Цитата
Юрий написал:
Данная версия квика также была благополучно уронена... Дамп отправил.
Спасибо. Будем надеяться, что со всеобщей обратной связью от пользователей разработчики доведут терминал до нормального состояния.

Я у себя запустил один из боевых терминалов на версии 8.6.0. Там более 10 торговых скриптов работает одновременно. Посмотрим, что будет.
Отладка QUIK 8.6
 
В письме написали, что исправили (п.7). Поставил эту версию, посмотрим, что будет.
Отладка QUIK 8.6
 
Исправленные недоработки
1. В таблице «Текущие торги» не работал функционал «быстрых фильтров» по параметру «Размер лота».
2. В некоторых случаях при загрузке QPile-портфеля Рабочее место QUIK аварийно завершало работу.
3. Ошибка закрытия QLUA-портфеля при синтаксических ошибках в скрипте.
4. Аварийное завершение работы Рабочего места QUIK при переносе пользовательских индикаторов между диаграммами с помощью функции drag-anddrop.
5. Удаление QLUA-портфеля из таблицы «Доступные скрипты» приводило к некорректному сдвигу остальных скриптов.
6. Некорректный расчет объема заявки на закрытие фьючерсной позиции при использовании схемы кредитования «МД+».
7. Некорректная обработка в QLUA сбоев, возникавших при вызове функций callback из пользовательских библиотек.
8. Не выставлялись заявки на досрочную экспирацию опциона.
Отладка QUIK 8.6
 
Налетай, новая версия для отладки
ftp://ftp.quik.ru/public/updates/8.6/quik_8.6.0_upd.zip
Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?
 
В крайнем случае, можно сделать справочник классов как таблицу, где ключ -- код инструмента, значение -- код класса. Будет такой справочник, скорее всего, один, заполнить его несложно и потом везде применять.
Как определить Код класса (CLASSCODE) по коду инструмента (SECCODE)?
 
Цитата
Anton написал:
Цитата
swerg написал:
задать свой порядок приоритета для поиска класса среди общего списка
Если мы заранее знаем список классов, ничего искать вообще не надо, надо сразу захардкодить бумагу вместе с нужным классом.
Полностью согласен. Пишите, например,
Код
{ classCode = "TQBR", secCode= "SBER", }
или храните в одной строке типа "TQBR:SBER" и выделяйте подстроки при необходимости получить отдельно classCode и secCode.
как решить проблему в новом квике 8.5, когда tostring (целое число) выдает дробь?
 
Вот ещё неплохой вариант, когда целое число будет без .0, а дробное останется как было.
Код
tostring(math.tointeger(x) or x)
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
МосБиржа перенесла релиз на 06 июля 2020 года. Наверное, что-то дорабатывают, а у разработчиков терминала и его пользователей ещё один месяц на устранение багов появился. Но расслабляться не надо.

https://www.moex.com/n28475
QTABLE_INT_TYPE QTABLE_INT64_TYPE
 
Получается, что trade_num и order_num из 19 знаков уже не влезут?
Отладка QUIK 8.5
 
Цитата
Павел Bosco написал:
Цитата
_sk_ написал:
У меня 8.5.2 упал с дампом. Послал его разработчикам для анализа. Не всё пока хорошо.
у вас была возможность потестировать срабатываение колбэков на заявки? визуально если вручную заявки ставить, ответы довольно медленно приходят
ну и вообще как-то кажется что иной раз терминал замирает, "чаще обычного"
На СПБирже на малых объёмах нормально колбэки отрабатывают. Подтормаживания, кажется, есть, но уверенности на 100% нет. В боевую эксплуатацию, когда много заявок по нескольким счетам боюсь пока ставить.
Отладка QUIK 8.5
 
У меня 8.5.2 упал с дампом. Послал его разработчикам для анализа. Не всё пока хорошо.
Удаления всех комментариев из скрипта.lua
 
Anton, Вы меня поражаете своей компетентностью в различных областях в хорошем смысле этого слова! Спасибо за разнообразную помощь и доброжелательное отношение!
Отладка QUIK 8.5
 
Спасибо за обратную связь! Похоже, что если перезагружать терминал раз в неделю, то этого уже хватит для эксплуатации с малыми рисками.
Отладка QUIK 8.5
 
Цитата
Юрий написал:
8.5.2 стоит запущен со дня выпуска, работают скрипты, не падал ни разу в отличие от 8.5.1, я его специально не перезапускал.
Хорошая новость. Спасибо за обратную связь!


Я сам пока тестирую в торговле на небольших объёмах, чтобы не было мучительно больно, если что-то пойдёт не так.
Отладка QUIK 8.5
 
Вопрос к пользователям. Встречался ли кто-нибудь с падением терминала версии 8.5.2 без дампа? Если да, отпишитесь здесь с подробностями (что делали, сколько дней до этого проработал терминал и т.п.).
Отладка QUIK 8.5
 
Подтверждаю, есть такая неприятность. Удаляем скрипт из середины списка, получаем некорректный сдвиг отображения оставшихся скриптов вверх. Если окно скриптов закрыть и открыть заново, список, вроде бы, актуальным становится. Чинить всё равно надо.
Отладка QUIK 8.5
 
Тестирую терминал 8.5.2.11 с начала торгов 07.05.2020. Пока работает штатно. Кажется, что памяти под каждый отдельный скрипт стало больше выделяться, чем раньше, но программа справляется. Судя по логам, расхождений в арифметике не появилось. Выставление и снятие заявок пока не проверял.

Отдельное спасибо разработчикам за столбец, показывающий выделенную память под каждый lua-скрипт.

 
Отладка QUIK 8.5
 
Исправленные недоработки
1. Исправлена некорректная конфигурация lua53.dll.
2. Исправлена ошибка загрузки lua53.dll в сторонние приложения.
3. Не работала функция lua_call.
4. Исправлена синхронизационная ошибка, которая приводила к аварийному завершению работы программы при выполнении lua-скрипта.
5. В некоторых случаях пропадал пункт «<Не указан>» в быстрых фильтрах таблицы OMS-заявок.
6. Неверное количество знаков в поле «Дисконт» диалога «Ввод адресной заявки РЕПО с ЦК маклером».
7. В некоторых случаях в Таблице котировок опция «Лучшие котировки видны всегда» работала некорректно.
8. В некоторых случаях при использовании функции QLUA SetUpdateCallback увеличивалось потребление оперативной памяти.
9. В некоторых случаях при наличии позиции только в иностранной валюте в форме ввода заявок не рассчитывалось максимально возможное количество.
10. В некоторых случаях была недоступна принудительная отправка «Margin Call».
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Новая версия для тестирования: ftp://ftp.quik.ru/public/updates/8.5/quik_8.5.2_upd.zip
Отладка QUIK 8.5
 
Новая версия для тестирования: ftp://ftp.quik.ru/public/updates/8.5/quik_8.5.2_upd.zip
Отладка QUIK 8.5
 
Просьба 3. Поскольку новый релиз терминала для отладки не выходит уже 2 недели, вероятность получения рабочего QLua в обозримом будущем всё меньше, пусть ARQA попросит МосБиржу перенести релиз на срочном рынке с 8 июня 2020 года на более поздний срок.
Quik 8.5.1.18 вылетает без видимых причин.
 
Аналогичная ситуация. Ждём следующий релиз.
Экспирация CLK0
 
Скорее всего, в терминале ошибок не было, просто недосмотр биржи.
Экспирация CLK0
 
После клиринга нормально стало и без перезаказа данных. Проверьте, что транслировала биржа до клиринга.
Баг с выводом времени в таблицу QLua
 
Код
t = string.format("%02d:%02d", alltrade.datetime.hour, alltrade.datetime.min)
Опечатка была.
Баг с выводом времени в таблицу QLua
 
Цитата
Дмитрий написал:
Код
  t  =  tostring(alltrade.datetime.hour) .. ":" .. tostring(alltrade.datetime.min);

 SetCell (t_id, Rows,  0 , t);  
Вместо 10:00 выводит 10:0. Как-то можно это исправить?
Пишите
Код
t = string.format("%02d:%02d", alltrade.datetime.hour, alltrade.datetime.hour)
Экспирация CLK0
 
В терминале в таблице текущий параметров по инструменту CLK0 вижу дату экспирации 30.04.2020, но до погашения, якобы, осталось 20 дней. Это на бирже в одном месте поправили, а в другом — забыли, или терминал глючит?  
Отладка QUIK 8.5
 
Уважаемые разработчики!

Очень хорошо, что 17 апреля 2020 года вы выпустили версию терминала 8.5.1, а мы смогли её протестировать. Довольно быстро пользователи выявили несколько проблем, которые надо исправить.

У меня есть один вопрос и две просьбы.

Вопрос. Когда нам стоит ожидать следующую версию для тестирования?

Возможно, что ещё какие-то недоделки всплывут. Чем регулярнее релизы, тем оперативнее будет обратная связь. Мы все хотим иметь надёжный софт к сроку релиза на МосБирже.


Просьба 1 в том, чтобы файлы выкладываемого обновления позволяли обновиться сразу с версии 8.4, а не накатывать сначала 8.5.1 (нерабочий релиз с точки зрения QLua), а потом ещё какие-то файлы. Так нам всем будет удобнее.

Просьба 2 в том, чтобы от разработчиков появилось уведомление в этой ветке, чтобы как можно больше пользователей сразу включились в работу по тестированию.

Спасибо.
quik 8.5 + lua 5.3 = ошибка
 
Я делаю так, если price уже есть, и это значение (число или текст) уже кратно шагу цены.

Код
local scale = getSecurityInfo(classCode, secCode).scale
local price = string.format("%." .. scale .. "f", tonumber(price))
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Вроде как, можно начинать тестирование Lua 5.3 и поддержку 19-значных номеров заявок. Больше тестов и обратной связи -- больше шансов на безглючный переход.
ftp://ftp.quik.ru/public/updates/8.5/quik_8.5.1_upd.zip
Уведомление о необходимости обновления торговых терминалов в связи с изменениями на срочном рынке Московской биржи, Список проблем при работе устаревших версий QUIK после обновления торговой системы срочного рынка МБ
 
Вроде как, можно начинать тестирование версии терминала, где Lua 5.3 и поддерживаются 19-значные номера заявок.
ftp://ftp.quik.ru/public/updates/8.5/quik_8.5.1_upd.zip
Ограничение 50 транзакций в секунду
 
Вот пример реализации объекта.
Код
--
-- Подсчёт количества событий, произошедших за последние несколько секунд.
-- При регистрации очередного события в массив событий добавляется новый элемент с указанием текущего момента времени.
-- При подсчёте числа событий учитываются только те события, которые произошли не более чем указанное количество
-- секунд назад, а остальные события удаляются из массива.
--

local EventsCounter = {}

local function systime()
    local d = os.sysdate()
    local mcs = d.mcs or 0
    d.ms = nil
    d.mcs = nil
    return os.time(d) + mcs * 0.000001
end

--- Конструктор.
-- @param self объект
-- @param interval количество секунд, на протяжении которых отслеживаются события
local function new(self, interval)
    local object = {
        interval = interval,
        id = 0,
        events = {},
    }
    setmetatable(object, self)
    self.__index = self
    return object
end

EventsCounter.new = new

--- Зарегистрировать событие.
-- @param self объект
local function registerEvent(self)
    self.id = self.id + 1
    self.events[self.id] = systime()
end

EventsCounter.registerEvent = registerEvent

--- Узнать, сколько событий произошло за последние несколько секунд.
-- @param self объект
-- @return количество событий, произошедших за последние несколько секунд
local function getCount(self)
    local now = systime()
    local count = 0
    local remove = {}
    for id, time in pairs(self.events) do
        if now - time <= self.interval then
            count = count + 1
        else
            remove[id] = true
        end
    end
    for id, _ in pairs(remove) do
        self.events[id] = nil
    end
    return count
end

EventsCounter.getCount = getCount

return EventsCounter

Использовать примерно так:

Код
local EventsCounter = require("EventsCounter")

local eventsCounter = EventsCounter:new(1)

-- Перед отправкой транзакции проверяем количество событий и притормаживаем, если надо
while eventsCounter:getCount() > 40 do
    sleep(10)
end
-- Ваш код, который отсылает заявку
sendTransaction()
--
eventsCounter:registerEvent()
Недостатком является ожидание, пока предыдущие события уйдут в прошлое. А можно было бы что-то полезное делать. Но для такой реализации уже более сложный код надо писать.

Успехов!
Горячие клавиши
 
Цитата
Владимир Иванов написал:
Цитата
_sk_ написал:
Раз уж QPILE больше не развивается и его всё больше заменяет QLua, давайте перенесём комбинацию Ctrl+F11 с пункта меню "QPILE скрипты" на пункт меню "Lua скрипты". Полагаю, что пользователей, довольных этим нововведением, будет больше, чем недовольных, а реализация от разработчиков терминала практически не потребует усилий.
Добрый день,

     Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам,
     что реализация пожелания признана потенциально целесообразной.
     Если по результатам дальнейшего анализа, включающего юридические
     аспекты, анализ на непротиворечивость с общей политикой компании,
     никаких возражений не возникнет, мы постараемся включить Ваше
     пожелание в план доработок при выпуске одной из следующих версий
     нашего ПО.
Может, уже пора, т.к. QPILE уже всё на срочном рынке в ближайшей перспективе?
Удалить QPILE из терминала QUIK 8-й версии
 
Поскольку QPILE на срочном рынке при 19-значных номерах работать не будет и уже несколько лет не обновляется и не поддерживается, предлагаю удалить QPILE из терминала 8-й версии. Освободившиеся горячие клавиши отдать для более насущных нужд (например, для QLua).
getParamEx
 
Цитата
Sergey Gorokhov написал:
Цитата
Mikhail написал:
Здравствуйте! Не подскажете почему во время приостановке торгов фьючерсами например сегодня в 11.17.55 LKH0
ф-ии
getParamEx(class, name, "STATUS").param_value
getParamEx(class, name, "TRADINGSTATUS").param_value
возвращают 1? Кто ее ставит брокер или биржа?
Какая функция в итоге показывает приостановку торгов инструментом?

Статус транслирует биржа.
Если статус был некорректным, Вам следует обратиться к брокеру для проведения диагностики совместно со специалистами биржи.
По моему опыту, биржа не особенно следит за тем, что указано в статусе при приостановке торгов по инструменту.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Anton написал:
Цитата
Александр М написал:
2. Тип полей во всех текущих функциях, которые в качестве параметров требуют ввода номера заявки или сделки или возвращают номер заявки или сделки, НЕ поменяется.
По-моему, весь смысл перехода на 5.3 в том, чтообы тип этих полей поменялся. В NUMBER больше 51 бита не впереть даже на 5.3.
Там хитрее сделано. Пока идёт работа только с целыми числами, используются все биты как в стандартной целочисленной арифметике в других языках, а вот при смешивании целых чисел и double получается результат double. Например, для перевода целого числа x  в double рекомендуют делать что-то типа x = x + 0.0
19-значные номера заявок и сделок на MOEX
 
Цитата
новичок написал:
Цитата
Sergey Gorokhov написал:
 
Цитата
новичок  написал:
ну а версию луа апните или тоже не скажете? :)
 
Да апнем, будет 5.3
СУПЕР!
Все, кто при программировании скриптов использовал module, придётся обновить код, чтобы их не было. При переходе от Lua 5.1 к Lua 5.3 от этого отказались.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Нашёл инфу в соседней ветке: https://forum.quik.ru/forum1/topic5117/

Цитата
6. Проблемы работы с длинными номерами в QLUA (на любых версиях терминала на момент публикации данного уведомления).
Для    решения проблем пп. 5-6 следует установить версию терминала QUIK,   которая на момент публикации данного уведомления еще не вышла, но   планируется к выпуску до того, как данное изменение в торговой системе   будет внедрено.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
А где можно скачать версию терминала QUIK, на которой можно проверить QLua-скрипты, подключившись к тестовому серверу?
19-значные номера заявок и сделок на MOEX
 
Цитата
Anton написал:
Цитата
_sk_ написал:
на бирже был номер заявки 9876543210987654321, внутри QLua это будет видно как
Уже есть конкретика, как это будет видно:  https://forum.quik.ru/messages/forum10/message41712/topic5021/#message41712
Если это действительно так, то спасибо за пример.
19-значные номера заявок и сделок на MOEX
 
Цитата
Зачем? разве одного только факта что они будут некорректные не достаточно?

Возможно, что по некорректным значениям из QLua можно с помощью каких-либо преобразований и внешней информации восстановить-таки корректные значения.

Если происходит потеря точности, когда последовательные номера отображаются в одинаковые числа, тогда уже всё пропало.
19-значные номера заявок и сделок на MOEX
 
Цитата
но текстовый номер заявки всё равно приходит в сообщении о транзакции? Его можно будет использовать, хоть он и 19 значный?

Такое есть только в OnTransReply, но нет в OnTrade, OnOrder, так что эта информация особенно не поможет, т.к. на одном OnTransReply далеко не уехать.
Цитата
что терминал версии 7.xx возвращает в полях:
* trade_num таблицы, приходящей в функции обратного вызова OnTrade;
* order_num таблицы, приходящей в функции обратного вызова OnTransReply;
* order_num таблицы, приходящей в функции обратного вызова OnOrder?
Желательно с примером, какой был номер на бирже и как этот номер отображается в QLua.

Вопрос остался без ответа. Можете привести реальный пример типа: на бирже был номер заявки 9876543210987654321, внутри QLua это будет видно как ... (и привести значение, которое в QLua получится). Тогда явно будет видно, с какими проблемами столкнёмся.
19-значные номера заявок и сделок на MOEX
 
Поскольку разработчики терминала имеют возможность проверить поведение терминала на тестовом полигоне МосБиржи и это не связано с релизом 8-й версии, просьба к ним дать ответ на вопросы.

В рамках QLua,  если используются 19-значные номера сделок, что терминал версии 7.xx возвращает в полях:
* trade_num таблицы, приходящей в функции обратного вызова OnTrade;
* order_num таблицы, приходящей в функции обратного вызова OnTransReply;
* order_num таблицы, приходящей в функции обратного вызова OnOrder?
Желательно с примером, какой был номер на бирже и как этот номер отображается в QLua.

Я предполагаю, что номера сделок с потерей числовой точности. Если да, то выходит, что алготрейдинг в 7-й версии терминала с использованием QLua станет невозможным на срочном рынке.
19-значные номера заявок и сделок на MOEX
 
Цитата
новичок написал:
Цитата
_sk_ написал:
С этими номерами арифметические операции вряд ли кто-то производит.
еще как пользуются
Цитата
_sk_ написал:
возврат номеров заявок и сделок в виде строки
поздравляю, #ВСГ
Приведите, пожалуйста, примеры того, как Вы работаете с номерами заявок и сделок, чтобы потребовались арифметические операции (+, 0, *, /) с этими номерами. Интересно.
19-значные номера заявок и сделок на MOEX
 
Мне кажется, что наиболее подходящим решением для Lua будет возврат номеров заявок и сделок в виде строки. С этими номерами арифметические операции вряд ли кто-то производит. Номера используются в качестве ключей в таблицах. Если ключей много и хочется экономить память, то уже писатели скриптов могут этим заняться, разбивая длинные строки на более короткие подстроки и преобразовывая их в числа для формирования составных ключей.

Теоретически, можно как-то через userdata выкручиваться, чтобы сразу экономить память, но там ещё разбираться надо.
19-значные номера заявок и сделок на MOEX
 
Беда откладывается до февраля 2020 года.

Цитата
... по просьбам пользователей в ближайшем релизе будет установлено  временное ограничение на максимальную длину номеров – 14 десятичных  цифр.

https://www.moex.com/n26101/?nt=107
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 След.
Наверх