Постараемся пояснить по поводу отсутствия описания упомянутых Вами ошибок в нашей документации: Вариант добавления диагностики "Превышена позиция по инструменту" в Руководство пользователя QUIK целесообразным не считаем, по скольку она возникает при различных настройках на стороне серверного ПО, данная ошибка может меняться в формулировке от версии к версии, но причина ее появления будет одна и та же - настройки на стороне сервера, с которыми необходимо разобраться, разбор каждого конкретного случая происходит индивидуально силами специалистов брокеров, которые при необходимости также консультируются у нас. Повторимся - данная диагностика является специфичной, и каким-либо содержательным образом описать её для конечного пользователя, к сожалению, возможным не представляется. При возникновении подобной ошибки - рекомендуется обращаться к Вашему действующему брокеру. В данном случае, если необходим разбор появления ошибки на сервере QUIK Junior - просьба сообщить ранее запрошенные детали. Касательно ошибки "Превышен лимит отправки транзакций для данного логина" - это ошибка возвращается из торговой системы (на это должен указывать номер ошибки), и характерна, как правило, для срочного рынка. Терминал может ретранслировать ошибки, посылаемые из ТС, но мы их не документируем, потому что это также подразумевает необходимость поддерживать список биржевых ошибок и их описание в актуальном состоянии, а это уже не является нашей прямой задачей, как разработчика. Описание ошибок может и должна предоставлять биржа. При этом биржевые ошибки достаточно легко идентифицировать - по наличию номера ошибки в круглых или квадратных скобках. В случае срочного рынка ещё есть подстрока "[GW]", и Вы, скорее всего видели такую диагностику: "[GW] Превышен лимит отправки транзакций для данного логина". Т.о., за информацией о смысловом содержании той или иной биржевой ошибки следует обращаться либо напрямую на биржу, либо уточнять её причины через Вашего действующего брокера.
та вот это и напишите кратко в инструкции. ---------------------------- Если ваша прога что-то прокукарекала, то Вы должны сказать что-то про это, а не заставлять пользующих гадать на кофейной гуще и отвлекать Вас от важных дел.
Добрый день, ---------------------- Написал скрипт краш-теста. В целом результатами доволен. Рассказываю подробности. ----------------------------, Условия теста: демо-сервер версия терминала 9.7 ( тормозная) -------------------- Робот на каждую принятую сделку по колбеку OnParam рассчитывает цену на 20 шагов ниже цены последней сделки определяет максимальное число контрактов для текущего инструмента функцией CalcBuySell и выставляет заявку на покупку одного контракта по расчетной цене. При очередном вызове колбека , робот снимает все выставленные ранее заявки , проверяет отсутствие неисполненной транзакции и открытой заявки по текущему инструменту и при положительном решении, выставляет новую заявку. -------------------- Результаты теста(фрагмент):
Время работы теста составило примерно 12000 секунд( примерно 1.5 часа) За это время колбеки вызывались 2 млн 670 тысяч раз, выставлено и снято заявок 278 тысяч инструментов 908 (акции валюта фьючерсы) среднее время на одну заявку составляет примерно 2.5 ms, максимальное 8 ms, минимальное 0.25 ms. из 2.5 ms одного цикла выставления заявки, 2.2 ms уходит на функцию CalcBuySell. уж не знаю, что туда напичкали, если на все остальное у робота уходит в 10 раз меньше,чем на эту функцию. На обработку колбеков заявок и транзакций уходит 0.05 до 0.1 ms. ------------------------------------------- Размер скрипта 600 строк LUA+ DLL для обработки событий и расчета времени с квантом 0.1 мкс.
AndyWise написал: Вопрос по ТТТ, как говорили выше, она формируется срезами и пакетами. Допустим пакет с ценой LAST отправляется каждые 100 мс. А в нем 10 срезов, каждый 10мс.Так вот, эти 10 мс формируются по простому, просто как есть на «сейчас». Либо второй вариант, в эти 10 мс (за 10мс) можно запихнуть Hi, Low, Now. По сути, по мотиву свечей, пропуск данных нивелирует Мин/Макс за период обновления.
Срез - это значения параметров на момент среза Last - это цена последней сделки на момент среза. Если в пакете несколько срезов то и цен несколько. Актуальная всегда последняя. Hi, Low - это понятия относятся к интервалу наблюдения Например торговый день или свеча с интервалом 1 минута. TTT к этому не имеет никакого отношения.
можно sleep не использовать если комп многоядерный, но тогда одно ядро будет занято и при отсутствии сделок. Например, В тесте у меня Загрузка без слипа примерно 30% со sleep(1) 3-10% ------------------ если делать совсем правильно, то надо использовать события ядра OC или атомарные операции совместно с Shared memory ------------------ Я использую внутри скрипта события ядра, а между скриптами и приложениями Shared memory . Загрузка процессора не более 3%.
Михаил написал: Добрый вечер! У меня в скрипте Lua не срабатывает OnTransReply. В начале при выставлении заявки он отрабатывает, а при удалении этой заявки нет. Посоветуйте, пж, что делать?
Обращаем Ваше внимание на то, что с версии 8.7, до последних версий 9-x версий, а также до текущей актуальной версии 10.1 в терминале и сервере QUIK было реализовано большое количество различных доработок, добавлено и поддержано новых функциональностей, в т.ч. связанных с новыми возможностями сервера QUIK.
К сожалению, это в том числе не исключает и того, что при определённых условиях, а именно при использовании существенно устаревших настроек сервера, эти доработки могут приводить к понижению производительности в работе более новых версий терминала. В то же время, существенно устаревшие настройки сервера могут быть более оптимальными для старых версий терминалов, которые именно для таких настроек были более оптимизированы, что закономерно.
Тем не менее, из этого не следует, что новые версии терминала являются абсолютно непригодными для работы, как это предполагается. Со своей стороны мы признаём, что причина такого поведения лежит на стороне сервера и состоит в существенно устаревших настройках ведения позиций. Мы запланировали изменение этих настроек на более актуальные, сегодня они вступят в силу и на более новых и актуальных версиях терминала проблем с производительностью и отзывчивостью интерфейса возникать не должно.
Мы приносим извинения за причинённые неудобства, а также просим Вас, если Вас не затруднит, понаблюдать за работой более новых терминалов в условиях создаваемой Вами нагрузки при новых настройках на сервере и если проблема будет по-прежнему актуальной - сообщить нам об этом для дальнейшего более детального разбора.
Заранее большое спасибо.
Благодарю за информацию. Но данная проблема выявлена с вашем демо сервером. Полагаю, что он у Вас не устаревший. ------------------------ Да , работает, но тормоза не только раздражают, но и существенно замедляют реакцию терминала на рыночные события. ============== "А в остальном, прекрасная маркиза Всё хорошо, всё хорошо."
Anzhelika Belokur написал: nikolz, наиболее частые ошибки у нас описаны в документе, который находится у нас на сайте https://arqatech.com/upload/iblock/473/%D0%A2%D0%B8%D0%BF%D0%BE%D0%B2%D1%8B%D 0%B5%20%D0%BE%D1%88%D0%... по сообщениям, которые приходят от биржи, мы рекомендуем обращаться к специалистам биржи. В случае с ограничением по логину, мы не отправляем Вас на биржу, а просим уточнить инструмент, на котором проявляется данное сообщение, а так же скриншот этого сообщения. Мы сами будем уточнять у биржи по Вашей ошибке, если ошибка возникает на инструментах всех рынков, так и напишите, если на Срочном, уточните это. Если мы запрашиваем информацию значит она нам нужна, а Вы почему-то упорно не хотите ее предоставлять, но хотите помощи.
прикольно, но дело в том, что я написал тест, который выставляет и снимает заявки на сделки которые генерит Ваш демо сервер. у какой биржи Вы будете уточнять?
Добрый день, Посвятил целую неделю, чтобы выполнить работу разработчиков и найти критическую ошибку версий 9 10, по которой терминал может минутами не отвечать. -------------------------- Если У Вас нет желание это наблюдать, то рекомендую не ставить эти версии, а также другие выше 8 , пока разработчики официально не укажут на исправление этой ошибки. -------------------------- В настоящее время последней нормальной версией является 8.7.1.3, которую и рекомендую.
Эти ошибки не должны быть описаны в Руководстве пользователя QUIK, т.к пользователь сам не сможет на конкретно эту проблему повлиять. Эту ошибку, вероятно, присылает биржа, чтобы точно сказать нам нужен скриншот ошибки. Чтобы Вас не отправлять с ней на биржу (Вы не знаете логина, который она попросит) мы просим Вас ответить на вопрос: на заявку по какому инструменту (и мы поймем рынок) выходит данное сообщение?
Вы не правы , так как ваша программа выдает данное сообщение . Поэтому вне зависимости от того кто его прислал в правильной документации упоминается это сообщение и дается объяснение (ваше не ваше и зачем Вы им засоряете терминал ) ------------------------- Вы не ответили относительно второго сообщения, по которому нет надобности знать инструмент. если это сообщение биржи, то дайте ссылку на документ биржи, иначе Вы просто отмахиваетесь от того, что сами не знаете.
мое мнение, если устраивают интервалы сервера биржи, то не надо вычислять свечи. ------------------- в качестве бесплатного совета. Если торгуете каким то заранее заданным инструментом (например сбербанком или газпромом и т д) и открываете для них графики то проще всего делать робота как индикатор, а не как скрипт. Будет и быстро и просто .
Операция доступна, если в таблице на вкладке «Позиции» есть хотя бы одна ненулевая позиция. Размер позиции должен быть больше либо равен размеру одного лота по выбранному инструменту. Так же нужно наличие встречного спроса или предложения по тем инструментам, по которым нужно закрыть позиции. Чтобы понять, что условия выполняются просьба прислать скриншот таблицы «Состояние счета» по вкладке «Позиции» , чтобы видно было неактивность кнопки "Закрыть все" и значения по параметру "Позиция". А так же стакан котировок в момент закрытия по какому-либо инструменту, который в списке на закрытие.
это все понятно. Поясняю о чем я говорю. В тесте создаем заявки по акциям и фьючерсам заявки исполняются и в соответствующих таблицах отображаются позиции по инструментам. ------------------------- После этого начинаем закрывать позиции принудительно через меню по правой кнопки мышки на поле таблицы. 1) закрывает одну конкретную позицию 2) закрываем все ------------------ для акций все работает без проблем а для фьючерсов работает лишь 1). ------------------- Если 2) для фьючерсов не должно работать то сделайте этот пункт неактивным Если должно работать , то исправьте ошибку в проге терминала.
Проблема тормозов в терминале QUIK версии 9 и 10 остались и после учета Ваших ограничений на параметры портфеля. ------------------- Поэтому , прошу поправить если я не прав, но можно сделать вывод, что версии 9 и 10 имеют существенную ошибку, что приводит к зависаниям терминала. ------------------------- Такой проблемы нет в версии 8 ================= Таким образом, справедливо было бы признать ошибку и снять с распространения 9 и 10 версии либо срочно внести в них исправление тормозов.
nikolz написал: аналогично и другие таблицы которые настроены в терминале по умолчанию. Номеров строк нет. как добавить не уничтожая таблицы.
Они скрыты для экономии места во вкладках, можно навести на левый край первого видимого столбца до появления "стрелочки", потянуть вправо и раздвинуть столбец с нумерацией.(См. Рис.1)
Не всегда по ошибке можно однозначно определить причину почему она возникает. 1. Вероятно, что не хватает денег или бумаг. 2. Уточните, по какому рынку возникает такая диагностика? Нужно будет сделать запрос на биржу по данному ограничению.
Проблема в том, что этих сообщений нет в документации. И не важно по какому рынку. Они должны быть. Поэтому поясните для каких рынков они возникают и что означают.
Quikos_1, Хочу пояснить, сжатие данных их тиков в свечи мы делаем не для того чтобы меньше передавать с сервера данных, а для того, чтобы делать прогноз движения рынка. ----------------------- Поэтому , если мощности компа хватает можете считать свечи сами из тиков, а если нет желания считать можно получать их с сервера биржи. ----------------- прикол лишь в том, что сервер на бирже раньше вас рассчитает свечи и пришлет их Вам.
nikolz написал: я тоже делал расчет свечей по таблицам обезличенных сделок. Для этой цели и чтобы тестировать запаздывание данных относительно времени сделок на бирже я синхронизирую компьютер с сервером точного времени , что обеспечивает погрешность относительно биржи в пределах 10 мs
Не понимаю зачем синхронизировать ? Если Вам приходит тик с конкретной датой и временем вплоть до секунды - просто складируейте его в минутную, трехминутную, 5-и мутную и так далее Свечу и все. Или я что то не правильно понимаю.
.Для погрешности в секунды синхронизация не требуется так как комп эту синхронизацию обеспечивает. ----------------- Зачем Вы считать то, что уже посчитано. Более того свеча 1 минуту имеет всего 5 отсчетов, при этом для ликвидного инструмента Вам надо обработать примерно 1000 тиков. Т е сжатие будет в 200 раз.
f, error_desc = io.open ( getScriptPath () .. "\\M15_" .. sec_code .. ".log", "a" )
if not f then
message ( "Ошибка получения файла лога:" .. error_desc)
else
writeToLog( "MA" .. tostring(MA))
end
данный кусок кода присутствует только в function OnInit(quik_path).
Для начала попробуйте заменить функцию getScriptPath () на явный путь. Т е напишите имя файла путь и тип файла одной строкой например "D:/test.log"
Eldar написал: Создал скрипт (по аналогии с тремя экранами Элдера) и в нем пишу лог.
Код
f = nil --указатель на файл лога
MA = 0
sec_code = "SRH3"
function main ()
while is_run do
if IsWindowClosed (t) then
is_run = false
return
end
exMA()
f, error_desc = io.open ( getScriptPath () .. "\\M15_" .. sec_code .. ".log", "a" )
if not f then
message ( "Ошибка получения файла лога:" .. error_desc)
else
writeToLog( "MA" .. tostring(MA))
end
sleep ( 50 )
end
end
function writeToLog (proc_name)
f:write( os.date () .. " " .. proc_name .. "\n" )
f:flush()
end
работает. делаю копию скрипта. меняю тикер на SRM3 запускаю скрипт и падает квик с ошибкой. D:\LUA\M15_SRM.lua:524: attempt to index a nil value (global 'f')причем файл создается. делаю третий файл с тикером RIH3. запускаю SRH3 - работает, запускаю RIH3 - работает. запускаю SRM3 - падает. открываю снова терминал. закрываю все скрипты. запускаю SRM3 - работает. запускаю SRH3 - работет. запускаю RIH3 - работает. с правами на папку со скриптами и логами все в порядке.
что за пролтергейст какой-то.
У вас файл открывается в цикле много раз. Либо закрывайте его каждый раз, либо откройте один раз.
я тоже делал расчет свечей по таблицам обезличенных сделок. Для этой цели и чтобы тестировать запаздывание данных относительно времени сделок на бирже я синхронизирую компьютер с сервером точного времени , что обеспечивает погрешность относительно биржи в пределах 10 мs
Но если свечи рассчитывать в терминале, то начало таймов надо привязывать к атомным часам, иначе у Вас будут разные свечи на разных терминалах для одних и тех же интервалов.
Вроде бы не должно так быть.
Я просто рассчитываю свечи именно таким образом. А дату и время беру из пришедшего Тика.
так как Вы считаете для себя, то можно считать как Вам удобно. Но результаты у вас будут иные чем рассчитанные как надо. Особенно Вы будете ошибаться на не ликвидных инструментах. Кроме того, как вы решаете вопрос обнаружение попущенных интервалов, если у вас просто нет никаких тиков?
Добрый день, Просьба пояснить при каких условиях выдаются следующие сообщения: В документации не нашел, если есть, дайте ссылку. 1. Превышена позиция по инструменту 2. Превышен лимит отправки транзакций для данного логина.
еще такой прикол в демо есть. В терминале настроена таблица заявок. Но в ней нет номеров строк. Как их туда добавить. пока получается лишь уничтожить и снова создать таблицу.
Давайте упростим ситуацию и у нас не будет индикаторов, а только свечной график.
Как Вы и написали - Тик это сделка.
У свечи есть такой параметр, как цена закрытия, которая постоянно меняется при совершении сделки - то есть с каждым Тиком.
НО цена сделки может не меняться, то есть несколько сделка прошли по одной и той же цене, НО в и этом случае - есть параметр Volume, который увеличивается с каждым Тиком в не зависимости от цена Тика.
На основании этого я могу сделать вывод, что поток Тиков будет пропорционально в разы меньше заказанных интервалов свечей.
Вы почему-то не любите слово индикатор. и называете его параметром. ---------------------- В действительности мы не знаем как реализован алгоритм вычисления свечей на сервере. ---------------------- Вы спросили: То на сервер при SetUpdateCallback - идет по сути только один запрос по интервалу - "INTERVAL_TICK", а уже пришедшая цена с датой раскидывается по интервалу силами Квика ? --------------------------- Так тоже можно сделать. Например, если Вы считаете интервалы, которых нет в квике, то вы так и делаете. ------------------------- Но если свечи рассчитывать в терминале, то начало таймов надо привязывать к атомным часам, иначе у Вас будут разные свечи на разных терминалах для одних и тех же интервалов. -------------------------- В действительности свечи все одинаковые у всех брокеров. А это означает, что их формирует сервер биржи. ------------------------------- При этом Вам никто не гарантирует, что внутри свечи Вы получите все значения тиков. Свеча является таковой только в момент ее закрытия. Параметры открытой свечи передаются срезами.
То на сервер при SetUpdateCallback - идет по сути только один запрос по интервалу - "INTERVAL_TICK", а уже пришедшая цена с датой раскидывается по интервалу силами Квика ?
Нет, на сервер идет запрос для каждого интервала, так как свечи формирует не терминал, а сервер. ------------------ Поток свечей на 1-2 порядка меньше, чем поток тиков.
А как поток свечей может быть меньше - да еще и на порядок, если, TICK он один, а интервалов свечей несколько ? Если я выбираю дневную свечу - это же не значит - что колбек по ней будет вызываться один раз в день ? Он же будет вызываться ровно столько - сколько же и Тиковый интервал.
Поясняю, следите за руками. Тик - это сделка. Свеча - это способ сжатия информации о сделках путем вычисления четырех индикаторов на заданном интервале времени. -------------------------------- Если текущая сделка изменила значение какого-либо индикатора, то сервер пошлет это значение терминалу. Предположим у нас тайм 1 час. 1 индикатор - это первый тик в текущем часе. - 1 значение на интервал. 2 индикатор - это максимальная цена сделки на текущем часе. Этот индикатор изменится лишь при превышении цены текущей сделки максимальной цены предыдущих. 3 индикатор -это минимальная цена сделки на текущем часе. 4 индикатор - это текущая цена сделки, если она отличается от цены предыдущей сделки. ================= Теперь рассмотрим случаи когда тики будут пропускаться без создания новых значений индикаторов. Вот некоторые из них. 1) Если в сделке участвует айсберг или большой пакет, то цена сделок не будет меняться, следовательно значения свечей тоже не меняются 2) Если сделки совершаются внутри тела текущей свечи, то изменяется лишь 1 индикатор при условии , что цена сделки меняется ================= В итоге количество значений в свечах всегда меньше, чем число сделок. ============== Вы можете это проверить сами. Для этого напишите вычисление свечей по тикам и посчитайте количество полученных данных.
То на сервер при SetUpdateCallback - идет по сути только один запрос по интервалу - "INTERVAL_TICK", а уже пришедшая цена с датой раскидывается по интервалу силами Квика ?
Нет, на сервер идет запрос для каждого интервала, так как свечи формирует не терминал, а сервер. ------------------ Поток свечей на 1-2 порядка меньше, чем поток тиков.
Добрый день, Новый день не принес ничего нового. Квик-юниор как и вчера тормозит и не отвечает по несколько минут на каждый квик. Это поведение не зависит ни от версии ни от числа заявок. ----------------------- Что прикольно. У меня запущен в это время рабочий Квик , которые не тормозит и работает без проблем. ================= Работать с демо из такого торможения практически невозможно. =============== Какие есть мысли как выявить причину такого торможения.
Karina Dmitrieva написал: nikolz, просьба уточнить были ли также удалены файлы с расширением *.log и выполнялась ли рекомендация по исключению текущего файла настроек окон *.wnd? Если нет - просьба выполнить предложенные выше рекомендации и проверить работоспособность.
Если после этого эффект сохранится - для анализа описываемого поведения потребуется файл дампа. В момент зависания Рабочего места QUIK откройте Диспетчер задач. Далее в списке процессов найдите процесс "info.exe" ("Рабочее место информационно-торговой системы QUIK "). Кликните по нему правой клавишей мыши и в контекстном меню выберите "Создать файл дампа". Полученный дамп и архив Рабочего места QUIK (желательно получить дамп от терминала версии 10) направьте нам на почту: quiksupport@arqatech.com со ссылкой на данный Ваш отзыв. Если по какой-то причине отправить архив Рабочего места QUIK возможности нет, то пришлите дамп.
относительно файлов *.log - Да Настройки как у Вас в пакете на сайте, я ничего не менял. --------------------------- Выше я специально поместил картинку папки QUIK дабы Вы могли проверить ее содержимое лично.
Добрый день, Сегодня мне удалось завалить терминал версии 9.7. на демо счете Предположительно это связано как-то с большим числом строк в таблице заявок. Ранее такая же проблема возникла для версии 10. Очевидно что версия 9.7 более живучая чем 10. -------------------- В данном состоянии скрипты и индикаторы в терминал не загружены. Перед запуском терминала специально перезагрузил комп. Терминал завис после подключения к серверу
напоминает DDOS атаку на сервер QUIK. Могут и отключить нафиг.
Просто скриншот не удачно прикрепился, никаких атак :)
я имел ввиду Ваши интенсивные посылки my_ CreateDataSource __HISTORY__wrapper( "TQBR" ,"SBER", "INTERVAL_M1" ) это очевидно Ваша функция создание источника и так 200 раз и без пауз между посылками. --------------------- Так делают DDOS атаку. КУЧУ посылок в один порт чтобы сервер лег. Безусловно, Вы сервер брокера не положите, но все равно выглядит не комильфо.
Рекомендуете поставить небольшую задержку между вызовами ?
лучше поставить проверку сознания источника с заданным тайм-аутом т е продолжать подключать если очередное подключение есть или истек тайм. Если тайм истек то сообщение об этом Если подключились то тоже сообщение В итоге все будет понятно.
Добрый день, второй день на демо счете все чудеснее и чудеснее. В настоящее время при загрузке демо квика версии 10.01 терминал QUIK-JUNIOR подключается к демо счету после этого не отвечает по несколько минут на каждое нажатие мышки на экране. А в диспетчере задач видим следующее. 2-я строка это демо сервер версия 10 загрузка процессора около 30% 1-я строка рабочий терминал версия 8.7 загрузка процессора около 3%
для сравнения загрузил версию 9.7 и наблюдаем чудеса:
----------- На рабоем терминале работают индикаторы и скрипты На демо терминалах ничего своего не ставил. Просто скачал развернул и подключил. И ловлю кайф. Такого прикола еще не видел.
напоминает DDOS атаку на сервер QUIK. Могут и отключить нафиг.
Просто скриншот не удачно прикрепился, никаких атак :)
я имел ввиду Ваши интенсивные посылки my_ CreateDataSource __HISTORY__wrapper( "TQBR" ,"SBER", "INTERVAL_M1" ) это очевидно Ваша функция создание источника и так 200 раз и без пауз между посылками. --------------------- Так делают DDOS атаку. КУЧУ посылок в один порт чтобы сервер лег. Безусловно, Вы сервер брокера не положите, но все равно выглядит не комильфо.
nikolz написал: Хочу поинтересоваться, что дает запись кода фьючерса в id. если можно, то интересует численная оценка выигрыша относительно целочисленного id. Номера советников можно написать в старших байтах. Я так раньше делал. Типа 32 бита в итоге 1024 советника и 4194304 (4 миллиона) заявки в день для каждого из них. ------------------------ Чего уж проще.
Дело в том, чтоMDI приложении работают одновременно от 97- до 134 роботов. Ордера я отсылаю асинхронно. При генерации dwTransID каждым из роботов, неизбежно дублирование ID, поэтому нужно делать уникальные ID
А если вместо фьючерсов будут акции или опционы - тогда кирдык Вашей схеме? ---------------------- Я делал все гораздо проще номер робота в старшие 10 бит (1024 робота одновременно )и вся проблема решена и не имеет значение чем торгуем