Size()

Страницы: 1
RSS
Size()
 
Обращаюсь к разработчикам.

Как узнать в индикаторе (OnCalculate), что обрабатывается самая правая свеча?

Хотелось бы получить ответ, который работает всегда )))

Спасибо.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
s_mike@rambler.ru,
Михаил, кажется мы это уже обсуждали.
https://forum.quik.ru/messages/forum10/message23759/topic2658/#message23759

Узнать что обрабатывается первая свечка можно проверяя существование свечек начиная с 1 до первой найденной.
Но если говорить не о первой свечке, а о первом расчете индикатора на первой свечке, то в условиях когда на графике всего одна свеча, надежного способа нет.
 
Сергей

там разговор был о первой свече.

а сейчас я спрашиваю о самой правой. Не волнуйтесь, этот косяк ещё не обсуждали.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
о первой свече

Цитата
s_mike@rambler.ru написал:
о самой правой

Поясните
 
s_mike@rambler.ru,
не понятно что именно не так со срабатыванием OnCalculate при index = size()
 
Цитата
Sergey Gorokhov написал:
s_mike@rambler.ru  ,
не понятно что именно не так со срабатыванием OnCalculate при index = size()
"Не так " связанo с функцией Size()



Settings = { Name="xxx"}

function Init() return 1 end

function OnCalculate(indx)
message(indx .. " " .. Size())
end

Налoжите на любoй инструмент. Пoсмoтрите, чтo вoзвращает Size()

Дoбавьте на диаграмму, скажем, скoльзящую среднюю, сдвинутую на пару интервалoв вправo. И снoва пoсмoтрите, чтo вoзвращает Size()
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
s_mike@rambler.ru,
Михаил,
Должно показать бОльшее значение, на столько сколько добавилось свечек после добавления индикатора.
И это правильно.
 
Цитата
Sergey Gorokhov написал:
s_mike@rambler.ru  ,
Михаил,
Должно показать бОльшее значение, на столько сколько добавилось свечек после добавления индикатора.
И это правильно.
А теперь еще раз прoчитайте вoпрoс из первoгo сooбщения ветки
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Пoд самoй правoй свечей пoдразумевается текущая фoрмируемая свеча инструмента.  
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
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ра.

 
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
s_mike@rambler.ru,
надежного способа нет.
 
Михайл, мне приходится с конца искать первый бар, где например Close~=0 Я так решаю это проблему.

Но конечно присоединяюсь к Вашему возмущению. Нельзя сделать функцию SizeI() например, которая бы возвращала именно число баров на графике, а не интервалов с учетом сдвига.
 
Да, наверное так можно.

но очень уж гаденький способ.... Хотя за неимением...
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
сравните время свечи и время сервера (биржи,  брокера, точного времени - выбрать любое)
 
Цитата
Николай Камынин написал:
сравните время свечи и время сервера (биржи,  брокера, точного времени - выбрать любое)
с часовыми поясами будут проблемы.

в квике есть настройка. Что то типа показывать время в часовом поясе биржи. Понятное дело, узнать это нельзя - "многахочите"

да и рассинхронизация в начале каждой свечи будет по любому в каждом из приведенных случаев - ещё больше геморроя.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
Цитата
Николай  Камынин   написал:
сравните время свечи и время сервера (биржи,  брокера, точного времени - выбрать любое)
с часовыми поясами будут проблемы.

в квике есть настройка. Что то типа показывать время в часовом поясе биржи. Понятное дело, узнать это нельзя - "многахочите"

да и рассинхронизация в начале каждой свечи будет по любому в каждом из приведенных случаев - ещё больше геморроя.
1) если у Вас тайм меньше часа то пояса вообще не нужны.
2) вычитайте из времени время начала торгов и пояса вообще не нужны.
------------------------
 
Таймфреймах может быть любым

время начала торгов -вообще неясная хрень. Нет такого понятия
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Код
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

dVal = Q()
 
Здравствуйте.

Для того чтобы увидеть ошибку запустите lua индикатор в окне Доступные скрипты, как обычный lua скрипт.
 
Цитата
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 числом. Функция Size тем самым становится недоступной, точнее переопределенной на число. При повторном выполнении кода, при попытке вызова функции Size(), получите ошибку.

Язык Lua динамической типизации. Поэтому надо быть очень аккуратным с желаниями.
Страницы: 1
Читают тему
Наверх