Алексей (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4
OnClose vs OnStop
 
Переадресую вопрос к разработчикам.

Для каких целей в событийной модели разработки скрипта введено событие OnClose?
OnClose vs OnStop
 
Уважаемые коллеги!
Подскажите, пожалуйста, начинающему "писателю".

Что такого особенного надо сделать при наступлении события OnClose, чего уже поздно будет делать при обработке OnStop, которое, я так понимаю, неминуемо наступит сразу после OnClose?
Другими словами для чего нам нужно событие OnClose, кроме как для получения просто "интересной", но, как мне кажется, бесполезной информации, о том, что скрипт прекращает работу не в результате нажатия кнопки "Остановить", а в результате закрытия терминала?
Или подскажите, пожалуйста, идеи, сценарии, когда скрипт должен был бы по разному прекращать свою работу, в зависимости от причины его остановки.
Вызов getDataSourceInfo() из Init() в Lua индикаторах
 
Цитата
Русский написал:
Вы говорили не об этом, но правильно ли я понял, что если код такой:
Код
  int  =   getDataSourceInfo ().interval  
, то интервал будет получаться на каждой свечке.
А если такой:
Код
   if  index  =  =   1   then 
 int  =   getDataSourceInfo ().interval
 end   
, то интервал будет получен единожды?
Да.
Но уточню:
getDataSourceInfo ().interval - это тайм-фрейм окна графика, в котором выводится индикатор. Это, строго говоря, не обязательно интервал по времени между предыдущей и текущей свечками, т.к. данные для каких-то моментов времени могут отсутствовать, и тогда предыдущая свечка может отстоять от текущей на больший, чем тайм-фрейм промежуток времени.
Проверять тайм-фрейм для каждой свечки не имеет смысла, т.к. если Вы смените тайм-фрейм, то quik перезапустит цикл вызовов OnCalculate() и первым делом вызовет OnCalculate(index = 1)
Вызов getDataSourceInfo() из Init() в Lua индикаторах
 
Цитата
Николай Камынин написал:
Цитата
А в квике как мультике про простоквашено (Письмо дяди Федора).
Начинал писать квик один писатель потом второй и т д.
Стратегию построения КВИКА разработали еще в прошлом веке.
Вот и нет однообразия.
А читатели - это клиенты брокеров.
Ну в принципе, это многое объясняет :)
Вызов getDataSourceInfo() из Init() в Lua индикаторах
 
Простите, про событие 2 я погорячился, Init() не вызывается. Но сути дела это не меняет
Вызов getDataSourceInfo() из Init() в Lua индикаторах
 
Цитата
Николай Камынин написал:
еще замечу, что в init ставить настройку каких либо параметров не имеет смысла, так как он не вызывается при изменении параметров индикаторов.
Поэтому без проверки на 1 индекса Вы все рано не обойдетесь.
И смысла делать как вы хотите нет никакого.
Init() вызывается при:
1. Первоначальном добавлении индикатора на график,
2. При каждой смене тайм-фрейма (смена набора свечек при сохранении инструмента),
3. При каждой смене инструмента (смена источника данных для свечек).
4. На старте quik и, что по сути для индикатора тоже самое, при загрузке настройки окон из *.wnd

Так вот, при событиях 2, 3 и 4 getDataSourceInfo(), вызванная из Init() выдаст все корректную информацию и о новом тайм-фрейме, и новом инструменте.
Причем в "Руководстве пользователя QLua" прямо сказано, что только именно событие 4 гарантирует корректную работу getDataSourceInfo() при вызове из Init()

А вот в случае события 1, по непонятной причине, от getDataSourceInfo() мы можем получить только текущий тайм-фрейм окна графика.

Так чем же событие 1 так уж принципиально отличается от других, в особенности от события 4?
Почему во 2-4 случаях quik "подключает" новый инструмент к индикатору до вызова Init(), в случае 1 - после?
Номер последней свечки (SetUpdateCallback)
 
Цитата
Andrei2016 написал:
Терминал QUIK при наличии пришедших с сервера данных хранит примерно 3000 записей - т.е. примерно 3000 свечей. Это означает, что если история инструмента на вашем рабочем месте содержит, скажем, 3060 свечей (с 10-00 до 18-45) мы имеем 9 часовых интервалов в сутки) - т.е. историю за 340 торговых дней, - то да, номер последней свечи будет один и тот же, так как нумерация идет в возрастающем порядке и ограничивается лимитом примерно в 3000. Есть ли возможность поставки через CreateDataSource() данных только за последний торговый день - это уже вопрос к разработчикам.
Подскажите, пожалуйста, если данных в текущем тайм-фрейме по инструменту заведомо больше, чем 4000 записей, то какое количество свечек гарантировано выдаст quik? не менее 3000?, не менее 2000? Существует ли определенная нижняя граница?
Вызов getDataSourceInfo() из Init() в Lua индикаторах
 
Цитата
Николай Камынин написал:
Цитата
Sergey Gorokhov   написал:
Цитата
Алексей   написал:
Это то понятно, что решить задачу можно, отлавливая вызов для первой свечки, но это лишние накладные расходы, пускай и мизерные. А на медленных машинках, для процессов, исполняемых интерпретатором, если кто-то решит повесить много индикаторов, в каждом из которых по несколько линий ...:),
1) То что проверка первой свечи приводит к "накладным расходам" не более чем просто слова.
2) Гипотетическое создание Init2 совершенно никак не позволит изменить ситуацию. И даже если ее добавить, это будет ровно тоже самое что проверка первой свечи.
3) Решение в виде проверки первой свечи, в полной мере решает задачу и аргументов которые не позволят ее решить указанным способом, Вы так и не привели.
отлавливание первой свечи оператором
if indx==1 then ... end
на медленных машинах займет не более  50 мкс.
А поступление очередных данных происходит не чаще, чем раз в  100 мс.
Разница примерно в 2000 раз.
А задержка реакции OC не менее 10 мс.
Разница в 200 раз.
А задержка отправки коротких сообщений с компа на сервер брокера типа заявок, может составить 200 мс
Разница примерно в 4000 раз.
За что боремся?
Я же нарисовал смайлик. И сразу далее написал, что естественно не в этом суть.
А суть вопроса к quik в том, что:

Не прослеживается единообразия в логике вызовов Init() со стороны Quik: при исходном добавлении индикатора на график, Init() вызывается до привязки к источнику данных, а при замене инструмента Init(), почему-то, вызывается уже после привязки к новому инструменту.
Вызов getDataSourceInfo() из Init() в Lua индикаторах
 
Цитата
Старатель написал:
Цитата
Алексей   написал:
Не прослеживается единообразия в логике вызовов Init() со стороны Quik: при исходном добавлении индикатора на график, Init() вызывается до привязки к источнику данных, а при замене инструмента Init(), почему-то, вызывается уже после привязки к новому инструменту.
При добавлении индикатора сразу указывается Источник данных. Поэтому описанное поведение больше похоже на ошибку в логике.
В том-то и дело, что при вызове getDataSourceInfo() из Init() Вы не получите информацию об инструменте, на основе свечек которого должен строиться индикатор. На это даже сами разработчики Quik указывают в  "Руководстве пользователя QLua". Имеется в виду самый первый вызов Init() непосредственно после добавления индикатора в окно графика.

To: Старатель.
Под "привязкой" я имею в виду не действия пользователя, естественно указавшего для какого инструмента он желает видеть индикатор, а инициализацию внутренних служебных таблиц о самом инструменте, а также о ds (DataSource) с информацией о свечках, о методах H L O C V Size тд., которую Quik в вышеописанном случае производит уже только после вызова Init().
"Слетают" Lua индикаторы при вкл./откл фильтра по времени
 
К сожалению, Сбер считает "актуальной" версию 7.2.2.3 :(
Вызов getDataSourceInfo() из Init() в Lua индикаторах
 
Здравствуйте,
Это то понятно, что решить задачу можно, отлавливая вызов для первой свечки, но это лишние накладные расходы, пускай и мизерные. А на медленных машинках, для процессов, исполняемых интерпретатором, если кто-то решит повесить много индикаторов, в каждом из которых по несколько линий ...:), уже можно заметить подтормаживания.

Но не в этом суть.
Не прослеживается единообразия в логике вызовов Init() со стороны Quik: при исходном добавлении индикатора на график, Init() вызывается до привязки к источнику данных, а при замене инструмента Init(), почему-то, вызывается уже после привязки к новому инструменту.
Вызов getDataSourceInfo() из Init() в Lua индикаторах
 
Добрый день!

При написании своего специфического индикатора иногда возникает необходимость делать некоторые начальные настройки в его работе в зависимости от того, для какого инструмента он строится.
Однако, из Init() вызывать getDataSourceInfo() бессмысленно (мы получим информацию только о тайм-фрейме). Перезапускать рабочее место Quik после добавления индикатора на график, как указано в "Руководстве пользователя QLua" как-то не хочется.
(На самом, деле нужно как-то заставить Quik повторно вызвать Init() индикатора, что можно, впрочем, сделать и без перезапуска рабочего места, а просто некоторыми манипуляциями с самим окном графика. Но это тоже не выход).

Что посоветуете?

Первое, что мне самому приходит в голову, это выполнить нужные настройки при первом же вызове OnCalculate().
getDataSourceInfo() здесь уже будет работать корректно, т.к. к этому моменту Quik уже "привязал" новый индикатор к источнику данных.
Но это тоже не самый красивый ход: каждый раз проверять индекс, отлавливая именно первую свечку, чтобы не заниматься настройками вообще при каждом вызове OnCalculate() и т.д.

Вопрос к разработчикам: я так понимаю, что, при добавлении Lua индикатора на график, Init() вызывается до "подключения" к источнику данных. А что мешает его вызвать после? Так ли важно знать количество линий на индикаторе до "подключения" к источнику данных? Если обеспечить корректную работу getDataSourceInfo() при первом после добавления индикатора на график вызове Init() все же нельзя, то хотел бы попросить разработчиков добавить дополнительный СallBack, типа Init2() после "подключения" к источнику данных, но до первого вызова OnCalculate(). Можно, например, это делать не для каждого индикатора, а только если Init() вернет "соответствующую просьбу".
"Слетают" Lua индикаторы при вкл./откл фильтра по времени
 
Добрый день!

При включении фильтра по времени некоторые Lua индикаторы отображаются неверно (quik 7.2.2.3). Приходится зайти в редактирование настроек любого Lua индикатора и, затем, закрыть его, чтобы индикаторы стали работать корректно. Речь идет, в частности, о многих индикаторах из ftp://ftp.quik.ru/public/INDICATORS.zip, если их использовать "как есть".
Проблема в том, что после включения фильтра по времени "в первом прогоне" Quik вызывает OnCalculate() для всех свечек, как если бы фильтра не было, но для тех свечек, что должны быть исключены фильтром, он, в ответ на вызов любой из функций для доступа к источнику данных O, H, L, C, V, T, выдает 0. После же того, как пользователь каким-либо способом заставит quik вновь запустить цикл полного перестроения индикатора (например, вышеописанным открытием окна настроек), цикл вызовов OnCalculate() происходит корректно: вызовы делаются только для свечек, отобранных фильтром по времени.
В принципе, ничего сложного в том, чтобы обойти эту проблему при написании своего индикатора нет, но в некоторых случая приходится прибегать к нетривиальным решениям (например, для AMA).

Я недавний пользователь quik и, возможно, еще не совсем освоил тонкости его настройки.

Подскажите, пожалуйста, такая проблема может быть вызвана какими-то моими кривыми настройками где-нибудь в Система->Настройки->... или это bug, который имеет смысл поправить разработчикам?
Страницы: Пред. 1 2 3 4
Наверх