Egor Zaytsev написал: Мы таких рекомендаций не давали.
Егор, как же так? Именно Вы мне на почту отвечали 08.11.16.
Цитата
Подскажите, нужно ли выносить код индикатора в папку Include? В смысле, зависит от этого скорость работы терминала и нагрузка на него. ------------------------------------------------ Egor Zaytsev: Да нужно, на скорость не зависит.
Просто я тогда не уточнил, почему нужно. Вот сейчас решил поинтересоваться.
Скорее всего ответ был дан в рамках какого-то готового индикатора, который так устроен. но в целом это прекрасно: одновременно общать на форуме и в почте ожидая, что собеседники легко сохраняют контекст таких облачных распределенных бесед
swerg написал: Скорее всего ответ был дан в рамках какого-то готового индикатора, который так устроен. но в целом это прекрасно: одновременно общать на форуме и в почте ожидая, что собеседники легко сохраняют контекст таких облачных распределенных бесед
1. Речь не шла о каком-то конкретном индикаторе, поэтому не имеет значения контекст, способ связи и время. 2. Даже не знаю, как бы я смог без Вашего мнения по данному вопросу. Спасибо, что не пропустили моё сообщение.
Русский, Никаких "нужно". Можно - да, но никто не заставляет. На Ваш вкус. Какой-либо практической выгоды, кроме удобства разделения просто функций, от самих индикаторов, в этом месте нет. Других "скрытых" смыслов, рекомендуем даже не начинать искать, ибо их просто нет.
Sergey Gorokhov написал: Какой-либо практической выгоды, кроме удобства разделения просто функций, от самих индикаторов, в этом месте нет.
Благодарю. Всё понятно. А то я колупаюсь с этим разделением. Где-то ещё попадалось, что при запуске терминал сканирует только папку LuaIndicators, поэтому сложные формулы лучше выносить в Include. Вот я и поинтересовался.
Подскажите пожалуйста, я вывожу значение RSI в созданною таблицу, значение выводится и все бы хорошо, но значение выводится с 9 знаками после запятой, не очень удобно для восприятия, подскажите, как можно сократить до 1 знака после запятой ?
Optimus1 Optimus1 написал: Подскажите пожалуйста, я вывожу значение RSI в созданною таблицу, значение выводится и все бы хорошо, но значение выводится с 9 знаками после запятой, не очень удобно для восприятия, подскажите, как можно сократить до 1 знака после запятой ?
Код
local rsiFormatted = string.format("RSI=%.1f", rsiValue)
Никита Лапков написал: Добрый день! Подскажите как в Lua написать код для вывода уже совершённых сделок по определённому инструменту, например Сбербанк? Спасибо!
Добрый день! Почему в стакан не выставляются заявки по продаже ОФЗ? Не вижу ошибку в коде. ACCOUNT=D01+; CLIENT_CODE=XXXX; TYPE=L; TRANS_ID=1; CLASSCODE=TQOB; SECCODE=SU26204RMFS; ACTION=NEW_ORDER; OPERATION=S; PRICE=99.95; QUANTITY=1;
Яна написал: Добрый день! Почему в стакан не выставляются заявки по продаже ОФЗ? Не вижу ошибку в коде. ACCOUNT=D01+; CLIENT_CODE=XXXX; TYPE=L; TRANS_ID=1; CLASSCODE=TQOB; SECCODE=SU26204RMFS; ACTION=NEW_ORDER; OPERATION=S; PRICE=99.95; QUANTITY=1;
Добрый день.
- откройте таблицу сообщений Создать окно - Таблица сообщений и посмотрите, возможно есть ошибки при выставлении транзакции. если ошибок нет, то - зайдите в настройки стакана и установите галочку "Выделять свои заявки" - также заявка может не отображаться, если стакан переполнен.
Яна написал: Добрый день! Почему в стакан не выставляются заявки по продаже ОФЗ? Не вижу ошибку в коде. ACCOUNT=D01+; CLIENT_CODE=XXXX; TYPE=L; TRANS_ID=1; CLASSCODE=TQOB; SECCODE=SU26204RMFS; ACTION=NEW_ORDER; OPERATION=S; PRICE=99.95; QUANTITY=1;
дополнительно проверьте отображение заявки в таблице заявок.
Борис Гудылин, Добрый день, Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, что реализация пожелания признана потенциально целесообразной. Если по результатам дальнейшего анализа, включающего юридические аспекты, анализ на непротиворечивость с общей политикой компании, никаких возражений не возникнет, мы постараемся включить Ваше пожелание в план доработок при выпуске одной из следующих версий нашего ПО.
Добрый день. Вот сделал свой первый индикатор на Lua. Проблема в том, что при добавлении индикатора на график, Quik надолго зависает (может, на 2-3 мин.). Это вполне ожидаемо, т.к. много вычислений. Можно ограничить расчет индикатора только последними 200 барами? Что для этого нужно?
Арсений, Здравствуйте, Есть целая куча причин. Существуют разные ограничения со стороны биржи. Например нельзя указывать слишком маленькую или слишком большую цену. Или слишком часто подавать транзакции или еще много чего. Это описано биржевых правилах торгов. Еще Ваш брокер может настроить какие-нибудь ограничения. Это следует уточнить у брокера. В связи с чем, всегда лучше всего сообщить текст ошибки которая возникает при неудачном выставлении.
Если у меня среди переменных среды нет переменных LUA_PATH, LUA_CPATH, то в квике package.path, package.cpath имеют одни значения, привязанные к папке Квика. Если эти переменные среды явно задать руками, то выглядит так, что они полностью переписывают квиковские на свои.
У меня вопрос. Т.е. квик не дописывает в package.path, package.cpath свои пути при запуске? Это вообще важно для работы квика, если в package.path, package.cpath нет его путей? Словом, что мне нужно делать, чтобы все правильно работало и не возникло потом каких-то проблем с работой квика?
Арсений написал: Если у меня среди переменных среды нет переменных LUA_PATH, LUA_CPATH, то в квике package.path, package.cpath имеют одни значения, привязанные к папке Квика. Если эти переменные среды явно задать руками, то выглядит так, что они полностью переписывают квиковские на свои.
У меня вопрос. Т.е. квик не дописывает в package.path, package.cpath свои пути при запуске? Это вообще важно для работы квика, если в package.path, package.cpath нет его путей? Словом, что мне нужно делать, чтобы все правильно работало и не возникло потом каких-то проблем с работой квика?
Sergey Gorokhov написал: а что мешает дописать, а не переписать значения?
Удобство. Т.е. в переменные типа LUA_PATH у меня вписаны, по сути, пути к дополнительным модулям из интернета, они не в квиковской папке лежат. За счет этого у меня нет проблемы с require. Единственное, что приходится прописывать в скриптах через package.path - пути к моим собственным файлам с функциями
Но вопрос в том, что ... Эти package.path\cpath сам Квик использует для чего-нибудь в своей работе? Или они в таком дефолтном виде существуют только для создателей скриптов и их удобства? Если второе, то не о чем беспокоиться. Если первое, то их нельзя "терять" и надо вписывать тоже
Еще кстати одно неудобство возникает при
Код
package.path=package.path.."smth"
Пути неконтролируемо разрастаются от регулярных добавлений одних и тех же кусков при многократном запуске скриптов. Нужно дополнительно это чекать
Здравствуйте.А если я хочу сделать так чтобы можно было менять количество баров для расчета в самом терминале?Это можно вообще реализовать?Просто я до этого изучал только mql4 для mt4 и там можно было так прописать
Здравствуйте, К сожалению, Вы не уточнили речь про индикаторы или про обычные lua скрипты. Если речь про индикаторы, то в таблице Settings можно добавлять свои собственные параметры. Если речь про обычные скрипты, то есть несколько вариантов: 1) сделать для скрипта ini файл с настройками. 2) сделать через скрипт таблицу в терминале, и установить на таблицу колбек SetTableNotificationCallback в колбеке ловить все изменения которые происходят в таблице. таким образом можно реализовать отдельную таблицу в которой будут нужные настройки.
Здравствуйте, К сожалению, Вы не уточнили речь про индикаторы или про обычные lua скрипты. Если речь про индикаторы, то в таблице Settings можно добавлять свои собственные параметры. Если речь про обычные скрипты, то есть несколько вариантов: 1) сделать для скрипта ini файл с настройками. 2) сделать через скрипт таблицу в терминале, и установить на таблицу колбек SetTableNotificationCallback в колбеке ловить все изменения которые происходят в таблице. таким образом можно реализовать отдельную таблицу в которой будут нужные настройки.
Речь про индикаторы.Я правильно понимаю что можно написать так :
Settings = {
Name = "имя индикатора",
Size()=300; line = {.... } }
У меня в функции будет присваиваться переменной количество баров .Т.е. примерно следующее
function main () ........ number Li_32 = Size; for (number Li_40 = Li_32; ..............) ........................ end
Settings =
{
Name = "имя индикатора" ,
MY_LOVE_PARAMETER = 300,
line = { .. ..
}
}
function OnCalculate(indx)
if indx < Size () - Settings.MY_LOVE_PARAMETER then return end
do_calc(indx)
end
Type = TYPE_TRIANGLE_UP, т.е. у нас на графике будет показываться стрелка вверх.Можно ли в квике сделать чтобы вместо стрелки или линий отображался другой символ например крестик или галочка?
1) Обнаружил случайно, что на демо по некоторым тикерам getParamEx дает инфу, хотя в ТТП их нет. Проверил сегодня на рабочей - так же. Вопрос скорее в целом, хочется понимать - почему такое возможно? И как влияет удаление инструмента из таблицы на дальнейшее получение инфы по нему?
2) На форуме встречается фраза "перезаказ данных". Это имеется ввиду "Система-Заказ данных-Перезаказать данные" или еще что-то скриптовое?
3) Сделки в ТОС по тикеру всегда поступают последовательно от первой в сессии и упорядоченно по времени их совершения или необязательно? При условии, что не было потерь при передаче данных.
4) Если в процессе передачи данных от брокера случился сбой интернета и часть сделок до моей ТОС не дошла - это как-то обнаружится терминалом в процессе работы или за этим надо следить самому?
5) Возникла реальная ситуация на рабочем квике. Где-то в 23:30 по Москве решил, что в ТОС мне нужно добавить еще пару колонок параметров и добавить с пару десятков инструментов. Сначала сделал это в одной таблице, но при выгрузке в эксел превысилось максимальное допустимое число строк в файле. Ок, разбил на несколько таблиц. В общем, пока это все делалось, аккурат время зашло за 23:50. Тем не менее, количество строк в таблицах не увелчивалось уже и я начал выгрузку данных в файлы. В итоге оказалось, что в примерно половине тикеров в одной из колонок не прогрузились данные полностью - часть полей оказались нулевыми. К слову, в последующие дни таких проблем не возникало. У меня вопрос - как бороться с такими ситуациями? Т.е. сделки, в смысле их числа = количество строк в ТОС оказалось корректным - именно столько сделок и было на момент окончания сессии, но по некоторым сделкам данные не загрузились полностью. Могло ли это быть связано с временем, когда я это делал? Мол если бы это было в разгар сессии, то данные догрузились бы. Или данные по сделке всегда подгружаются целиком и не могут приходить частями? И все же что делать в такой ситуации? Перезаказывать данные или заново делать CreateDataSource в скрипте?
6) Если я правильно понял(поправьте, если нет) данные о торгах, которые приходят в квик, можно разделить на две части: данные за текующую торговую сессию, которые используются соответствующими таблицами, и данные за гораздо больший период, которые используют графики. И последние, в отличие от первых, сохраняются локально на комп. Перезаказ данных из меню позволяет удалять полностью и те, и те.
7) Последовательный вызов CreateDataSource (с колбеком) с одними и теми же параметрами без промежуточных Close() приводит к увеличению числа объектов или некий объект создается один раз, а множатся только ссылки?
8) Нетиковый вызов CreateDataSource с колбеком как-нибудь повлияет на ТОС?
9) Я читал на форуме уже немало про асинхронность (хотя не все, вероятно), но все же, встретились противоречивые комментарии. Уточню еще раз. ТОС, ТТП и CreateDataSource живут в своих независимых потоках данных каждый? Или все-таки какие-то пересечения есть? Не очень понятен еще такой момент, как связаны getNumberOf("all_trades") и ds:Size() для тиковых данных.
Попытался написать совсем простой скрипт IsRun = true; function main() while IsRun do message("ok",2); sleep(1000); end; end; function OnStop() IsRun = false; end; Добавляю скрипт в сервисе quik. Запускаю. Красный квадрат меняется на зеленый треугольник. Ошибок не выдает. Но ничего не происходит. qlua.dll есть. message() ставил в разные места скрипта. Подскажите, в чем может быть дело. Спасибо.
Sergey Gorokhov написал: Aidar , Да такая возможность есть. например с тикового графика.
не совсем понятно как прописать.А если я хочу применять индикатор на разных таймфреймах?
Если Вам нужно получать свежие тики, то они и так попадают в OnCalculate, т.к. он срабатывает при каждом изменении. Если нужно получать тики за прошлые периоды, то это можно получить только через GetItem
Если Вам нужно получать свежие тики, то они и так попадают в OnCalculate, т.к. он срабатывает при каждом изменении. Если нужно получать тики за прошлые периоды, то это можно получить только через GetItem
Мне надо тиковые объемы текущие и прошлые за количество баров которые я указал в вашей подсказке
Settings = { Name = "имя индикатора" , MY_LOVE_PARAMETER = 300, line = { .. .. } } function OnCalculate(indx) if indx < Size () - Settings.MY_LOVE_PARAMETER then return end do_calc(indx) end
Т.е. по идее у меня индикатор должен работать с 300 (или иным заданным количеством) барами.Не совсем понятно как прописать так чтобы он брал и текущие и прошлые значения тикового объема.
Может мы говорим про разные вещи? Что именно Вы понимаете под термином "тиковый" объем?
Если брать ФОРЕКС и мт4 то "Тиковый объем (англ. tick volume) – это количество тиков за некоторый период времени, соответствующее частоте изменений цены маркет-мейкером рынка и не связанное с объемом сделок." В QLUA я так понимаю можно использовать просто объем который был на каждом баре? Извиняюсь за глупые вопросы,я пока что учусь QLUA
Aidar написал: "Тиковый объем (англ. tick volume) – это количество тиков за некоторый период времени, соответствующее частоте изменений цены маркет-мейкером рынка и не связанное с объемом сделок."
Судя по определению, объем который Вы видите на графике, это не то что Вам нужно.
Цитата
Aidar написал: Извиняюсь за глупые вопросы,я пока что учусь QLUA
QLUA тут вообще не причем. Т.к. происходит непонимание на уровне того что Вам нужно, а не на уровне кода. Давайте вообще забудем про QLUA и посмотрим обычный терминал QUIK. В обычном терминале QUIK Вы где-нибудь видите нужное Вам значение?
Sergey Gorokhov написал: QLUA тут вообще не причем. Т.к. происходит непонимание на уровне того что Вам нужно, а не на уровне кода. Давайте вообще забудем про QLUA и посмотрим обычный терминал QUIK. В обычном терминале QUIK Вы где-нибудь видите нужное Вам значение?
Я так понимаю что в КВИКЕ это Поток обезличенных сделок.В обычном терминале нет доступа на сколько я знаю,если только не запросить у брокера чтобы он траслировал их в терминал
1) Обнаружил случайно, что на демо по некоторым тикерам getParamEx дает инфу, хотя в ТТП их нет. Проверил сегодня на рабочей - так же. Вопрос скорее в целом, хочется понимать - почему такое возможно? И как влияет удаление инструмента из таблицы на дальнейшее получение инфы по нему?
Добрый день.
Скорее всего эти данные у Вас заказаны в пункте меню Система - Заказ данных - Поток котировок. Qlua работает не с таблицами, а с данными с сервера.
Цитата
2) На форуме встречается фраза "перезаказ данных". Это имеется ввиду "Система-Заказ данных-Перезаказать данные" или еще что-то скриптовое?
Да.
Цитата
3) Сделки в ТОС по тикеру всегда поступают последовательно от первой в сессии и упорядоченно по времени их совершения или необязательно? При условии, что не было потерь при передаче данных.
Да.
Цитата
4) Если в процессе передачи данных от брокера случился сбой интернета и часть сделок до моей ТОС не дошла - это как-то обнаружится терминалом в процессе работы или за этим надо следить самому?
После очередного подключения данные по обезличенным сделкам прокачается в полном объеме. Если в пункте меню Система - Заказ данных - Заказ обезличенных сделок стоит признак "Получать информацию по всем обезличеным сделкам с текущего момента" То соответственно при подключении вы получите данные только с этого момента.
Цитата
5) Возникла реальная ситуация на рабочем квике. Где-то в 23:30 по Москве решил, что в ТОС мне нужно добавить еще пару колонок параметров и добавить с пару десятков инструментов. Сначала сделал это в одной таблице, но при выгрузке в эксел превысилось максимальное допустимое число строк в файле. Ок, разбил на несколько таблиц. В общем, пока это все делалось, аккурат время зашло за 23:50. Тем не менее, количество строк в таблицах не увелчивалось уже и я начал выгрузку данных в файлы. В итоге оказалось, что в примерно половине тикеров в одной из колонок не прогрузились данные полностью - часть полей оказались нулевыми. К слову, в последующие дни таких проблем не возникало. У меня вопрос - как бороться с такими ситуациями? Т.е. сделки, в смысле их числа = количество строк в ТОС оказалось корректным - именно столько сделок и было на момент окончания сессии, но по некоторым сделкам данные не загрузились полностью. Могло ли это быть связано с временем, когда я это делал? Мол если бы это было в разгар сессии, то данные догрузились бы. Или данные по сделке всегда подгружаются целиком и не могут приходить частями? И все же что делать в такой ситуации? Перезаказывать данные или заново делать CreateDataSource в скрипте?
Здесь нужно рассматривать конкретный пример с данными выгрузки, как понимаем Вы это делали при помощи Qlua.
Цитата
6) Если я правильно понял(поправьте, если нет) данные о торгах, которые приходят в квик, можно разделить на две части: данные за текующую торговую сессию, которые используются соответствующими таблицами, и данные за гораздо больший период, которые используют графики. И последние, в отличие от первых, сохраняются локально на комп. Перезаказ данных из меню позволяет удалять полностью и те, и те.
Да. На графике данные транслируются с сервера брокера, однако в последних версиях QUIK можно дополнительно хранить историю локально на компьютере. Однако при перезаказе именно архивов графиков, эта накопленная информация удалится.
Цитата
7) Последовательный вызов CreateDataSource (с колбеком) с одними и теми же параметрами без промежуточных Close() приводит к увеличению числа объектов или некий объект создается один раз, а множатся только ссылки? 8) Нетиковый вызов CreateDataSource с колбеком как-нибудь повлияет на ТОС? 9) Я читал на форуме уже немало про асинхронность (хотя не все, вероятно), но все же, встретились противоречивые комментарии. Уточню еще раз. ТОС, ТТП и CreateDataSource живут в своих независимых потоках данных каждый? Или все-таки какие-то пересечения есть? Не очень понятен еще такой момент, как связаны getNumberOf("all_trades") и ds:Size() для тиковых данных.
Egor Zaytsev написал: Скорее всего эти данные у Вас заказаны в пункте меню Система - Заказ данных - Поток котировок.
Да, так и есть. Ясно, спасибо)
Цитата
Egor Zaytsev написал: Здесь нужно рассматривать конкретный пример с данными выгрузки, как понимаем Вы это делали при помощи Qlua.
Нет, на тот момент я еще не умел сохранять историю через Qlua, поэтому делал все по "Вывод через DDE". Выше вы ответили, что ТОС должен прогружаться полностью по идее.. С того момента я не открывал те файлы, бо расстроила история. Но сейчас открыл на спокойную голову и понял, что там всё не совсем так, как я описал. Я тогда изучу внимательнее и отпишусь позже, если будет резон. Непрогруженным значением был открытый интерес. Но беглый взгляд показывает, что как будто в котировки, а я запрашивал только и исключительно фьючерсы(!), добавились какие-то акции, у которых ОИ конечно же равен нулю. Я акциями вообще не торгую и не торговал пока, и уж тем более заказывать их в ТОС - не делал ни разу. И такое впечатление, что это добавилось во все или почти все файлы, одно и тоже. И кроме того там есть какой-то странный мусор - сделки до открытия сессии: time=9:59:59.352; price=148.5 И их много таких на 9:59:59
Вообще, у меня было открыто довольно много таблиц ТОС - может 20-25. Т.е. изначально одна или две, но после того, как не получилось засейвить, решил сделать отдельную по каждому интересовавшему инструменту. И расстройство вызвало то, что в почти всех были эти нули в ОИ в некоторых местах. Полчаса усилий и спешки успеть до закрытия рынка, казалось, пошли насмарку. Так что я, наверно, даже не все файлы и сохранил в итоге. Но в целом все равно немного странная история.
Sergey Gorokhov написал: Settings = { Name = "имя индикатора" , MY_LOVE_PARAMETER = 300, line = { .. .. } } function OnCalculate(indx) if indx < Size () - Settings.MY_LOVE_PARAMETER then return end do_calc(indx) end
При запуске выводит ошибку attempt to compare nil with number
на эту строку if indx < Size()-Settings.MY_LOVE_PARAMETER then return end