Автор |
Сообщение |
Bystrij_kabanchik
Зарегистрирован: 02.06.2010
Сообщения: 15
|
Привет уважаемым форумчанам.
Пробую соорудить свой индикатор, столкнулась с непонятным моментом в циклах.
Допустим, мы хотим, чтобы ами отметил все белые свечи на графике.
Пишем так:
Up = C > 0; // массив свечек с ценой закрытия > цены открытия
Plot = (C, "", IIf(Up, colorRed, colorBlack), styleCandle);
Все хорошо, соответствующие свечи помечаются красным.
Теперь хотим, чтобы ами отмечал последнюю свечу из любой пары белых свечей, то есть последнюю из 2х белых свечей, идущих подряд.
Сооружаем цикл:
Up = C > 0; // массив свечек с ценой закрытия > цены открытия
for (i = 1, i < BarCount, i++) { // перебираем все бары на графике
if (Up[i] AND Up[i-1]) { // ищем две подряд идущие белые свечи в массиве Up
Plot = (C[i], "", IIf(Up, colorRed, colorBlack), styleCandle); // отмечаем на графике белую свечу [i]
}
}
В этом случае ами отмечает красным все (белые и черные) свечи на графике, а не искомые свечи по одной.
Никак не соображу, почему так происходит.
Буду признательна за помощь. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вставляя Plot в цикл ты заставляешь рисовать столько раз сколько баров в чарте. Это не есть хорошо. Надо сперва в цикле сформировать соответствующий массив а уже после цикла его выводить на график.
В данном случае так
Код: |
Up = C > 0; // массив свечек с ценой закрытия > цены открытия
Up1 = 0;
for (i = 1, i < BarCount, i++) { // перебираем все бары на графике
if(Up[i] AND Up[i-1]) { // ищем две подряд идущие белые свечи в массиве Up
Up1[i] = 1;
}
}
Plot = (C[i], "", IIf(Up1, colorRed, colorBlack), styleCandle); // отмечаем на графике белую свечу [i]
|
Однако в данном случае цикл вообще не нужен. Можно и без него
Код: |
Up = C > 0; // массив свечек с ценой закрытия > цены открытия
Plot = (C, "", IIf(Sum(Up, 2)==2, colorRed, colorBlack), styleCandle);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Bystrij_kabanchik
Зарегистрирован: 02.06.2010
Сообщения: 15
|
Олег, спасибо большое, поняла. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
Олег привет, вопрос тоже по циклам, нужен простой код чтобы значение допустим A увеличивалось на единицу с началом каждого года, код простой но в циклах я 0 ) думаю начать нужно с этого)
NewYear = Year()!= Ref(Year(), -1);
помоги если не сложно |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Все очень просто.
Сначала
Код: |
NewYear = Year()!= Ref(Year(), -1); |
В результате имеем массив который в начале каждого года равен 1 а во все остальные моменты 0.
Затем
Все. посчитали сколько лет. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
000 писал(а): |
Все очень просто.
Сначала
Код: |
NewYear = Year()!= Ref(Year(), -1); |
В результате имеем массив который в начале каждого года равен 1 а во все остальные моменты 0.
Затем
Все. посчитали сколько лет. |
Точно, спасибо) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|