//в общей секции внешние переменные индикатора ZigZag extern int ExtDepth=12; extern int ExtDeviation=5; extern int ExtBackstep=3; //в функции int n; int Zbar[4]; //номер бара с перегибом double Zval[4]; //значение зигзага в точке перегиба Zval[1] - в точке 1 и тд. for(int i=0;i<Bars;i++){ double zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i); if(zz!=0 && zz!=EMPTY_VALUE){ Zbar[n]=i; Zval[n]=zz; n++; if(n>=4)break; } }
Гарантия 0%
// в модуле extern int ExtDepth = 12; extern int ExtDeviation = 5; extern int ExtBackstep = 3; extern int ShiftBars = 2; // в функции double y3=0, y2=0, y1=0, zz; // экстремумы Зиг-Зага int x3, x2, x1, sh=ShiftBars;// номера баров // Берём три экстремума Зиг-Зага while (y3==0) { zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh); if (zz!=0 && zz!=EMPTY_VALUE) { if (y1==0) { x1=sh; y1=zz; } else if (y2==0) { x2=sh; y2=zz; } else if (y3==0) { x3=sh; y3=zz; } } sh++; }
Аргументы:
1 - Символ. NULL, значит тот символ, на который присоединен индикатор вызывающий эту функцию
2 - Тамфрейм. 0 - тот таймфрейм на который присоединен индикатор вызывающий эту функцию
3 - Имя пользовательского индикатора (имя файла без расширения).
затем идут переменные-настройти вызываемого индикатора. Открываешь вызываемый пользовательский индикатор и смотришь какие в нем определены внешние extern переменные, и в том же порядке передаешь их в iCustom. У зигзага три переменных - ExtDepth,ExtDeviation,ExtBackstep. Можно и сразу числами передать, если настраивать не надо 12,5,3. Короче это параметры с которыми зигзаг строится.
Предпоследний аргумент - номер буфера из пользовательского индикатора. У зиг-заго он один, значит пишем 0, что значит первый буфер. Если буферов больше, цепляешь индикатор на график, смотришь значений какой линии тебе нужны, затем смотришь в окне свойст во вкладке изменения цветов, на каком месте стоит эта линия, таким образом получаешь номер буфера. (Отсчет с нуля).
Последний аргумент, i - номер бара с которого берешь значение индикатора. 0 - самый новый бар, и т.д.
Там где нет излома зиг-заг обычно возвращает 0, иначе значение. Поэтому, для того чтобы найти излом проверяется неравенство значения zz нулю, и для универсальности EMPTY_VALUE, так у некоторых индикаторов может быть не определено пустое значение, как это сделано у зигзага, в этом случае он возвращает константу EMPTY_VALUE.
.................
Непонятно почему при редактировании стёрлось моё первоначальное замечаниеи :(
Вот оно:
тааак-с, может глюки? Вчера в сообщении был вопрос
"что Вы думаете по этому поводу?"
Чтоб ответить, ума много не надо - 100% слив. Учась программировать, я много создал експертов используя подобную тему. Результат 100% слив. А я применяю правило, "в реале слив больше в 2 раза чем в МТС"
Добрый день.
Уважаемые гуру. не могли бы вы в этой же теме подсказать,пожалуйста.
Maloma просил, чтобы значения ЗигЗага подписывались от нулевого бара и дальше 3 значения...т.е. справа на лево.
Может ли кто-нибудь помочь сделать кусочек кода...в котором каждое значения зигзага будет подписываться справа на лево..начиная с time_start. (time_start - дата с которой начинает работать индикатор).
Подпись типа:
low1_1.4315
high1_1.4326
low2_1.4320
high2_1.4345
low3_1.4329
high3_1.4370
и т.д.
Спасибо.
Никто не подскажет?
приветствую.
вот, воспользовался ZZ из терминала и кусочком кода от
почуял что-то неладное и решил проверить правильно ли нумеруются вершины, добавил в код стрелку на первую вершину по рисунку в начале темы - оказалось что в разное время вершины нумерюются по-разному, хотя перелома ZZ еще небыло.:
extern int ExtDepth = 12; extern int ExtDeviation = 5; extern int ExtBackstep = 3; extern int ShiftBars = 2; double y3, y2, y1, zz;// int x3, x2, x1, sh;// double ChangY1; //---------------------------------------------------------+ int start() { y3=0; y2=0; y1=0; sh=ShiftBars; while (y3==0) { zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh); if (zz!=0 && zz!=EMPTY_VALUE) { if (y1==0) { x1=sh; y1=zz; } else if (y2==0) { x2=sh; y2=zz; } else if (y3==0) { x3=sh; y3=zz; } } sh++; } string name=TimeToStr(Time[x1]); ObjectCreate (name,22,0,Time[x1],High[x1]-15*Point); } //-------------------------------------------------------+
вот скриншоты:
помогите разобраться что не так!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я прикрепил схемку. Это стандартный ZigZag.
Огромная просьба сделайте плиз кусочек кода, чтобы получить значение индикатора ZigZag в точках 1 и 2. Если не сложно, то и 3. Т. е. только те точки, на которых уже уголок образовался. А которая еще крайняя - ненадо.
Плиз.