Как так "index-1" текущая свеча??

Страницы: 1
RSS
Как так "index-1" текущая свеча??, Помощь, новичок, шок
 
Добрый день. Пытаюсь написать индикатор и столкнулся с таким явлением, как "index - 1" это текущая свеча, как то получается?? А если "index-2", то это предыдущая свеча и так далее по такому принципе, как так вообще? Случайно вообще заметил и то только тогда, когда научился выводит значения в файл. Я новичок, но не понимаю почему так даже, если учитывать, что луа считает с единица, а не с нуля, все равно не понимаю почему при "index" это не текущая свеча, а например, если нужна предыдущая, то нужно писать "index-2", а не "index-1" помогите разобраться пожалуйста новичку :what:  
 
Насколько видно из описания проблемы, речь в данном случае идет об индикаторах, а именно об использовании там данных массива свечей. И еще можно догадываться, что вопросы к параметру index, приходящему в функцию OnCalculate. Если всё это так, то смысл термина "текущая свеча" здесь очень неопределен. Потому что, по замыслу OnCalculate, она вызывается для той свечи, для которой терминал хочет получить от вас рассчитанное значение индикатора. Единственное, что можно здесь надежно утверждать, что значения index, последовательно передаваемые в функцию, будут неубывающими. То есть возрастающими или, в крайнем случае, равными предыдущему значению. Далее, можно перейти к вопросу, когда же вызывается OnCalculate. Она вызывается либо когда вообще нет рассчитанных значений индикатора (в таком случае index последовательно пробежит от 1 до последнего номера из массива), либо когда какая-то свеча изменилась. Понятно, что при корректной работе системы поставки данных измениться может лишь последняя (пускай "текущая" в иной терминологии) свеча. Тогда OnCalculate её индекс и получит. Так что приведенная вами информация представляется мало правдоподобной. Ищите ошибку либо, возможно, нечетко сформулирована проблема.
Что же касается индекса, с нуля он начинается или с единицы, то в данном случае это совершенно не имеет значения, поскольку вы далее обращаетесь за данными свечи ровно по тому индексу, которым вам пришел.
 
Спасибо за ответ, но многократно проверил (да OnCalculate речь) если написать index-3 выдает значения именно предпредыдущей свечи, если index-2 предыдущей, если index-1, то значения текущей и все тут, как не пробовал так и считает. Через вывод в файлы и отображение на графике вообще нет сомнения, что именно так считает. Сначала вообще не понимал почему код не правильно отображает на график, вывел значения в файл там и заметил, после корректировки, все что касается index на единицу вроде норм  
 
Вот вам пример функции для простейшего индикатора из одной линии, где можно убедиться в корректной работе:
Код
function OnCalculate(index)
  return C(index)
end 
Запустите и увидите, что значения индикатора для каждой свечи - просто её цены Close. А для последней, которая меняется, значение индикатора будет "прыгать" в соответствии с меняющейся (Close) ценой.
 
Цитата
Atom написал:
вывел значения в файл
Какие это значения и как их получаете?
 
Разные и Low и Open и High, в общем разные. Получаю через функцию getCandlesByIndex пишу все это дело в  теле OnCalculate
 
Цитата
Atom написал:
через функцию getCandlesByIndex
Видимо, в этом и состоит ошибка:

"TABLE t, NUMBER n, STRING l getCandlesByIndex (STRING tag, NUMBER line, NUMBER  first_candle, NUMBER count)
...
first_candle – индекс первой свечки. Первая (самая левая)  свечка имеет индекс 0"

В индикаторах доступны функции O, H, L, C, V, T, в которых индекс соответствует получаемому в OnCalculate.
 
Благодарю за ответ, но все равно не могу понять, почему считает так, ну и что что счет с нуля если index-1 по идее значения предыдущей свечи должны быть, а не текущей
 
Цитата
Atom написал:
Благодарю за ответ, но все равно не могу понять, почему считает так, ну и что что счет с нуля если index-1 по идее значения предыдущей свечи должны быть, а не текущей
Представим себе, что сейчас в массиве ровно 10 свечей. Нумерация для значения index в OnCalculate и функциях O, H, L, C, V, T - от 1 до 10. Для функции getCandlesByIndex - от 0 до 9.
Если в OnCalculate пришел index = 10, то получить Close последней свечи - C(10), либо её же - getCandlesByIndex(..., first_candle = 9, count = 1).
Таким образом, для O, H, L, C, V, T используем index, для getCandlesByIndex() значение (index - 1).
 
Цитата
SDL написал:
Цитата
Atom написал:
Благодарю за ответ, но все равно не могу понять, почему считает так, ну и что что счет с нуля если index-1 по идее значения предыдущей свечи должны быть, а не текущей
Представим себе, что сейчас в массиве ровно 10 свечей. Нумерация для значения index в OnCalculate и функциях O, H, L, C, V, T - от 1 до 10. Для функции getCandlesByIndex - от 0 до 9.
Если в OnCalculate пришел index = 10, то получить Close последней свечи - C(10), либо её же - getCandlesByIndex(..., first_candle = 9, count = 1).
Таким образом, для O, H, L, C, V, T используем index, для getCandlesByIndex() значение (index - 1).
Понял, спасибо огромное, но новая проблема) Считает все верно, но не считает как бы в прямом эфире, если удалить и запустить снова индикатор, то за весь период считает, который уже прошел, но за новый не передает данные почему на экран, если удалить и снова запустить то пересчитывает за весь период, почему в как бы "онлайн" не передает данные не могу понять... Вдруг знайте, создам еще отдельную тему.
Страницы: 1
Читают тему (гостей: 1)
Наверх