.
Уважаемые форумчане, здравствуйте.
Требуется совет умных и бывалых по вопросу о том, как устроена в ФТ индексация баров. Запутался что-то. Заранее спасибо.
Верны ли такие утверждения:
Бары в ФТ нумеруются так, что если смотреть слева направо, то самый левый имеет номер Bars, а самый правый - 0.
Так?
Процедура
" procedure Calculate(i: integer); stdcall; "
фактически соответствует заданию цикла
" for i : = bars downto 0 do begin.. end; "
Так?
И вот хотел еще сделать следующий финт, но ум зашел за разум и получилась ерунда.
Рассчитываю разницу средних R, а потом там, где она растет (именно растет, а не больше нуля), индикатору IND присвоить значение = 1, а там, где падает, IND = -1.
Но моя версия или ничего не рисует, или рисует, но строит индикатор 10 минут, хотя тут дел на 3 секунды должно быть, или просто неверное строит - почему-то сравнивает последнее значение IND с нулем, а не с предпоследним, в итоге неверная картинка. Что-то с циклами..
Как же правильно организовать циклы, чтобы рассчитать R и затем по нему - IND?
Большое спасибо.
Циклы и индексация баров
-
- Сообщения: 41
- Зарегистрирован: Чт окт 14, 2010 8:25 am
-
- Сообщения: 41
- Зарегистрирован: Чт окт 14, 2010 8:25 am
-
- Сообщения: 41
- Зарегистрирован: Чт окт 14, 2010 8:25 am
Re: Циклы и индексация баров
Допишу сюда, чего сам нашел, мало ли кому поможет.
Да, самый правый - имеет индекс 0.
Я понял, что именно так. По-крайней мере, как только я это понял, код сделал и он заработал.
Долго рисовало - потому что перегружал систему расчетами (намек на это где-то тут на форуме нашел, правда, с трудом ) ). То есть я вводил цикл по i в цикле по index на каждом индексе. Удивительно, что компьютер и лазарус все это вытерпел.
Ну а в тот раз, когда он не рисовал, просто индексация кривая была.
В общем, если надо расчитать какую-то линию по данным цен, а потом по ней - что-то еще, то можно посчитать первую линию в рамках процедуры calculate(index: integer), а затем внутри процедуры сделать 1 раз такую штуку:
if index=0 (то есть если мы на правой свече) then begin
for i= ... downto 0 do begin
... [и тут расчитать все дополнительное]
end;
end;
В итоге все дополнительные расчеты будут сделаны 1 раз, когда index будет равен номеру правой свечи.
Alexey писал(а):.
Верны ли такие утверждения:
Бары в ФТ нумеруются так, что если смотреть слева направо, то самый левый имеет номер Bars, а самый правый - 0.
Так?
Да, самый правый - имеет индекс 0.
Alexey писал(а):.
Процедура
" procedure Calculate(i: integer); stdcall; "
фактически соответствует заданию цикла
" for i : = bars downto 0 do begin.. end; "
Так?
Я понял, что именно так. По-крайней мере, как только я это понял, код сделал и он заработал.
Alexey писал(а):.
И вот хотел еще сделать следующий финт, но ум зашел за разум и получилась ерунда.
Рассчитываю разницу средних R, а потом там, где она растет (именно растет, а не больше нуля), индикатору IND присвоить значение = 1, а там, где падает, IND = -1.
Но моя версия или ничего не рисует, или рисует, но строит индикатор 10 минут, хотя тут дел на 3 секунды должно быть, или просто неверное строит - почему-то сравнивает последнее значение IND с нулем, а не с предпоследним, в итоге неверная картинка. Что-то с циклами..
Как же правильно организовать циклы, чтобы рассчитать R и затем по нему - IND?
Большое спасибо.
Долго рисовало - потому что перегружал систему расчетами (намек на это где-то тут на форуме нашел, правда, с трудом ) ). То есть я вводил цикл по i в цикле по index на каждом индексе. Удивительно, что компьютер и лазарус все это вытерпел.
Ну а в тот раз, когда он не рисовал, просто индексация кривая была.
В общем, если надо расчитать какую-то линию по данным цен, а потом по ней - что-то еще, то можно посчитать первую линию в рамках процедуры calculate(index: integer), а затем внутри процедуры сделать 1 раз такую штуку:
if index=0 (то есть если мы на правой свече) then begin
for i= ... downto 0 do begin
... [и тут расчитать все дополнительное]
end;
end;
В итоге все дополнительные расчеты будут сделаны 1 раз, когда index будет равен номеру правой свечи.
-
- Сообщения: 3
- Зарегистрирован: Ср мар 23, 2011 9:45 am
-
- Сообщения: 329
- Зарегистрирован: Сб июл 11, 2009 3:59 pm
Ответил Вам здесь: http://forextester.ru/forum/viewtopic.php?p=3761
единственное отличие в том, что нужно заменить 1440 в вызове функции iTime на Ваш таймфрейм. (1440 это количество минут в дневной свечке)
единственное отличие в том, что нужно заменить 1440 в вызове функции iTime на Ваш таймфрейм. (1440 это количество минут в дневной свечке)