При выводе информации в лог-файл выводится тарабарщина
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
13.07.2015 09:29:45
Цитата
Deserf пишет: Еще раз пишу: режим "а+" не подойдет: это cfg-файл, мне нужно заменять определенные значения в строго определенном месте, а не дописывать, а потом объяснять при следующем цикле оператором что же им считывать.
Вообще-то режим "a+" как раз предназначен, чтобы заменять "определенные значения в строго определенном месте":
Надо делать так, как надо. А как не надо - делать не надо.
Добавить новый вид графика
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
12.07.2015 12:57:46
Добавьте новый вид графика, типа гистограммы, только полностью закрашенный:
Надо делать так, как надо. А как не надо - делать не надо.
Рекламный баннер в ИТС QUIK, Как убрать рекламный баннер в ИТС QUIK
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.07.2015 10:32:23
Соответственно, и покажет терминал рекламу сразу после подключения.
Надо делать так, как надо. А как не надо - делать не надо.
Рекламный баннер в ИТС QUIK, Как убрать рекламный баннер в ИТС QUIK
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.07.2015 10:30:19
Баннер скачивается при подключении к серверу.
Надо делать так, как надо. А как не надо - делать не надо.
Почему не переносится «Со связанной заявкой»?
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.07.2015 10:27:38
C одной стороны, перенос лимитированной заявки через клиринг осуществляется путём её снятия и выставления новой. С другой стороны, можно ведь и реализовать механизм перевыставления стоп-заявки на новую заявку.
Надо делать так, как надо. А как не надо - делать не надо.
Ошибки в функции getQuoteLevel2!!!, Возвращаемый стакан котировок не всегда соответствует (нормальным) условиям...
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
10.07.2015 14:38:43
Michael Bulychev, тогда тем более не понятно, почему за основу потокобезопасных функций вы взяли table.insert/table.remove, а не свой вариант.
Надо делать так, как надо. А как не надо - делать не надо.
Ошибки в функции getQuoteLevel2!!!, Возвращаемый стакан котировок не всегда соответствует (нормальным) условиям...
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
10.07.2015 09:57:02
Цитата
DronGO пишет: Сравнил количество сохранённый сделок/в секунду первым способом и вторым.
Видимо, идут накладные расходы на заморозку/разморозку параллельного потока. Кроме того, параллельный поток при использовании потокобезопасных функций просто простаивает.
Ваш тест показывает, что создание большой очереди в колбеке для её последующей обработки в main нецелесообразно, т.к. изымание элементов из большой очереди может занять больше времени, чем обработка колбеков сразу по факту их прихода. А в случае использования потокобезопасных функций в main основной поток терминала будет "заморожен", в результате мы не получим того, для чего собственно и использовали эту очередь: освобождение основного потока.
Надо делать так, как надо. А как не надо - делать не надо.
Ошибки в функции getQuoteLevel2!!!, Возвращаемый стакан котировок не всегда соответствует (нормальным) условиям...
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
10.07.2015 08:48:10
Цитата
Николай Камынин пишет: Самый быстрый способ удалить элемент таблицы - присвоить ему nil.
Забыли добавить: если удаление идёт с правого края.
Надо делать так, как надо. А как не надо - делать не надо.
Купонная доходность
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.07.2015 17:54:09
Цитата
Михаил Иванов пишет: Есть допустим ОФЗ с купоном в 7% годовых, и стоит она 85 % от номинала.
Невысокий купон - одна из причин, почему бумага торгуется ниже номинала. И наоборот. Чтобы знать истинную доходность к погашению в терминале и транслируется значение доходности с учётом дисконта/надбавки.
Надо делать так, как надо. А как не надо - делать не надо.
Ошибки в функции getQuoteLevel2!!!, Возвращаемый стакан котировок не всегда соответствует (нормальным) условиям...
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.07.2015 16:59:54
DronGO, в этой обсуждалась работа потокобезопасных функций.
Цитата
DronGO пишет: Кстати table.sinsert table.sremove, работают очень медленно, в сотни раз медленнее, чем lock-free системы.
Как вы это проверяли?
Надо делать так, как надо. А как не надо - делать не надо.
Купонная доходность
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.07.2015 16:52:58
Цитата
Михаил Иванов пишет: Приоритеты для меня расставлены по другому
А смысл? Если вы гарантированно (при отсутствии дефолта эмитента) получите доходность именно с учётом дисконта?
Надо делать так, как надо. А как не надо - делать не надо.
message, параметры
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.07.2015 14:31:45
Добавьте в параметр "Источник" большее количество источников, например: Сервер биржи; Сервер QUIK; QMonitor; Рабочее место QUIK
Надо делать так, как надо. А как не надо - делать не надо.
Купонная доходность
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.07.2015 13:55:29
Есть бескупонные облигации. Доходность по ним определяется по дисконту и/или надбавкой к номинальной стоимости.
Надо делать так, как надо. А как не надо - делать не надо.
Купонная доходность
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
09.07.2015 13:36:22
Цитата
Михаил Иванов пишет: Но при долгосрочном инвестировании в облигации важна чистая Купонная доходность (без учёта цены)
Вообще-то в облигации важна как раз общая доходность с учётом дисконта и купона, а также цены выкупа (погашения/оферты) ;-)
Надо делать так, как надо. А как не надо - делать не надо.
Возможность строить индикаторы по индикаторам
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
08.07.2015 17:57:32
Хотя, можно и побыстрее сделать... Но всё равно, возможность строить индикаторы по индикаторам нужна.
Надо делать так, как надо. А как не надо - делать не надо.
Возможность строить индикаторы по индикаторам
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
08.07.2015 17:31:26
Тут вот какое дело: если строить Lua-индикатор по другому индикатору (неважно встроенному или Lua), с помощью функции getCandlesByIndex, то добавление его на график или полное обновление займёт несколько минут. При большом количестве таких индикаторов запуск QUIK займёт ну ооочень много времени.
Надо делать так, как надо. А как не надо - делать не надо.
Рекламный баннер в ИТС QUIK, Как убрать рекламный баннер в ИТС QUIK
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
08.07.2015 15:26:24
Цитата
Stanislav Tvorogov пишет: Необходимо учесть, что при установленном флаге "Обновлять версию программы" в меню "Настройки/Основные/Программа/" файл будет снова получен при подключении.
Если не ошибаюсь, этот файл будет в любом случае получен при его наличии на текущем сервере, в независимости от настроек.
Надо делать так, как надо. А как не надо - делать не надо.
Разреженный стакан, проблема.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
08.07.2015 13:28:15
Спасибо.
Кстати, неплохо было бы добавить настройку, ограничивающую максимальный размер стакана. А то при "случайном" открытии разряженного стакана по неликвидной бумаге терминал зависает из-за необходимости создавать стакан с огромным числом строк.
Надо делать так, как надо. А как не надо - делать не надо.
Возможность строить индикаторы по индикаторам
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
08.07.2015 12:59:11
Цитата
Дмитрий пишет: Было бы очень хорошо, если бы в качестве источника данных для индикатора можно было выбрать также значения другого, ранее построенного индикатора, то есть строить индикаторы на основе графиков других индикаторов.
Присоединяюсь к пожеланию.
Надо делать так, как надо. А как не надо - делать не надо.
Разреженный стакан, проблема.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
08.07.2015 12:57:51
Сделайте активным пункт настройки "Лучшие спрос и предложение видны всегда" для разряженного стакана. (По-моему такое пожелание регистрировали несколько лет назад). (Кому не надо - тот не будет включать.)
Скрытый текст
Понимаю, что при большом спреде обе котировки одновременно могут быть не видны. В этом случае можно показывать среднюю цену между спросом и предложением (или добавить дополнительную настройку: показывать Bid или Offer). Но обычно при большом спреде разряженный стакан не используют.
Надо делать так, как надо. А как не надо - делать не надо.
Ошибки в функции getQuoteLevel2!!!, Возвращаемый стакан котировок не всегда соответствует (нормальным) условиям...
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
07.07.2015 12:21:43
Цитата
Sergey Gorokhov пишет: Мы провели разбор полученной информации и обнаружили причины описанной Вами проблемы. Временное "увеличение строк в стакане котировок" объясняется итеративностью в обновлении стакана котировок, когда обновляются ценовые уровни, один за другим. В связи с этим, при частом обновлении большого количества ценовых уровней, возникает возможность временно наблюдать окно котировок в состоянии, когда обновлена только часть ценовых уровней, а вторая часть ещё не обновлена и соответствует предыдущему состоянию. В этот момент в стакане могут появляться "лишние строки".
Мы постараемся исправить данную особенность обновления стакана котировок в одной из ближайших версий ПО.
Никаких "особенностей" при "частом обновлении большого количества ценовых уровней" возникать не должно.
Что-то мне подсказывает, что разбор ситуации проведён не тщательно, и действительные причины проблемы не найдены (свои мысли по этому поводу и возможным причинам я направил по e-mail). Одна из причин - изменения строк не в хронологическом порядке, т.е., не в том порядке, в каком они изменялись в действительности. И, как следствие, мы видим большее (меньшее) количество строк в "стакане" и пересечения цен спроса и предложения (, ).
Отсюда у меня есть опасения, что будет устранена не действительная причина проблемы, а произведены, например, "косметические" правки, типа убраны "лишние" строки. Соответственно, есть опасения и за качество данных после таких исправлений.
Поэтому, предлагаю более тщательно исследовать данную проблему.
Надо делать так, как надо. А как не надо - делать не надо.
Количество торгуемых инструментов роботом
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
07.07.2015 11:31:17
Цитата
Sergey Gorokhov пишет: Есть ограничение на чиcло локальных переменных
Цитата
Sergey Gorokhov пишет: Тоже интересно. Беглый поиск в интернете не дал результата.
Да, есть такое ограничение. Не помню точное число. Но вы можете определить это экспериментальным путём, создав большое число локальных переменных ;-) Соответственно, это ограничение можно обойти созданием ещё одной функции и переносом части вычислений и переменных в неё. Или созданием таблицы переменных.
Виталий, для ваших целей QPILE не подойдёт. Да и то, что он "более простой" - спорное утверждение. Начните сразу с изучения Lua. Для воспроизведения звукового файла можно использовать библиотеку
Надо делать так, как надо. А как не надо - делать не надо.
Сделайте на графиках разметку начала и конца торгового дня, нужны вертикальные линии, обозначающие время 10:00, 23:45
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.07.2015 23:31:25
Да, вертикальной линии на 19 часов явно не хватает. :\
Надо делать так, как надо. А как не надо - делать не надо.
Ошибки в функции getQuoteLevel2!!!, Возвращаемый стакан котировок не всегда соответствует (нормальным) условиям...
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.07.2015 10:29:05
Sergey Gorokhov, мне не хочется с вами спорить, но сам ваш вопрос
Цитата
Sergey Gorokhov пишет: Просьба привести пример скрипта считывающего bid_count и offer_count Также сообщите версию терминала и уточните это боевой доступ или тестовый?
говорит о том, что вы либо не в курсе проблемы (в чём я сомневаюсь), либо просто не хотите заниматься проведением анализа и всячески пытаетесь оттянуть этот неприятный для вас момент. Поэтому, перестаньте уже пререкаться и займитесь, наконец, проведением анализа: дополнительной информации вам не требуется. Повторяю: проблема имеет место быть на боевом сервере, на версиях QUIK 6.17.x, 6.16.x и ниже. Код и логи уже давно имеются в вашем распоряжении. Было бы желание...
Надо делать так, как надо. А как не надо - делать не надо.
Ошибки в функции getQuoteLevel2!!!, Возвращаемый стакан котировок не всегда соответствует (нормальным) условиям...
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.07.2015 10:01:32
Sergey Gorokhov, автор вам сообщает, что размеры "стаканов" часто не соответствуют стандартным. Связана ли эта проблема с упомянутой мной или нет - это вы сами разберитесь. Только зачем делать вид, что вы первый раз об этом слышите и задавать глупые вопросы? Проблема имеет место быть на боевом сервере. И вы давно располагаете кодом и логами, чтобы убедиться в этом воочию и разобраться в проблеме, а не напрягать автора зазря. А то сейчас ещё попросите архив рабочего места и видео прислать.
Весёлые картинки:
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
Ошибки в функции getQuoteLevel2!!!, Возвращаемый стакан котировок не всегда соответствует (нормальным) условиям...
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
03.07.2015 08:53:52
Цитата
Sergey Gorokhov пишет: Просьба привести пример скрипта считывающего bid_count и offer_count
Добрый день.
Не надо делать вид, что вы первый раз об этом слышите! Я отправлял логи со "стаканами" по вашему же скрипту ещё 09.06.2015 в рамках разбора проблем с некорректными данными в очереди котировок (CQ01635062), (CQ01635170). В этих логах, где bid >= offer, размеры стаканов часто не соответствуют стандартным размерам 20х20 или 50х50. Поговорите с Михаилом Шубиным, если не в курсе.
DronGO, вы ещё проверьте, чтобы bid был меньше offer:
Код
function OnQuote(class_code, sec_code)
local tStakan = getQuoteLevel2(class_code, sec_code)
local nOffer_Count, nBid_Count = tonumber(tStakan.offer_count), tonumber(tStakan.bid_count)
if nOffer_Count ~= 0 and nBid_Count ~= 0 then
local nOffer = tonumber(tStakan.offer[1].price)
local nBid = tonumber(tStakan.bid[nBid_Count].price)
if nBid >= nOffer then
_toLog("[OnQuote] "..sec_code..": Bid="..nBid.." >= Offer="..nOffer)
end
end
end
Разработчики утверждают, что у них проблема не воспроизводится на фондовой секции (про валютную пока молчат). Хотя у других проблема имеет место быть как на срочной, так на фондовой и валютной секциях рынка. Просто на фондовой секции пересечения могут возникать не каждый день. Видимо, тестерам не хватает терпения протестировать и зафиксировать проблему...
Надо делать так, как надо. А как не надо - делать не надо.
Отображение типа опциона в "позициях"
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
02.07.2015 10:31:30
Цитата
Вадим пишет: вопрос в том, как быстро понять, какие из них коллы и какие - путы.
Можно использовать условное форматирование в таблице позиций для раскраски колов и путов в разные цвета. Но, если покупаются опционы с разными датами экспирации, то не хватает условий для раскрасок.
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder без UID
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
01.07.2015 13:15:26
Цитата
Egor Zaytsev пишет: Ontrade может быть вызван два раза например, в случаях потери связи между торговой системой и сервером QUIK, а затем получение всей информации заново. В таком случае клиент два раза получит не только заявки, но и сделки.
А, понял. Сразу не сообразил...
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder без UID
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
01.07.2015 12:53:35
Если у вас есть ссылка на обсуждение (и главное ответы) по этому вопросу, то, дайте, пожалуйста, ссылку. (В документации, к сожалению, нет ни информации, ни ссылки на обсуждение)
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder без UID
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
01.07.2015 12:50:27
Цитата
Egor Zaytsev пишет: Ontrade может быть вызван два раза например, в случаях потери связи между торговой системой и сервером QUIK, а затем получение всей информации заново. В таком случае клиент два раза получит не только заявки, но и сделки.
Если пользователь производил очистку данных, то, очевидно, что после подключения к серверу, информация по сделкам придёт повторно. Это понятно, и, наверное, на этом не стоит заострять внимания. В каком случае, клиент повторно получит данные, если очистка данных на клиентке не производилась?
Надо делать так, как надо. А как не надо - делать не надо.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
30.06.2015 14:58:07
Пример можете привести?
Надо делать так, как надо. А как не надо - делать не надо.
OnOrder без UID
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
30.06.2015 14:32:17
Цитата
Олег Хуснутдинов пишет: даже если OnTrade вызывается более одного раза по одной и той же сделке, такое тоже может быть
Считаете ли вы эту информацию существенной? Почему данный факт не отражён в официальной документации по QLUA, а узнаём мы об этом только сейчас случайным образом?
Цитата
Старатель пишет: В каких ещё ситуациях OnTrade по одной сделке может вызываться более одного раза?
Надо делать так, как надо. А как не надо - делать не надо.
ещё много много раз - потокобезопасные операции, Потокобезопасность.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
30.06.2015 14:27:03
И как поступить, если необходима запись из main и из колбеков в один файл? Вариант ставить флаг, когда производится запись в файл, не возможен, т.к. начиная с версии 6.17 QUIK зависает при вставке ожидающих циклов repeat until и while do в колбеках.
Надо делать так, как надо. А как не надо - делать не надо.
Надо делать так, как надо. А как не надо - делать не надо.
Юридическая сторона вопроса. (ГК РФ Глава 70)
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
25.06.2015 14:07:24
Цитата
Vitaly Skorobogatov пишет: С точки зрения получения доступа к данным Рабочего Места QUIK, а также вызова его внутренних функций и интерфейсов, скрипту на языке LUA разрешается использовать только методы явно описанные в документации на Рабочее Место QUIK. Это замечание распространяется на все вызовы, осуществляемые не только из самого скрипта LUA, но также из загружаемых скриптом библиотек.
В свете вышесказанного как можно расценить совет вашего коллеги, Сергея Горохова, ?
Надо делать так, как надо. А как не надо - делать не надо.
27.04.2015 10:40:02 Ваше обращение по поводу смещения линий при смене сессии получено, проблема изучается. Постараемся в ближайшее время дать ответ.
Думаю, устранение данной проблемы с десятилетней историей должно быть для компании делом чести. Исправить да и закрыть этот вопрос.
Надо делать так, как надо. А как не надо - делать не надо.
Длина таблицы
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
25.06.2015 11:12:55
Получается использование оператора # для таблицы с целочисленными индексами не имеет смысла, если только достоверно не известно, что элементы таблицы заполнены без пропусков. В противном случае результат может быть не предсказуем.
Надо делать так, как надо. А как не надо - делать не надо.
Надо делать так, как надо. А как не надо - делать не надо.
Длина таблицы
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
25.06.2015 10:00:41
s_mike@rambler.ru, Во-первых, документация не моя. Это официальная документация. Во-вторых, вы явно не поняли смысл этого "any":
Цитата
The length of a table t is defined to be any integer index n such that t[n] is not nil and t[n+1] is nil; moreover, if t[1] is nil, n can be zero. For a regular array, with non-nil values from 1 to a given n, its length is exactly that n, the index of its last value. If the array has "holes" (that is, nil values between other non-nil values), then #t can be any of the indices that directly precedes a nil value (that is, it may consider any such nil value as the end of the array).
Надо делать так, как надо. А как не надо - делать не надо.