Ввиду отсутствия нормального хелпа буду терроризировать форум :)
1. Для работы с заявками есть функция sendTransaction. И в файле "интерпретатор языка LUA" есть пример заполнения таблицы transaction. Хотелось бы увидеть не только пример, но и список всех полей данный таблицы. Где то же это должно быть описано. Где ?
2.В это же файле - "интерпретатор языка LUA" - в 4 разделе "Структуры данных" есть пункт 4.24 который называется Транзакции и там есть некоторое описание таблицы транзакций.Так вот вопрос - это что за таблица? к функции sendTransaction это отношения не имеет как я понял.
3. Правильно ли я понимаю что функцию main в роботе могу и не использовать, тогда скрипт выполнится 1 раз и всё, далее он будет завершён? А если я без этой функции просто поставлю цикл while что будет тогда, он будет там постоянно крутиться ?
Алексей Орешкин написал: 3. Правильно ли я понимаю что функцию main в роботе могу и не использовать, тогда скрипт выполнится 1 раз и всё, далее он будет завершён? А если я без этой функции просто поставлю цикл while что будет тогда, он будет там постоянно крутиться ?
Алексей Орешкин написал: 1. Для работы с заявками есть функция sendTransaction. И в файле "интерпретатор языка LUA" есть пример заполнения таблицы transaction. Хотелось бы увидеть не только пример, но и список всех полей данный таблицы. Где то же это должно быть описано. Где ?
Добрый день.
Описание полей можете посмотреть в руководстве пользователя QUIK. Раздел 6. Совместная работа с другими приложениями/Импорт транзакций/Формат .tri-файла с параметрами транзакций Примеры тамже.
Алексей Орешкин написал: 2.В это же файле - "интерпретатор языка LUA" - в 4 разделе "Структуры данных" есть пункт 4.24 который называется Транзакции и там есть некоторое описание таблицы транзакций.Так вот вопрос - это что за таблица? к функции sendTransaction это отношения не имеет как я понял.
Нет. Это описание параметров самой транзакции, которую вы подали.
Алексей Орешкин написал: 3. Правильно ли я понимаю что функцию main в роботе могу и не использовать, тогда скрипт выполнится 1 раз и всё, далее он будет завершён?
Алексей Орешкин написал: 1. Для работы с заявками есть функция sendTransaction. И в файле "интерпретатор языка LUA" есть пример заполнения таблицы transaction. Хотелось бы увидеть не только пример, но и список всех полей данный таблицы. Где то же это должно быть описано. Где ?
Добрый день.
Описание полей можете посмотреть в руководстве пользователя QUIK. Раздел 6. Совместная работа с другими приложениями/Импорт транзакций/Формат .tri-файла с параметрами транзакций Примеры тамже.
Вот за это спасибо от всей души. Здесь я бы не догадался искать. Сразу отпала масса вопросов. Но их ещё тем не менее много.
4.совершил свою первую покупку скриптом, заполняя таблицу транзакций использовал и поле комментарий: ["COMMENT"], но где потом увидеть этот комментарий? Ни в таблице сделок ни в таблице заявок я его не нашёл.
4.совершил свою первую покупку скриптом, заполняя таблицу транзакций использовал и поле комментарий: ["COMMENT"], но где потом увидеть этот комментарий? Ни в таблице сделок ни в таблице заявок я его не нашёл.
Здравствуйте,
Поле COMMENT используется для снятия групповых заявок по условию.
Для указания комментария в поле "Комментарий" необходимо прописать его в CLIENT_CODE. После кода клиента, нужно указать знак "/" или "//" (зависит от настроек брокера) а потом уже указывать комментарий.
5.Вывод информации куда нить возможен ? Нашёл только окно сообщений, типа MessageBox, но это не то. Хочу на графике написать в левом верхнем углу "Hello world". как это сделать?
6.Пишу индикатор, но необходимые данные для расчётов нужно получать с разных инструментов, а не только с текущего, не могу понять как обратиться к другому инструменту.
8. Когда я пишу индикатор, то первоначально function OnCalculate(index) вызывается для каждой свечки, а потом, когда все свечки закончатся вызов происходит тогда, когда идут изменения в стакане, я правильно понял?
5.Вывод информации куда нить возможен ? Нашёл только окно сообщений, типа MessageBox, но это не то. Хочу на графике написать в левом верхнем углу "Hello world". как это сделать?
Для того, чтобы выводить текстовую информацию на график необходимо воспользоваться функцией добавления меток на график. Описание в руководстве пользователя Qlua/Функции для работы с метками
Цитата
6.Пишу индикатор, но необходимые данные для расчётов нужно получать с разных инструментов, а не только с текущего, не могу понять как обратиться к другому инструменту.
Какую функцию используете? К другому инструменту можно обратиться при помощи tag – строкового идентификатора графика. Он задается в настройках самого графика и в функции.
Алексей Орешкин написал: 7. Стандартными средствами LUA я как то могу сделать так чтобы робот отправил мне смс или пуш сообщение, или на крайняк написал письмо на мыло?
Такой возможности нет. Т.е при помощи LUA получать уведомления по СМС или пуш нельзя.
8. Когда я пишу индикатор, то первоначально function OnCalculate(index) вызывается для каждой свечки, а потом, когда все свечки закончатся вызов происходит тогда, когда идут изменения в стакане, я правильно понял?
Графики строятся на основании всех сделок, поэтому OnCalculate(index) на изменения в стакане не реагирует.
9. При добавлении индикатора на график, в окне выбора индикатора, снизу есть галка - "Поместить график в новую область". Как при создании индикатора выставить требуемое мне значение ?
Алексей Орешкин написал: 9. При добавлении индикатора на график, в окне выбора индикатора, снизу есть галка - "Поместить график в новую область". Как при создании индикатора выставить требуемое мне значение ?
При добавления Lua индикатора, он автоматически добавится в новую область.
Алексей Орешкин написал: 9. При добавлении индикатора на график, в окне выбора индикатора, снизу есть галка - "Поместить график в новую область". Как при создании индикатора выставить требуемое мне значение ?
При добавления Lua индикатора, он автоматически добавится в новую область.
То есть я немогу сделать так чтобы для индикатора, который я сам написал, эта галочка, по умолчанию, было выключена. К примеру как для индикатора АМА.
10. В индикаторе я могу написать так: О(index) т.е. я получу цены открытия указанной свечи, но когда я пишу T(index) я ожидаю увидеть время начала этой свечи, но не вижу. За время отвечает другая буква ? И где я могу увидеть список этих предопределённых сокращений ?
11. Почему когда я выгружаю индикатор с графика он перед удалением сначала заново пересчитывается, как этого избежать? Вот пример который хорошо показывает что при удалении он запускает OnCalculate заново:
Код
Settings=
{
Name = "1:temp"
}
function Init()
return 1
end
function OnCalculate(index)
message(tostring(index));
return nil
end
Алексей Орешкин написал: 9. При добавлении индикатора на график, в окне выбора индикатора, снизу есть галка - "Поместить график в новую область". Как при создании индикатора выставить требуемое мне значение ?
При добавления Lua индикатора, он автоматически добавится в новую область.
То есть я немогу сделать так чтобы для индикатора, который я сам написал, эта галочка, по умолчанию, было выключена. К примеру как для индикатора АМА.
Алексей Орешкин написал: 11. Почему когда я выгружаю индикатор с графика он перед удалением сначала заново пересчитывается, как этого избежать? Вот пример который хорошо показывает что при удалении он запускает OnCalculate заново:
Код
Settings =
{
Name = "1:temp"
}
function Init ()
return 1
end
function OnCalculate (index)
message (tostring(index));
return nil
end
Алексей, описанная ситуация не воспроизводится. Т.е индикатор удаляется без перерасчета. Как воспроизводили. Добавили индикатор на график, запустился OnCalculate, посчитал, далее удалили индикатор с графика, удалился успешно.
Алексей Орешкин написал: 10. В индикаторе я могу написать так: О(index) т.е. я получу цены открытия указанной свечи, но когда я пишу T(index) я ожидаю увидеть время начала этой свечи, но не вижу. За время отвечает другая буква ? И где я могу увидеть список этих предопределённых сокращений ?
Здравствуйте,
T(index) возвращает таблицу, а Вам необходимо взять значение из этой таблицы и преобразовать в строку. Например так: T(index).hour..T(index).min..T(index).sec
Алексей Орешкин написал: 10. В индикаторе я могу написать так: О(index) т.е. я получу цены открытия указанной свечи, но когда я пишу T(index) я ожидаю увидеть время начала этой свечи, но не вижу. За время отвечает другая буква ? И где я могу увидеть список этих предопределённых сокращений ?
Здравствуйте,
T(index) возвращает таблицу, а Вам необходимо взять значение из этой таблицы и преобразовать в строку. Например так: T(index).hour..T(index).min..T(index).sec
Ну да логично, если время представлено не в виде строки, а в виде структуры (таблицы) то обращаться надо так. Благодарю!
Алексей Орешкин написал: Сделал видео как это проходит у меня.
Добрый день.
Данная ошибка будет исправлена в одной из очередных версий программы. Приносим извинения за причиненные неудобства.
Посмотрите, пожалуйста, смежную проблему с "лишними" вызовами OnCalculate. При редактировании параметров какого-либо индикатора он пересчитывается 3 раза, а все остальные на диаграмме - по 2. При большом количестве ресурсоемких индикаторов работать становится сложно. Версия 7.2.1.5. В версии 6.17 при редактировании параметров индикатора пересчитывался только он один, остальные не трогались. Нельзя ли вернуть прежний порядок?
Алексей Орешкин написал: Сделал видео как это проходит у меня.
Добрый день.
Данная ошибка будет исправлена в одной из очередных версий программы. Приносим извинения за причиненные неудобства.
Посмотрите, пожалуйста, смежную проблему с "лишними" вызовами OnCalculate. При редактировании параметров какого-либо индикатора он пересчитывается 3 раза, а все остальные на диаграмме - по 2. При большом количестве ресурсоемких индикаторов работать становится сложно. Версия 7.2.1.5. В версии 6.17 при редактировании параметров индикатора пересчитывался только он один, остальные не трогались. Нельзя ли вернуть прежний порядок?
Здравствуйте,
Судя по описанию эта такая же проблема, описанная выше. Сейчас и правда OnCalculate работает некорректно. Над устранением ошибки работаем.
12. В роботе для получения данных о свечках использую CreateDataSource().
Можно ли как то получать данные не открывая при этом график ? (ранее мне саппорт говорил что именно этой функцией можно, но у меня без открытия графика не получается)
Если нужная мне бумага отсутствует в текущей таблице торгов, может ли робот в этом случае поместить её в эту таблицу ?
Если я правильно понял то в индикаторе CreateDataSource() использовать нельзя, тогда как мне получить данные по другой бумаге ?
При открытии графика все свечки строятся сразу или возможна ситуация что данные по какой то свече не пришли а через пару тиков появились и эта свеча нарисовалась?
Можно ли как то получать данные не открывая при этом график ? (ранее мне саппорт говорил что именно этой функцией можно, но у меня без открытия графика не получается)
Здравствуйте,
Можно. Здесь должны быть соблюдены условия. Если например нет открытого графика по инструменту, но ранее он открывался, значит Вы не подписаны на изменение по нему данных. В этом случае данные в терминале есть и CreateDataSource сработает, но только для тех данных которые остались в памяти клиентского места. Если в течении сессии график не открывался, то CreateDataSource не сработает и в этом случае нужно заказать данные. Это можно сделать либо открыв окно с графиком, либо вызвав функцию ds:SetEmptyCallbac() один раз.
Цитата
Если нужная мне бумага отсутствует в текущей таблице торгов, может ли робот в этом случае поместить её в эту таблицу ?
Нет.
Цитата
Если я правильно понял то в индикаторе CreateDataSource() использовать нельзя, тогда как мне получить данные по другой бумаге ?
Да, верно функция CreateDataSource недоступна индикаторах. В этом случае используйте getCandlesByIndex, однако здесь уже надо будет открыть график.
Цитата
При открытии графика все свечки строятся сразу или возможна ситуация что данные по какой то свече не пришли а через пару тиков появились и эта свеча нарисовалась?
Должны всегда строиться сразу, согласно таблицы обезличенных сделок.
При открытии графика все свечки строятся сразу или возможна ситуация что данные по какой то свече не пришли а через пару тиков появились и эта свеча нарисовалась?
Должны всегда строиться сразу, согласно таблицы обезличенных сделок.
Вот слово должны немного смущает. Вопрос возник по следующей причине: В мт5 могут быть получены не все данные, но при появлении новых данных, в индикаторе, есть параметр: prev_calculated (рассчитанных баров ранее) который обнуляется и на следующем тике я проведу расчёт по более полной истории. Здесь у меня ничего подобного нет, поэтому и решил уточнить. В таком случае, если мне нужно в одном индикаторе для расчёта получать данные по разным бумагам, синхронизировав данные единожды, я больше к этому вопросы могу не возвращаться ? или с синхронизацией есть какие-то другие подводные камни ?
При открытии графика все свечки строятся сразу или возможна ситуация что данные по какой то свече не пришли а через пару тиков появились и эта свеча нарисовалась?
Должны всегда строиться сразу, согласно таблицы обезличенных сделок.
Вот слово должны немного смущает. Вопрос возник по следующей причине: В мт5 могут быть получены не все данные, но при появлении новых данных, в индикаторе, есть параметр: prev_calculated (рассчитанных баров ранее) который обнуляется и на следующем тике я проведу расчёт по более полной истории. Здесь у меня ничего подобного нет, поэтому и решил уточнить. В таком случае, если мне нужно в одном индикаторе для расчёта получать данные по разным бумагам, синхронизировав данные единожды, я больше к этому вопросы могу не возвращаться ? или с синхронизацией есть какие-то другие подводные камни ?
Это не так просто как кажется, так как могут быть интервалы в которых нет сделок в одном из инструментов.
При открытии графика все свечки строятся сразу или возможна ситуация что данные по какой то свече не пришли а через пару тиков появились и эта свеча нарисовалась?
Должны всегда строиться сразу, согласно таблицы обезличенных сделок.
Вот слово должны немного смущает. Вопрос возник по следующей причине: В мт5 могут быть получены не все данные, но при появлении новых данных, в индикаторе, есть параметр: prev_calculated (рассчитанных баров ранее) который обнуляется и на следующем тике я проведу расчёт по более полной истории. Здесь у меня ничего подобного нет, поэтому и решил уточнить. В таком случае, если мне нужно в одном индикаторе для расчёта получать данные по разным бумагам, синхронизировав данные единожды, я больше к этому вопросы могу не возвращаться ? или с синхронизацией есть какие-то другие подводные камни ?
Здравствуйте. В последнее время с такими проблемами не обращались. Как только обезличенные сделки поступают в таблицу, то на графике сразу отображается информация.
дополню предыдущий ответ. Полагаю, что такая ситуация не возникает, так как свечи рассчитывает сервер. Поэтому терминал принимает их пакетом . Пропуск внутри пакета невозможен, так как сервер рассчитал пакет свеча за свечой.
Алексей Орешкин написал: 7. Стандартными средствами LUA я как то могу сделать так чтобы робот отправил мне смс или пуш сообщение, или на крайняк написал письмо на мыло?
Добрый день. Пример отправки письма с использованием функции PrintDbgStr() можно посмотреть в расширенной документации по QLua (см. документ 'Использование Lua в Рабочем месте QUIK.pdf' поставляемый с терминалом версии 7.4.0). По аналогии можно реализовать СМС и пуш.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
Алексей Орешкин написал: 7. Стандартными средствами LUA я как то могу сделать так чтобы робот отправил мне смс или пуш сообщение, или на крайняк написал письмо на мыло?
Добрый день. Пример отправки письма с использованием функции PrintDbgStr() можно посмотреть в расширенной документации по QLua (см. документ 'Использование Lua в Рабочем месте QUIK.pdf' поставляемый с терминалом версии 7.4.0). По аналогии можно реализовать СМС и пуш.
использование PrintDbgStr тут в какую степь?
Всем, кто интересуется темой - она уже обсуждалась и достаточно внятно...:
тот самый написал: использование PrintDbgStr тут в какую степь?
Добрый день. В документе показан пример использования функции PrintDbgStr(), как вариант можно использовать и для отправки писем или передачи сообщений в другое приложение.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
Здравствуйте. Чтобы не создавать новых тем, задам вопрос здесь. Есть индикатор на qlua. Можно ли как-то сделать, чтобы при добавлении его на график, он не рассчитывался для всех свечей (их может быть несколько тысяч)? А, например, указать количество баров для расчета.
вы можете в его расчете поставить проверку на номер свечи, на которой он вызывается. Общее количество свечей в графике можно определить функцией Size() а номер текущей свечи передается в качестве параметра при вызове OnCalculate простым условием:
if index > Size() -100 then ..... end
вы заставите индикатор выводиться только для 100 последних свечей
Приветствую коллеги. Столкнулся вот с какой проблемой: Когда в скрипте Lua в операторах message и PrintDbgStr пишу русский текст, то выдает иероглифы. Пробовал перезагружаться и еще на другом компьютере, но это не помогло. С латынью проблем нет. В индикаторах эти операторы выводят русский текст нормально. Может кто знает, как заставить скрипт говорить по-русски?
убедитесь, что кодировка файла win1251. у меня было такое, что файл был в какой-то другой кодировке и часть текста там нормально читалась, а другая нет.
Вот это за пределами моего понимания . Как же убедится, что кодировка win1251? Скрипт был написан в редакторе Notepade. Он что, кодирует по другому, чем стандартная кодировка Windows?
Алексей Орешкин написал: Сделал видео как это проходит у меня.
Добрый день.
Данная ошибка будет исправлена в одной из очередных версий программы. Приносим извинения за причиненные неудобства.
Посмотрите, пожалуйста, смежную проблему с "лишними" вызовами OnCalculate. При редактировании параметров какого-либо индикатора он пересчитывается 3 раза, а все остальные на диаграмме - по 2. При большом количестве ресурсоемких индикаторов работать становится сложно. Версия 7.2.1.5. В версии 6.17 при редактировании параметров индикатора пересчитывался только он один, остальные не трогались. Нельзя ли вернуть прежний порядок?
Здравствуйте,
Судя по описанию эта такая же проблема, описанная выше. Сейчас и правда OnCalculate работает некорректно. Над устранением ошибки работаем.
В версии 7.5 действительно стало в 2 раза легче, теперь при редактировании параметров какого-либо индикатора все остальные индикаторы на диаграмме пересчитываются не 2 раза, а только 1. Повторяю свой вопрос: "В версии 6.17 при редактировании параметров индикатора пересчитывался только он один, остальные не трогались. Нельзя ли вернуть прежний порядок?"
Виктор Столетов написал: Как же убедится, что кодировка win1251?
я тоже пользуюсь notepad++. Иногда при открытии даже ранее редактируемого в нем скрипта, он почему-то считает, что у него какая-то другая кодировка. Чтобы быть уверенным, идете в меню "Кодировки => кодировки => кирилица => windwos-1251. После этого проверяете, что в тексте скрипта все по русски. Если нет, придется исправить на русский текст.
Sergey Denegin написал: я тоже пользуюсь notepad++. Иногда при открытии даже ранее редактируемого в нем скрипта, он почему-то считает, что у него какая-то другая кодировка. Чтобы быть уверенным, идете в меню "Кодировки => кодировки => кирилица => windwos-1251. После этого проверяете, что в тексте скрипта все по русски. Если нет, придется исправить на русский текст.
Спасибо, Сергей. Все получилось. Когда из Notepad++ выбрал кодировку win1251, то действительно все русские слова в тексте скрипта стали иероглифами. После того, как перебил их снова на русский, стал выводиться нормальный русский текст.
Алексей Орешкин написал: Сделал видео как это проходит у меня.
Добрый день.
Данная ошибка будет исправлена в одной из очередных версий программы. Приносим извинения за причиненные неудобства.
Посмотрите, пожалуйста, смежную проблему с "лишними" вызовами OnCalculate. При редактировании параметров какого-либо индикатора он пересчитывается 3 раза, а все остальные на диаграмме - по 2. При большом количестве ресурсоемких индикаторов работать становится сложно. Версия 7.2.1.5. В версии 6.17 при редактировании параметров индикатора пересчитывался только он один, остальные не трогались. Нельзя ли вернуть прежний порядок?
Здравствуйте,
Судя по описанию эта такая же проблема, описанная выше. Сейчас и правда OnCalculate работает некорректно. Над устранением ошибки работаем.
В версии 7.5 действительно стало в 2 раза легче, теперь при редактировании параметров какого-либо индикатора все остальные индикаторы на диаграмме пересчитываются не 2 раза, а только 1. Повторяю свой вопрос: "В версии 6.17 при редактировании параметров индикатора пересчитывался только он один, остальные не трогались. Нельзя ли вернуть прежний порядок?"
Здравствуйте!
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.