Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Вопрос по циклу Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Bystrij_kabanchik



Зарегистрирован: 02.06.2010
Сообщения: 15

СообщениеДобавлено: Вс Окт 03, 2010 1:28 pm Ответить с цитатой Вернуться к началу

Привет уважаемым форумчанам.

Пробую соорудить свой индикатор, столкнулась с непонятным моментом в циклах.

Допустим, мы хотим, чтобы ами отметил все белые свечи на графике.

Пишем так:

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

СообщениеДобавлено: Вс Окт 03, 2010 2:33 pm Ответить с цитатой Вернуться к началу

Вставляя 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

СообщениеДобавлено: Вс Окт 03, 2010 2:44 pm Ответить с цитатой Вернуться к началу

Олег, спасибо большое, поняла.
Посмотреть профиль Отправить личное сообщение
Сергей



Зарегистрирован: 16.03.2008
Сообщения: 168

СообщениеДобавлено: Пт Дек 03, 2010 11:07 pm Ответить с цитатой Вернуться к началу

Олег привет, вопрос тоже по циклам, нужен простой код чтобы значение допустим A увеличивалось на единицу с началом каждого года, код простой но в циклах я 0 ) думаю начать нужно с этого)
NewYear = Year()!= Ref(Year(), -1);
помоги если не сложно
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Сб Дек 04, 2010 1:02 am Ответить с цитатой Вернуться к началу

Все очень просто.
Сначала
Код:
NewYear = Year()!= Ref(Year(), -1);

В результате имеем массив который в начале каждого года равен 1 а во все остальные моменты 0.
Затем
Код:
Cum(NewYear);

Все. посчитали сколько лет.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Сергей



Зарегистрирован: 16.03.2008
Сообщения: 168

СообщениеДобавлено: Сб Дек 04, 2010 11:59 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Все очень просто.
Сначала
Код:
NewYear = Year()!= Ref(Year(), -1);

В результате имеем массив который в начале каждого года равен 1 а во все остальные моменты 0.
Затем
Код:
Cum(NewYear);

Все. посчитали сколько лет.

Точно, спасибо)
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen