VNG_nemo написал: Я выше не зря указал две функции без передачи идентификатора в которые НЕВОЗМОЖНО получить доступ к данным свечей. Если Вы мне укажете такой механизм без прописывания руками идентификатора графика в коде индикатора при смене инструмента (графика свечей), буду очень благодарен.
Вместо getNumCandles() есть функция Size() вызвав которую в индикаторе, Вы получите количество свечек. и вместо getCandlesByIndex() в индикаторе надо использовать функции O, H, L, C, V, T которые вернут данные о свечке по ее индексу на которую наложен индикатор. Подробней в документации QLUA.chm -Индикаторы технического анализа --Функции и глобальные переменные скрипта индикатора ---Функции для доступа к источнику данных
Цитата
VNG_nemo написал: Прошу пояснить что есть "демоконтур" или пнуть, куда обратиться за разъяснениями.
s_mike@rambler.ru написал: не понятно зачем из индикатора может потребоваться Идентификатор графика на который этот индикатор накладывается, ведь в индикаторе Вы и так можете получить все данные без Идентификатора. Просьба пояснить этот момент.
что же тут непонятного? Чтобы метки ставить на самого себя без бубна с назначениями идентификатора и передачей идентификатора в параметры.
замечу в скобках, что это уже давно "зарегистрировано", а тут вот здрасьте, "просьба пояснить"
Михаил, позвольте но в тексте автора нет ничего про метки.
VNG_nemo написал: На вкладке "дополнительно" окна редактирования инструмента в окно идентификатора автоматически прописывать название окна графика для инструмента верхнего слоя,
Поле Идентификатор уникально для каждого графика, а не окна с графиком. То что Вы в одном окне используете один график не значит что остальные тоже так делают. В связи с чем в таком виде мы не можем зарегистрировать пожелание. Т.е. требуется соблюдение уникальности для каждого отдельного графика в каждом отдельном окне. Тем более не понятно зачем из индикатора может потребоваться Идентификатор графика на который этот индикатор накладывается, ведь в индикаторе Вы и так можете получить все данные без Идентификатора. Просьба пояснить этот момент.
Цитата
VNG_nemo написал: 2. Создать в интерфейсе кнопку с программным кодом, эмулирующим выдачу тика цены для любого инструмента. Это нужно для отладки программного кода индикаторов без подключения к серверу. Особенно это актуально в часы отсутствия торгов.
К сожалению вынуждены отказать т.к. для таких целей существует демо контур.
s_mike@rambler.ru написал: Что посоветуете кроме метода тыка из луа?
В документации см -Раздел 6. Совместная работа с другими приложениями --Импорт транзакций ---Формат .tri-файла с параметрами транзакций ----Примеры строк, которые могут содержаться в файле Пример для "Стоп-лимит по исполнению заявки" "Тэйк-профит по исполнению заявки" и "Тэйк-профит и стоп-лимит по исполнению заявки"
Анатолий, 1) Код не должен ничего делать (т.е. гонять в main пустой цикл) пока нет коннекта к серверу (при этом проверки только на коннект недостаточно, см. ниже), тогда и ошибок не будет. 2) isConnected проверяет коннект к серверу QUIK, а не рабочее время биржи. Это очень разные вещи. Если сервер QUIK работает далеко не факт что работает биржа. Правильней всего проверять: коннект к серверу + время проведения торгов с проверкой на выходные + проверять статус сессии в таблице текущих торгов.
Что значит через рабочий стол пользователя? У Вас терминал на рабочем столе установлен?
Цитата
VNG_nemo написал: Id метки возвращается, самой метки на чарте нет.
Похожая проблема уже чинилась, проверьте версию терминала, рекомендуем использовать 7.19 или выше. Если с версией всё в порядке, проверьте внимательней все параметры метки. Проблема не воспроизводится, значит явно где-то просто ошиблись.
В документации см -Раздел 6. Совместная работа с другими приложениями --Импорт транзакций ---Формат .tri-файла с параметрами транзакций параметр STOP_ORDER_KIND: «ACTIVATED_BY_ORDER_SIMPLE_STOP_ORDER» – стоп-лимит по исполнению заявки, «ACTIVATED_BY_ORDER_TAKE_PROFIT_STOP_ORDER» – тэйк-профит по исполнению заявки, «ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER» - тэйк-профит и стоп-лимит по исполнению заявки.
VNG_nemo написал: В коде ниже если пытаюсь глобальный массив Label_Id["spl"] проиндексировать индексами "splace" и "fplace", то он тоже возвращает nil. В чем косяк здесь?
Проведите дополнительную диагностику, проверьте что возвращает AddLabel
VNG_nemo написал: Путем долгих мытарств выяснил, что когда работаешь не под админскими правами и файл метки расположен в каталоге индикатора (т.е обращение идет через пользовательский рабочий стол), то функция AddLabel() возвращает пустой путь.
В Lua пути к папкам надо использовать через \\ вместо \
Дмитрий написал: В терминале на графике через контекстное меню Нарисовать-Прямоугольник. Рисуется прямоугольник у которого имеются все параметры для реализации нужного мне функционала. После отрисовки, где хранятся данные данного прямоугольника ? Шаблон ? Можно где-то их посмотреть ? А как следствие и править. Добавлять данные непосредственно в шаблон ?
ответ по вопросу уже был дан
Цитата
Sergey Gorokhov написал: Через Lua рисовать на графиках возможно только через метки, см функцию AddLabel
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Melchin, Возникла путаница в сообщениях. Одновременно, в один день, от Вас и от еще одного пользователя было получено обращение по одной и той же теме. Одно на форуме, второе на почте. По ошибке Вам не ответили на форуме, сочтя что ответ уже был по почте.
Melchin написал: А помимо возвращаемого сообщения, возвращаемый результат функции будет исправлен с TRANS2QUIK_QUIK_DISCONNECTED на TRANS2QUIK_QUIK_NOT_CONNECTED?
Это другая проблема (обратите внимание что в данной ветке форума было зарегистрировано две проблемы а не одна). По этой ошибке, Вам был отправлен ответ почтой, цитата:
Цитата
Добрый день,
На самом деле в документации все описано правильно, статус TRANS2QUIK_QUIK_DISCONNECTED возвращаться не должен, вместо статуса TRANS2QUIK_QUIK_DISCONNECTED должен всегда возвращаться статус TRANS2QUIK_QUIK_NOT_CONNECTED. Данная ошибка будет исправлена в одной из очередных версий ПО.
Melchin написал: К сожалению, непонятно в чём суть ответа.
Вы не могли бы уточнить, где можно прочитать текст с описанием ошибки, который будет исправлен, в документации?
Пока документация не исправлена. Исправление будет следующим "QUIK is not connected to QUIK" -> "The QUIK terminal is not connected to the QUIK server" "Already is connected to QUIK" -> "The Trans2QUIK.dll is already connected to the QUIK terminal"
Здравствуйте, Индикатор работает только с тем таймфреймом который выбран на графике куда добавлен сам индикатор. Единственный вариант, открыть еще один график с нужным таймфреймом и обратиться к нему через getCandlesByIndex
Андрей, К сожалению в документации неверно сказано, по сделке нельзя узнать флаги заявки. Нужно из сделки взять номер заявки и по таблице заявок уже смотреть флаги. Документацию обязательно поправим, приносим извинения.
Андрей, Здравствуйте, К сожалению у нас нет возможности переписывать инструкцию при каждой смене версии ubuntu или wine Да это и не нужно т.к. от смены номера версии сама инструкция не должна сильно измениться. Ставьте последние версии и пробуйте по инструкции, если возникнут проблемы мы поможем.
investor investor написал: олучать данные по большому количеству стаканов 300-500 инструментов
Для начала надо получить одобрение от брокера, т.к. по умолчанию пользователи могут заказывать только 200 стаканов.
Цитата
investor investor написал: 1) Получать данные по стаканам в LUA и отдавать данные по изменившимся инструментам в таблицу Квик оттуда через DDE во вне (без изменений данных)
LUA таблицы нельзя экспортировать по DDE, а QPILE таблицы можно. Собственно а что мешает зразу из LUA отдавать данные во вне? так проще и надежней, лишние прокладки тут не к чему.
Цитата
investor investor написал: 2) Делать тоже самое но с обработкой (агрегированием данных стакана) в Lua и уже потом выводить во вне
Совершенно не понятно что Вы хотите агрегировать и зачем.
Цитата
investor investor написал: 1) не начнет ли Квик тормозить, сразу после того как я закажу данные стаканов по 300-ам инструментам ( железо современное, но в хелпе написано, что через интерфейс Квик максимум 200 стаканов можно открыть)
На этот вопрос ответить может только Вы, поставив соответствующий эксперимент.
Цитата
investor investor написал: 2) Из Lua данные отдавать во вне можно только возвращая их в таблицы Квик и оттуда через DDE(ODBC)? или можно как-то напрямую,(как)?
Через текстовые файлы, через ODBC посредством сторонней библиотеки luasql.dll, сразу в Вашу DLL, и много чего еще. Стоит поискать в интернете удобный Вам способ.
Цитата
investor investor написал: 3) Параметры из вне в Lua передают через текстовые файлы? или есть способ лучше?
А чем текстовые файлы плохи? Или если надо GUI, можно через сторонние библиотеки (например тот же vcl.dll) создать окно с настройками. некоторые делают интерфейс встроенными в QLUA средствами (см в документации "Функции для работы с таблицами Рабочего места QUIK") можно задавать параметры через базу SQL (та же luasql.dll) В зависимости от задач, QLUA может считывать данные из терминала. Например можно нарисовать на графике метку, а QLUA ,будет ее считывать и при ее изменении что то делать.
Иван Ру написал: то, что рекурсия в данном случае находится не в коллбэке
Вы категорически не правы, Вам уже несколько человек об этом сказали. Вызывая функцию в колбеке, Вы вызываете ее в колбеке, это же очевидно разве нет?
Цитата
Иван Ру написал: function OnInit() theDate = 0 -- инициируем переменную, которая будет содержать текущую дату InitBeforSession = false -- инициация перед началом сессии InitEveryDay () -- ежедневная инициализация end
Уберите InitEveryDay из OnInit и не будет зависать
Иван Ру, Здравствуйте, А визуально значение в таблице торгов изменилось? Если нет, то значит изменение не попало на сервер брокера и разбираться надо брокеру с биржей.
Иван Ру написал: Правильно ли я понимаю, что в таком случае рекурсия в принципе недопустима ни в одной из функций скрипта Lua?
Во первых, как уже было сказано, любой бесконечный или долгий цикл, в том числе и рекурсия, а не только рекурсия. Во вторых, как уже было сказано, нежелательно их использовать только в колбеках, а значит, если та же функция вызывается в main такой проблемы не будет.
Цитата
Иван Ру написал: Коллеги, можете ли поделиться примерами ежедневной реинициализации скрипта?
Все зависит от того что для Вас "реинициализация", и вообще почему выбран именно OnInit, а не скажем OnConnected. И почему "if dDT.year == nil", а не функция isConnected() И что мешает все тоже самое сделать в цикле "while stopMain do", а в колбеках оставить только переменные?
Функции обратного вызова обрабатываются в основном потоке терминала QUIK. Поэтому пользователю необходимо оптимизировать время исполнения таких функций.
В связи с чем любой бесконечный или долгий цикл в любом колбеке может подвесить терминал. Надо перенести проверку в функцию main
Дмитрий написал: А вот эта периодичность обновления стакана играет какую то роль?
Даже из названия секции видно что этот параметр относится к Excel, т.е. к выводу по DDE К QPILE и обновлению данных в терминале он не имеет никакого отношения.
Дмитрий написал: а он получается не всегда актуальный
Категорически не верно. Стакан как раз таки актуальный. Технически поток стаканов имеет куда больший приоритет по сравнению с остальными потоками маркет даты. И как уже было сказано ничего Вам не мешает зная цену и объем Вашей заявки (а Вы их знаете) определить строку стакана в которой она находится. Даже до появления самой заявки в таблице заявок Вы уже знаете где Ваша заявка появится в стакане (если конечно речь не про рыночные заявки), так как Вам известна цена, объем, и факт успешной регистрации заявки на бирже по ответу на транзакцию. Если же говорить про рыночные заявки, то знаете по какой цене она исполнится при наличии встречного предложения. В итоге, ничего Вам не мешает реализовать Ваш алгоритм вообще не обращаясь к таблице заявок. Только стакан и данные по Вашей же транзакции. Других вариантов в для решения не видится.
Дмитрий написал: А вот по поводу ответа на транзакцию, то в том то всё и дело что при положительном ответе, заявка не всегда ещё отображается в стакане
Да, есть такие ситуации, но ведь тогда своя покупка и своя продажа тоже не отобразятся. Например если заявка была рыночной, тогда она моментально исполняется (или моментально снимается). Тогда терминал получит уже исполненную (или снятую) заявку и не станет отображать ее в стакане.
Цитата
Дмитрий написал: В общем понятно, что простого решения нет
Есть, надо просто хорошо подумать, зачем Вам стакан. Ведь одна и та-же цель может решаться разными способами.
нет, Вы снимаете НЕ стоп заявки, а обычные биржевые заявки. orders - это НЕ таблица стоп заявок. KILL_ORDER - НЕ снимает стоп заявки и никогда не снимал, он снимает только обычные заявки. Следовательно Вы снимаете НЕ стоп заявки, а обычные биржевые заявки.
Цитата
Андрей написал: или точнее сказать лимитированные заявки, которые не ушли ещё на сервер, они находятся у брокера и не исполнены.
таких заявок вообще не бывает. Есть биржевые заявки, которые УЖЕ на бирже и судя по выше сказанному о них и идет речь. А есть стоп-заявки, которые действительно находятся на сервере брокера, но они в таблице stop_orders и для их снятия нужна транзакция KILL_STOP_ORDER
В связи с этим Вы скорей всего снимаете не то что Вам надо снять. Проверьте еще раз внимательней, что Вы снимаете в терминале и что пытаетесь снять в коде скрипта.
Андрей написал: Написал простого робота, который покупает по рыночной стоимости
Все просто, рыночные заявки на то и рыночные что они либо сразу исполняются, либо сразу снимаются. На то они и рыночные. Следовательно снимать просто нечего. Нельзя снять уже снятую заявку. Нельзя снять уже исполненную заявку.
Вот именно и в биржевом интерфейсе нет таких параметров своя продажа и своя покупка. Как уже было сказано и еще раз повторим, их подставляет сам терминал QUIK.
Цитата
Дмитрий написал: Может ли так получится, что в стакане уже будет присутствовать моя заявка в виде котировки по определённой цене (при отсутствии параметра своя продажа/покупка), а в таблице заявок ещё не успеет отобразится эта заявка?
Стаканы транслируются отдельным потоком, который никак не синхронизируется с потоком заявок. Так что да, такая ситуация возможна.
Цитата
Дмитрий написал: То в этом случае, по каким параметрам мне засечь, что это именно моя заявка в стакане?
Стаканы это обезличенная информация, так что именно по стакану никак. Да можно засечь изменение цены и объема на такой же как в Вашей заявке, но это не кажется надежным. А что мешает проверить ответ на транзакцию? Если ответ положительный то всяко заявка выставлена и появится в стакане.
Stanislav Tvorogov написал: По данным параметрам в таблицу заявок транслируются точно такие же значения, что и в таблице котировок. Несмотря на то, что данные параметры нельзя получить из стакана посредством QPILE, при выставлении заявок они там также будут присутствовать.
Поправлю коллегу. Это не "По данным параметрам в таблицу заявок транслируются" а с точностью на оборот. В таблицу котировок своя продажа и своя покупка транслируется на основе данных из таблицы заявок. Т.е. это не биржевой и даже не серверный параметр, а параметр самого терминала QUIK. В связи с чем, нет разницы от куда брать данные, из стакана или таблицы заявок. А через QPILE их возможно получить только из таблицы заявок