Давайте упростим ситуацию и у нас не будет индикаторов, а только свечной график.
Как Вы и написали - Тик это сделка.
У свечи есть такой параметр, как цена закрытия, которая постоянно меняется при совершении сделки - то есть с каждым Тиком.
НО цена сделки может не меняться, то есть несколько сделка прошли по одной и той же цене, НО в и этом случае - есть параметр 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 робота одновременно )и вся проблема решена и не имеет значение чем торгуем
nikolz написал: Относительно халявы для QUIK на луа сложно сказать. Можете посмотреть мой тест https://forum.quik.ru/forum10/topic7909/ это рабочая болванка для робота При приходе сделки формирует все параметры для заявки по инструменту. =============== Если надо что-то конкретное и не сложное, напишите, нарисую.
Спасибо, конечно, но в ветке написано, что есть проблемы, тогда как у меня все работает. Я открыл эту тему, чтобы понять Квик шалит, или в моем приложении есть косяк. Приложение получилось большое (более 8 000 строк кода), возможно у меня где-то недочет.
проблемы с функцией getDepo на демо счете Я просто тестил все функции из библиотеки QLUA. Эту функцию я не использую, так как Depolimit в lua читается без проблем. --------------------------- Если строку с этой функцией заменить на чтение вашей таблицы, и записать это в лог файл (там это есть) то получите экспорт через файловую систему. ----------------------------- Но решение за вами. Вы просили рассказать какие есть способы - я рассказал. ------------------------- относительно языка программирования полагаю что паскаль - это мертвый язык. его уж точно используют лишь те, кто заканчивал вуз лет 20 назад. Тогда его во всех технических вузах преподавали.
Понятно, а где взять примеры на Луа, чтобы что-то выбрать? Очень не хочется разбираться в мертвом LUA
Относительно луа Вы заблуждаетесь. Из скриптовых языков это единственный который в страивается в мобильные приборы и SoC. Кроме того из скриптовых это самый быстрый и компактный язык. Много игр написано на нем. Редактор SciTe ( хороший редактор с отладчиком) Поэтому луа скорее живее всех живых. ---------------------- Относительно халявы для QUIK на луа сложно сказать. Можете посмотреть мой тест https://forum.quik.ru/forum10/topic7909/ это рабочая болванка для робота При приходе сделки формирует все параметры для заявки по инструменту. =============== Если надо что-то конкретное и не сложное, напишите, нарисую.
... еще забыл об одном способе, который использую для быстрого обмена небольшими объемами данных. Это самый быстрый способ обмена из всех существующих. обмен через Shared memory
Михаил Филимонов написал: Квик я пишу на Паскале (Дедфи), а вообще-то мне все-равно на каком языке писать
Возможно несколько вариантов. В терминале QUIK на луа можно получить параметры из всех таблиц , кроме доски опционов. ============================ Рассказываю, лишь о том, что делал и тестировал сам. --------------------------------- 1) Ранее спрашивал как Вы экспортируете по DDE, я написал на API C for Lua DDE сервер и в нем принимаю любые таблицы из QUIK. ----------------------- 2) Для питона делал так же, как и для луа DDE в обертке . --------------------- 3) проще всего обойтись без DLL и экспортировать из луа через файловую систему (делал так для QPILE). ==================== 4) самый сложный, но самый быстрый способ экспорта любых объемов данных в любые приложения на основе File Mapping. На основе File Mapping делал экспорт между скриптами луа , терминалом QUIK и Amibroker, терминалом QUIK и внешним приложением на луа. -------------------------------- Все способы работаю прекрасно. --------------------------------- Последний вариант у меня реализован так. Загружаю DLL с DDE и с File Mapping при старте терминала QUIK. В итоге все таблицы, которые подключатся к DDE, становятся доступными через File Mapping любым скриптам и приложениям на любом языке. При этом доступ к данным из приложений и скриптов практически одновременный. Данные лишь в одной копии для всех. Какие таблицы и какие параметры экспортировать из терминала задаю с помощью INI-файлов. -------------------------------------------------- Выбирайте на свой вкус и цвет.
для справки. В луа строки хранятся как числа в виде хеш кода. поэтому нет проблемы в поиске по таблицам Сравнение выполняется не над строками а над числами.
Хочу поинтересоваться, что дает запись кода фьючерса в id. если можно, то интересует численная оценка выигрыша относительно целочисленного id. Номера советников можно написать в старших байтах. Я так раньше делал. Типа 32 бита в итоге 1024 советника и 4194304 (4 миллиона) заявки в день для каждого из них. ------------------------ Чего уж проще.
Anzhelika Belokur написал: Просто попробуйте установить программу заново не в Program Files, а в диск С.
Если проблема все еще актуальна, просьба прислать архив терминала. Для этого выполните следующие действия:
1. Откройте таблицу "Текущие торги". 2. Закройте программу QUIK. 3. Убедитесь, что QUIK исчез из списка процессов в диспетчере задач Windows. 4. Сделайте копию папки с QUIK. 5. Удалите из копии папки с QUIK файлы ключей pubring.txk и secring.txk, если они там присутствуют. 6. Сделайте архив копии папки с QUIK и пришлите его нам в почту на quiksupport@arqatech.com (или выложите на любой удобный для Вас файлообменник, а нам пришлите ссылку на скачивание).
После формирования архива просьба перезаказать данные: Выберите пункт меню Система / Заказ данных / Перезаказать данные, включите флажки «Торговые данные текущей сессии» и «Локальные справочники», нажмите на кнопку «Перезаказать». Программа закроется и автоматически запустится. Проверьте наличие Срочного рынка и сообщите нам результат, пожалуйста.
опять глупый ответ ------------------------ Это же QUIK-Junior и демо сервер. ----------------------- вы все можете скачать с Вашего сервера. ---------------------- Там есть инструкция как установить. -------------------------------------------------------------------------- Вопросы глупыми не бывают, бывают глупые ответы.
Полагаю, что отсутствие класса фьючерсов на демо связано с тем, что Вы забыли установить входящий остаток по средствам на демо счете фьючерсов. --------------------- Потому и класс нет. ====================== Может в консерватории надо что-то исправить.
nikolz написал: это равносильно вопросу "У вас windows установлена?"
Обычный вопрос, у некоторых установлена ОС Linux.
Вы не ответили на мой вопрос. повторяю: Как Вы объясните чтодля класса акций и валюты не надо (все работает) предложенных вами танцев с бубном, а для фьючерсов надо(класса вообще нет)? ================================================ Вопросы глупыми не бывают, бывают глупые ответы.
Права на Срочный рынок имеются. У Вас папка с программой в Program Files установлена? Если да, перенесите папку с программой на любой диск, например, на диск С и запустите от имени администратора info.exe.
прикольно, У меня каталог квик-демо установлен год назад. За прошедшее время я раз десять пере подключался к демо серверу. ------------------------------- Т е год все работало , а сейчас надо переносить на другой диск и менять права? --------------------------------- Попробуйте объяснит Ваше стремное предложение. ----------------- Почему класс акции и валюты есть а класс фьючерсов исчезает? Как это связано с диском и правами запуска. --------------------- Сейчас запустил - есть лишь класс акций. ================================================ Вопросы глупыми не бывают, бывают глупые ответы. ------------ Примечание: Мой вам совет. Никогда не спрашивайте это: У Вас папка с программой в Program Files установлена? это равносильно вопросу "У вас windiws установлена?"
Log=io.open("D:/test.log","w") --лог файл
tparam={}
function main()
local firm,account,client,x;
while true do
while #tparam>0 do
local t=tparam[1];
local clas=t[1]; local sec=t[2]; w=nil; local z=string.find(clas,'FUT');
for i=0,getNumberOf("client_codes")-1 do
x=getItem("client_codes",i); if x~="" then if string.find(clas,'FUT')==z then client=x; break; end end
end
for i=0,getNumberOf("trade_accounts")-1 do
x=getItem("trade_accounts",i);
if string.find(x.class_codes,clas) and x.status==0 then firm=x.firmid; account=x.trdaccid;break; end
end
Log:write("clas="..clas..",sec="..sec..",firm="..firm..",account="..account..",client="..client.."\n");Log:flush();
local t1=getDepo(client,firm,sec,account);
Log:write("type="..type(t1).."\n");Log:flush();
table.sremove(tparam, 1)
end
sleep(1);
end
end
--------------
function OnInit(pfile) sleep(1000); end
-------------------
function OnParam(c,s) table.sinsert(tparam,{c,s}); end
nikolz написал Вы экспортируйте своим сервером в свою прогу или сервером Excel в таблицу Excel. ------------------ У меня свой сервер для скрипта луа, вроде нет проблем.
А возможно из луа экспортировать таблицу "Купить/Продать", которая в Квике составляется из таблицы "Клиентский портфель" ?
в луа можно получить это : getPortfolioInfo -Функция предназначена для получения значений параметров таблицы «Клиентский портфель» , соответствующих идентификатору участника торгов «firmid» и коду клиента и это getBuySellInfo - Функция предназначена для получения параметров таблицы «Купить/Продать».
Quikos_1 написал: Перезапустил Квик - заработало. Что ж за странность такая.
Ранее уже писал на форуме, что есть изъян в работе сервера QUIK (мое субъективное мнение) -------------------------------- Проблема в том, что если запустите терминал рано до начала сессии, то сервер не все загружает , но позже не проверяет корректность начальных данных. спасает лишь перезагрузка терминала, но обязательно надо подождать, чтобы сервер обнаружил потерю соединения и загрузил все сначала. --------------------------- В таких ситуациях можно получить вчерашнюю дату сервера, пропущенные торговые дни ну и т д ------------------------ Не исключаю, что проблема связана с брокером ( слабой тех поддержкой) Но и в этом случае - -это недоработка разработчиков. Надо учитывать низкую квалификацию не только клиентов но и брокеров. ======================================================================== И – боже вас сохрани – не читайте до обеда сказки про искусственный интеллект у брокеров.
специально для очень занятых разработчиков написал очень простой тест
Код
Log=io.open("D:/test.log","w") --лог файл
------------------------
tparam={}
function main()
local firm,account,client,x;
while true do
while #tparam>0 do
local t=tparam[1]; local clas=t[1]; local sec=t[2]; w=nil;
local z=string.find(clas,'FUT');
for i=0,getNumberOf("client_codes")-1 do
x=getItem("client_codes",i);
if e~="" then local z1=string.find(clas,'FUT');if z1==z2 then client=x; break; end end
end
--------------------
for i=0,getNumberOf("trade_accounts")-1 do
x=getItem("trade_accounts",i);
if string.find(x.class_codes,clas) and x.status==0 then firm=x.firmid; account=x.trdaccid;break; end
end
----------------------------------
Log:write("clas="..clas..",sec="..sec..",firm="..firm..",account="..account..",client="..client.."\n");Log:flush();
local t1=getDepo(client,firm,sec,account);
Log:write("type="..type(t1).."\n");Log:flush();
table.sremove(tparam, 1)
end
sleep(1);
end
end
--------------
function OnInit(pfile) sleep(1000); end
-------------------
function OnParam(c,s) table.sinsert(tparam,{c,s}); end
условия тестирования такие же как указаны выше. В таблице позиций лишь SBER с нулями ---------------- если в тесте закомментировать строку local t1=getDepo(client,firm,sec,account); то работает без проблем ------------------ с активной строкой в лог файле получаем:
nikolz написал Вы экспортируйте своим сервером в свою прогу или сервером Excel в таблицу Excel. ------------------ У меня свой сервер для скрипта луа, вроде нет проблем.
А возможно из луа экспортировать таблицу "Купить/Продать", которая в Квике составляется из таблицы "Клиентский портфель" ?
в луа можно получить это : getPortfolioInfo -Функция предназначена для получения значений параметров таблицы «Клиентский портфель», соответствующих идентификатору участника торгов «firmid» и коду клиента и это getBuySellInfo - Функция предназначена для получения параметров таблицы «Купить/Продать».
Добрый день, тестирую функции на демо сервере. Сделал лишь старт квика. т е ничего не покупал и не продавал. ----------------- поясняю: колбек OnParam принимает сделки:function OnParam(c,s)
Код
for i=1,#tparam do local t=tparam[i]; if t=="table" then if t[1]==14 and t[3]==s then return end end end
local t={14,c,s}; if #tparam==0 then tparam[1]=t; ESet(event); else table.sinsert(tparam,t); end
end
и загружает clas и sec в таблицу tparam
фунция main в цикле принимает значения из tparam и вызывает функцию getDemo
Код
Log:write("clas="..clas..",sec="..sec..",firm="..firm..",account="..account..",client="..client.."\n");Log:flush();
local t1=getDepo(client,firm,sec,account);
Log:write("type="..type(t1).."\n");Log:flush();
1 строка выводит в лог файл все параметры функции getDemo, которая вызывается во 2-ой строке 3 строка - выводим в лог файл тип возвращенного значения t1 ------------------ В результате получаем следующий кирдык: --------------------- Таблица позиций по инструментам имеет вид: т е в таблице есть лишь SBER c нулевыми значениями ================ А теперь смотрим лог файл
Уточните, настроены ли фильтры в таблице "Текущие торги"? Если да, то какие? А так же поясните подробнее, что значит "пропадает экспорт"? Для наглядности желательно со скриншотами.
Добрый вечер!
Фильтров нет (таблица по умолчанию) В таблице 100 фьючерсов, при начале работы все данные по фьючерсам из таблицы экспортируются, а через некоторое время (бывает минуты, бывает 1 - 2 часа) перестают экспортироваться данные по произвольным инструментам. Данные других фьючерсов передаются. Нет никаких ошибок и зависаний. Сегодня обновился до 10,0,1,18 все тоже самое. Невозможно представить скриншот, странно, что Вы не знаете, что в такой ситуации скриншот бесполезен.
К участникам форума У меня только такое поведение терминала, при выводе данных по DDE ?
Вы экспортируйте своим сервером в свою прогу или сервером Excel в таблицу Excel. ------------------ У меня свой сервер для скрипта луа, вроде нет проблем.
serggio написал: И что еще за проблема вставки картинок из буфера в предыдущем сообщении?
А где Вы прочитали, что это показание часов? Написано -"Интервал" А интервал может быть и 60 минут и 600 минут. ------------------- Трудно быть бестолковым.
VargoR написал: dis_not = true and false or true dis_not = false and false or true дают одинаковые значение true? Ведь должны давать разные.если сделать такКод dis_not = true and true or false dis_not = false and true or false
приоритет логических операций определяется их порядком слева на право. -------------------------- В данных примерах первым исполняется AND потом OR true and false ==false true and true==true ----------------- в итоге имеем dis_not = (true and false) or true=(false or true)=true dis_not = (false and false) or true= true --------------------- dis_not = (true and true) or false=true dis_not = (false and true) or false =(false or false)=false ----------------- в результат всех операторов : true true true false ================= Резюме: Автор не знает булевой алгебры. читайте учебники.
nikolz написал: Сессия по фьючерсам начинается с момента клиринга.Т е торги сегодня по фьючерсам начались в пятницу вечером.
Отсортировал по дате, вчерашняя вечерняя сессия выглядит в ТОС как аукцион открытия, но расписание MOEX показывает старт торгов срочного рынка в 9:00 https://www.moex.com/ru/derivatives/ Наверное клиринги вечерней и следующей уиренней/дневной сессии совмещены и проводятся сегодня днём. Других причин включать вчерашние сделки в ТОС за сегодня пока не вижу.
Вы не придумывайте, а ищите в документах биржи. я этот вопрос выяснял лет десят назад. с тех пор ничего не изменилось.