Буду пользаватся функциями KimIV:
GetExtremumZZBar() - Эта функция выполняет поиск экстремума стандартного пользовательского индикатора ZigZag и возвращает номер бара. Функция принимает следующие необязательные параметры: GetExtremumZZPrice().- Эта функция выполняет поиск экстремума стандартного пользовательского индикатора ZigZag и возвращает его ценовой уровень. Функция принимает следующие необязательные параметры
SetTLine() - Эта функция выполняет установку объекта OBJ_TREND трендовая линия на текущем графике
Идея хорошая, поделись посля индикатором...
По началу надо определить какой был последний луч ЗигЗага (падающий или поднимающийся). Если неправильно, поправте меня.
double zz_0,zz_1; int h_index,l_index; zz_0=GetExtremumZZPrice(NULL, 0, 0, ZZ_dp, ZZ_dv, ZZ_bs); //цена первой наиденой вершины zz_1=GetExtremumZZPrice(NULL, 0, 1, ZZ_dp, ZZ_dv, ZZ_bs); //цена второй наиденой вершины if(zz_0 > zz_1) //если цена первой вершины больше цены второй вершины { //последдний луч поднимается peak = 1; //пик-вершина } else { if(zz_0 < zz_1) //если цена первой вершины меньше цены второй вершины { //последдний луч падает peak = -1; //пик-низина } еlse return(0); //если обе вершины одной цены }
switch(peak) { case 1: { h_index = 0; // первый индекс верхних екстремумов l_index = 1; // первый индекс нижних екстремумов while(h_index <= ZZ_count) //пока индекс мен;ше масимума екстремумов { //ищем бары верхних екстремумов h_bar[h_index] = GetExtremumZZBar(NULL, 0, h_index, ZZ_dp, ZZ_dv, ZZ_bs); //ищем цены верхних екстремумов h_price[h_index] = GetExtremumZZPrice(NULL, 0, up_bar[up_index], ZZ_dp, ZZ_dv, ZZ_bs); //ищем максимальную цену среди наиденых цен h_max = ArrayMax(h_price); //максимальная цена из наиденых цен Ch_ZZ_h[i] = h_max; //записываем в буфер h_index = h_index+2; //перебор через каждыи второй ексремум } break; case -1: { h_index = 1; // первый индекс верхних екстремумов l_index = 0; // первый индекс нижних екстремумов } break; default: операторы }
double zz_0, //цена первой наиденой вершины zz_1; //цена второй наиденой вершины int h_index, //индексы верхних екстремумов l_index; //индексы нижних екстремумов int h_bar[50], //бары верхних екстремумов l_bar[50]; //бары нижних екстремумов double h_price[50], //цены верхних екстремумов l_price[50]; //цены нижних екстремумов int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- main loop for(int i=0; i<limit; i++) { zz_0=GetExtremumZZPrice(NULL, 0, 0, ZZ_dp, ZZ_dv, ZZ_bs); //цена первой наиденой вершины zz_1=GetExtremumZZPrice(NULL, 0, 1, ZZ_dp, ZZ_dv, ZZ_bs); //цена второй наиденой вершины if(zz_0 > zz_1) //если цена первой вершины больше цены второй вершины { //последдний луч поднимается peak = 1; //пик-вершина } else { if(zz_0 < zz_1) //если цена первой вершины меньше цены второй вершины { //последдний луч падает peak = -1; //пик-низина } еlse return(0); //если обе вершины одной цены } switch(peak) { case 1: { h_index = 0; // первый индекс верхних екстремумов l_index = 1; // первый индекс нижних екстремумов while(h_index <= ZZ_count) //пока индекс мен;ше масимума екстремумов { //ищем бары верхних екстремумов h_bar[h_index] = GetExtremumZZBar(NULL, 0, h_index, ZZ_dp, ZZ_dv, ZZ_bs); //ищем цены верхних екстремумов h_price[h_index] = GetExtremumZZPrice(NULL, 0, h_bar[h_index], ZZ_dp, ZZ_dv, ZZ_bs); //ищем максимальную цену среди наиденых цен h_max = ArrayMax(h_price); //максимальная цена из наиденых цен Ch_ZZ_h[i] = h_max; //записываем в буфер h_index = h_index+2; //перебор через каждыи второй ексремум } } break; case -1: { h_index = 1; // первый индекс верхних екстремумов l_index = 0; // первый индекс нижних екстремумов } break; } }
Тут начало функции int start()
Может кто то сразу видет ошибки - поправте меня и если нетрудно обьясните ошибки. A я буду писать дальше.
Идея хорошая, поделись посля индикатором...
Если получится закончить, то в конце темы он и дудет.
поправьте опечатку в названии темы. ( если это опечатка... )
За ошибки извеняюсь. Я не русский и клава фонетическая. Иногда будут ошибки.
Господа модераторы, почему посты удаляем?
За ошибки извеняюсь. Я не русский и клава фонетическая. Иногда будут ошибки.
без проблем. я понял. тогда лучше лишний раз предупредите общественность.
Пробую писать далше. Раншеуже написал код как найти верхнии екстремумы, если последдний луч поднимается, а тепер нижние екстремумы.
while(l_index <= ZZ_count) { l_bar[l_index] = GetExtremumZZBar(NULL, 0, l_index, ZZ_dp, ZZ_dv, ZZ_bs); l_price[l_index]] = GetExtremumZZPrice(NULL, 0, l_bar[l_index], ZZ_dp, ZZ_dv, ZZ_bs); l_min = ArrayMin(l_price); Ch_ZZ_l[i] = l_min; l_index = l_index+2 }

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Индикатор должен рисовать канал по вершинам ЗигЗага. Во внешних переменных задается количество вершин и максимальная высота канала. Также во внешних переменных задается переменные ЗидЗага.