Узнать что обрабатывается первая свечка можно проверяя существование свечек начиная с 1 до первой найденной. Но если говорить не о первой свечке, а о первом расчете индикатора на первой свечке, то в условиях когда на графике всего одна свеча, надежного способа нет.
Sergey Gorokhov написал: s_mike@rambler.ru , Михаил, Должно показать бОльшее значение, на столько сколько добавилось свечек после добавления индикатора. И это правильно.
А теперь еще раз прoчитайте вoпрoс из первoгo сooбщения ветки
Sergey Gorokhov написал: s_mike@rambler.ru , Михаил, Должно показать бОльшее значение, на столько сколько добавилось свечек после добавления индикатора. И это правильно.
Сергей.
Я в сoвершенстве владею русским языкoм. Давайте пoчитаем, чтo ваша кoмпания пишет прo функцию Size:
Код
Size
Функция возвращает текущее количество свечек в источнике данных.
Формат вызова:
NUMBER Size()
Давайте вместе прoчтем и пoпрoбуем пoнять. Истoчник данных для индикатoра - этo инструмент. Кoличествo свечей инструмента не мoжет зависеть oт параметра "сдвиг" индикатoра (неужели не так?)))) Oнo зависит oт тoргoв, таймфрейма и глубины пoказа истoрии.
А у вас ("пo правильнoму") oнo зависит oт настрoйки какoгo-тo индикатoра.
Михайл, мне приходится с конца искать первый бар, где например Close~=0 Я так решаю это проблему.
Но конечно присоединяюсь к Вашему возмущению. Нельзя сделать функцию SizeI() например, которая бы возвращала именно число баров на графике, а не интервалов с учетом сдвига.
7.2 Функции и глобальные переменные скрипта
индикатора
...
7.2.2 OnCalculate
...
Формат вызова:
NUMBER v1 [, NUMBER vn] OnCalculate(NUMBER index)
Параметры:
• index – индекс свечки в источнике данных. Начинается с «1».
Если значение vi не определено, то функция возвращает nil в качестве значения линии на интервале index.
...
7.2.4 Функции для доступа к источнику данных
• Функции для доступа к источнику данных O, H, L, C, V, T принимают в качестве параметра
индекс свечи и возвращают соответствующее значение в формате:
NUMBER <название функции>(NUMBER index)
• Функция Size возвращает текущее количество свечек в источнике данных. Формат функции:
NUMBER Size()
Уважаемые разработчики QUIK! Как мне кажется, большая часть пользователей, только начинающих изучать QLua, читая в документации слово "свечка", изначально для всех типов скриптов воспринимают это понятие в том смысле, как это определено для CreateDataSource. И лишь потратив впустую много времени и сил, осознают, что такое понимание "свечки" не имеет ничего общего с интервалами времени на диаграмме графика для скрипта индикатора.
Я уже неоднократно предлагал Вам не вводить пользователей в заблуждение в отношении index в OnCalculate и функции Size для скрипта индикатора, а четко указать в документации:
1. "7.2.2 OnCalculate ... • index – номер интервала на шкале времени в окне диаграммы графика, для которого необходимо вычислить значение индикатора. Начинается с «1». Если значение vi не определено, то функция должна вернуть nil в качестве значения линии на интервале index. ... При перезапуске расчета индикатора Quik вызывает OnCalculate с index = 1 вне зависимости от того, определены или нет данные для инструмента для первого интервала диаграммы графика. Можно описать ситуации, когда Quik "перезапускает" расчет индикатора.
2. "7.2.4 Функции для доступа к источнику данных • Функции для доступа к источнику данных O, H, L, C, V, T принимают в качестве параметра индекс интервала на шкале времени в окне диаграммы графика и возвращают соответствующее для времени интервала значение инструмента, если оно определено, в формате: NUMBER <название функции>(NUMBER index). Определить имеются ли данные инструмента для указанного интервала можно вызвав функцию CandleExist. Если данные инструмента для указанного интервала отсутствуют, то функции O, H, L, C, V возвращают «nil», а функция T – время указанного интервала.
• Функция Size возвращает количество интервалов на шкале времени, используемых для отображения в окне диаграммы графика, с учетом пустых интервалов."
"Интервал на шкале времени диаграммы графика" можно "обозвать" как-то по-другому, например, "временной интервал диаграммы графика" или как-то еще. Но надо четко развести понятия номер свечки инструмента и номер интервала.
7.2 Функции и глобальные переменные скрипта
индикатора
.. .
7.2 . 2 OnCalculate
.. .
Формат вызова:
NUMBER v1 [, NUMBER vn] OnCalculate(NUMBER index)
Параметры:
• index – индекс свечки в источнике данных. Начинается с « 1 ».
Если значение vi не определено, то функция возвращает nil в качестве значения линии на интервале index.
.. .
7.2 . 4 Функции для доступа к источнику данных
• Функции для доступа к источнику данных O, H, L, C, V, T принимают в качестве параметра
индекс свечи и возвращают соответствующее значение в формате:
NUMBER < название функции > (NUMBER index)
• Функция Size возвращает текущее количество свечек в источнике данных. Формат функции:
NUMBER Size ()
Уважаемые разработчики QUIK! Как мне кажется, большая часть пользователей, только начинающих изучать QLua, читая в документации слово "свечка", изначально для всех типов скриптов воспринимают это понятие в том смысле, как это определено для CreateDataSource. И лишь потратив впустую много времени и сил, осознают, что такое понимание "свечки" не имеет ничего общего с интервалами времени на диаграмме графика для скрипта индикатора.
Я уже неоднократно предлагал Вам не вводить пользователей в заблуждение в отношении index в OnCalculate и функции Size для скрипта индикатора, а четко указать в документации:
1. "7.2.2 OnCalculate ... • index – номер интервала на шкале времени в окне диаграммы графика, для которого необходимо вычислить значение индикатора. Начинается с «1». Если значение vi не определено, то функция должна вернуть nil в качестве значения линии на интервале index. ... При перезапуске расчета индикатора Quik вызывает OnCalculate с index = 1 вне зависимости от того, определены или нет данные для инструмента для первого интервала диаграммы графика. Можно описать ситуации, когда Quik "перезапускает" расчет индикатора.
2. "7.2.4 Функции для доступа к источнику данных • Функции для доступа к источнику данных O, H, L, C, V, T принимают в качестве параметра индекс интервала на шкале времени в окне диаграммы графика и возвращают соответствующее для времени интервала значение инструмента, если оно определено, в формате: NUMBER <название функции>(NUMBER index). Определить имеются ли данные инструмента для указанного интервала можно вызвав функцию CandleExist. Если данные инструмента для указанного интервала отсутствуют, то функции O, H, L, C, V возвращают «nil», а функция T – время указанного интервала.
• Функция Size возвращает количество интервалов на шкале времени, используемых для отображения в окне диаграммы графика, с учетом пустых интервалов."
"Интервал на шкале времени диаграммы графика" можно "обозвать" как-то по-другому, например, "временн о й интервал диаграммы графика" или как-то еще. Но надо четко развести понятия номер свечки инструмента и номер интервала.
Вы все правильно написали, за исключением одного. Вы не дали определение свечки. Прикольно то, что многие начинающие и не только не понимают и это. Все дело в том, что этим словом называют графическое изображение четырех индикаторов. Поэтому вполне логично, что в рамках вашего изложения свечка - это индикатор (даже четыре). Кроме того, индекс преобразуется во время через понятие интервал. Таким образом, в Вашем определении время это синоним индекса. ------------------------- Возможно не стоит быть столь категоричным и пытаться дать строгое и однозначное определение понятий на рынках, т к большинство которое начинает или уже нет это вообще либо не читает, либо не поймет. ---------------------- Поэтому оставьте все как есть.
Вы правы. Такой вывод действительно напрашивается из моего поста. А все из-за того, что я сам не недостаточно четко изложил свои мысли. На самом деле, я хотел написать:
"Как мне кажется, большая часть пользователей, только начинающих изучать QLua, читая в документации "индекс свечки", изначально для всех типов скриптов воспринимают это понятие в том смысле, как это определено для CreateDataSource. И лишь потратив впустую много времени и сил, осознают, что такое понимание "индекса" не имеет ничего общего с нумерацией интервалов времени на диаграмме графика для скрипта индикатора."
А описание понятия "свечки", как и других рыночных терминов, думаю, действительно не должно входить в Руководство пользователя интерпретатора QLua.
Ведь s_mike@rambler.ru совершенно справедливо открыл эту ветку, обращая внимание разработчиков на то, что в документации QLua в разделе о скрипте индикатора написан полный бред:
Цитата
• Функция Size возвращает текущее количество свечек в источнике данных.
Если есть желание сохранить здесь слово "свечка", то надо написать хотя бы так: "Функция Size возвращает текущее количество свечек, отображаемых в окне диаграммы графика."
Документация как-то должна дать понять читателю, что первая/последняя свечка, отображаемая в окне диаграммы графика, вовсе не обязательно является первой/последней (из существующих) свечкой источника данных; что первая существующая свечка источника данных вовсе не обязательно под индексом 1; что последняя существующая свечка источника данных вовсе не обязательно под индексом Size.
Почитайте также подряд идущие "3.10.3 getCandlesByIndex" и "3.10.4 CreateDataSource"! Как в их описании можно использовать один и тот же термин "индекс свечки" не пояснив, что речь идет о НЕ ИМЕЮЩИХ НИЧЕГО ОБЩЕГО ИНДЕКСАХ. Почитайте форум. Подавляющее большинство читателей решают, что речь идет об одном и том же, просто сдвинутом на 1!
Прошу помощи у знающих: Кто-нибудь может сказать в чем ошибка: Код условный, суть в том, что когда в качестве второго оператора цикла используется Size индиктор пропадает из вкладки добавления индикатора терминала Quik. Я так понимаю идет какая-то ошибка...
Size = Size()
function Q() dVal = {}; for i = 1, Size, 1 do dVal[i] = 100*i; end return dVal end
Alexey написал: Прошу помощи у знающих: Кто-нибудь может сказать в чем ошибка: Код условный, суть в том, что когда в качестве второго оператора цикла используется Size индиктор пропадает из вкладки добавления индикатора терминала Quik. Я так понимаю идет какая-то ошибка...
Size = Size()
function Q() dVal = {}; for i = 1, Size, 1 do dVal = 100*i; end return dVal end
dVal = Q()
без полного кода сказать трудно. Но у Вас куча дыр в этом условном коде, которые могут привести к сюрпризам при выходе из этой функции. -------------------- бесплатный совет. ------------------ Не надо писать условных кодов, если проблема реальная. Т к суть проблемы в том, что вы реально, а не условно, не понимаете как писать индикаторы. И это видно из вашего условного кода, -----------------
Читаем: инициализировать переменную Size числом. Функция Size тем самым становится недоступной, точнее переопределенной на число. При повторном выполнении кода, при попытке вызова функции Size(), получите ошибку.
Язык Lua динамической типизации. Поэтому надо быть очень аккуратным с желаниями.