Циклы и индексация баров

Образцы, куски исходников, вопросы. Обсуждаем программирование.
Ответить
Сообщение
Автор
Alexey
Сообщения: 41
Зарегистрирован: Чт окт 14, 2010 8:25 am

Циклы и индексация баров

#1 Сообщение Alexey » Ср дек 29, 2010 11:14 am

.


Уважаемые форумчане, здравствуйте.
Требуется совет умных и бывалых по вопросу о том, как устроена в ФТ индексация баров. Запутался что-то. Заранее спасибо.

Верны ли такие утверждения:

Бары в ФТ нумеруются так, что если смотреть слева направо, то самый левый имеет номер 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?


Большое спасибо.

Alexey
Сообщения: 41
Зарегистрирован: Чт окт 14, 2010 8:25 am

#2 Сообщение Alexey » Вс янв 02, 2011 4:31 pm

Спасибо мне самому, все понял, ответы и проблему нашел сам.

Alexey
Сообщения: 41
Зарегистрирован: Чт окт 14, 2010 8:25 am

Re: Циклы и индексация баров

#3 Сообщение Alexey » Пн янв 03, 2011 1:36 pm

Допишу сюда, чего сам нашел, мало ли кому поможет.
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 будет равен номеру правой свечи.

mit-alex
Сообщения: 3
Зарегистрирован: Ср мар 23, 2011 9:45 am

#4 Сообщение mit-alex » Сб апр 16, 2011 1:53 pm

скажите, пожалуйста, а никто не знает, как в GetSingleTick прописать условие, что сформировался новый бар, чтобы оно работало для каждого таймфрейма? ну например, если сформировался новый бар - выставляю отложку по цене его закрытия.

FT Support
Сообщения: 329
Зарегистрирован: Сб июл 11, 2009 3:59 pm

#5 Сообщение FT Support » Сб апр 16, 2011 4:37 pm

Ответил Вам здесь: http://forextester.ru/forum/viewtopic.php?p=3761

единственное отличие в том, что нужно заменить 1440 в вызове функции iTime на Ваш таймфрейм. (1440 это количество минут в дневной свечке)

Ответить