Константа | Значение | Описание |
---|---|---|
0 | Скрипт самостоятельно завершил свою работу | |
REASON_REMOVE | 1 | Программа удалена с графика |
REASON_RECOMPILE | 2 | Программа перекомпилирована |
REASON_CHARTCHANGE | 3 | Символ или период графика был изменен |
REASON_CHARTCLOSE | 4 | График закрыт |
REASON_PARAMETERS | 5 | Входные параметры были изменены пользователем |
REASON_ACCOUNT | 6 | Активирован другой счет |
В вашем случае это сообщение о том, что Zigzag был удален с графика USDCHF H1.
#property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "https://www.metaquotes.net/" int PrevTime=0; int init() { return(0); } int deinit() { return(0); } int start() { int cnt1, cnt2=0; double ZZ_Mass[10][2],ZZ1,ZZ2; if (iTime(NULL,0,0)>PrevTime) { PrevTime=iTime(NULL,0,0); for (cnt1=1;cnt1<iBars(NULL,0);cnt1++) { ZZ1=iCustom(NULL,0,"ZigZag",12,5,3,1,cnt1); ZZ2=iCustom(NULL,0,"ZigZag",12,5,3,2,cnt1); if (ZZ1!=0 && ZZ2!=0) Print ("~~~~~~~~~~~~~~~~~~~~~~ZZ1 = ", ZZ1, " / ZZ2 = ", ZZ2 ); if (ZZ1!=0) { ZZ_Mass [cnt2][0]=ZZ1; ZZ_Mass [cnt2][1]=cnt1; cnt2++; } if (ZZ2!=0) { ZZ_Mass [cnt2][0]=ZZ2; ZZ_Mass [cnt2][1]=cnt1; cnt2++; } if (cnt2==10) break; } //for (cnt2=0; cnt2<10; cnt2++) Print ("----------------Вершина =", cnt2, " = ", ZZ_Mass [cnt2][0]); } return(0); }
Что-то снова делаю не так, ибо вылезает:
1) Каким-то образом на одном баре 2 вершины:
2007.10.26 18:57:41 2007.10.16 11:00 TestZZ EURUSD,H1: ~~~~~~~~~~~~~~~~~~~~~~ZZ1
= 1.4225 / ZZ2 = 1.4157
2007.10.26 18:57:41 2007.10.16 10:00 TestZZ EURUSD,H1: ~~~~~~~~~~~~~~~~~~~~~~ZZ1
= 1.4225 / ZZ2 = 1.4157
2007.10.26 18:57:41 2007.10.12 15:00 TestZZ EURUSD,H1: ~~~~~~~~~~~~~~~~~~~~~~ZZ1
= 1.4208 / ZZ2 = 1.4159
2007.10.26 18:57:41 2007.09.26 00:00 ZigZag EURUSD,H1: loaded successfully
2) По логики ZZ вершины должны чередоваться, т.е если 9>8 то 8<7, 7>6 .... или если 9<8 то 8>7, 7<6 и т.д., у меня снова не так:
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =9 = 1.3848
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =8 = 1.3828
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =7 = 1.3893
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =6 = 1.3987
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =5 = 1.3941
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =4 = 1.3935
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =3 = 1.4062
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =2 = 1.4098
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =1 = 1.4119
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =0 = 1.4042
Кто силен? Подскажите, где косяк? Или с ZZ не все так просто, как
мне кажется?
Figar0, код не соответствует тому, что ты показываешь. Поясни, пожалуйста, логику того, что сделано в коде, и что в нем должно выводиться. И еще: сравнивать лучше не напрямую с нулем, а, скажем, проверять, больше ли значение индикатора ZZ, чем 0.001.
Логика должна быть такая, при поступлении нового бара начинаем искать вершины начиная с 1го бара до тех пор пока не найдем 10 вершин или пока не иссякнут доступные бары, найденные значения вершин и номера баров в порядке нахождения заносятся в 2х мерный массив. Printы внесены для контроля и поиска ошибки. Вот и вся логика.
А это реальная ситуация когда вершины не чередуются? при визуальном контроле ZZ а том же интервале такого не наблюдается...
Изменение условия с ZZ!=0 на ZZ>0.0001 ничего не менят, хотя согласен, так вернее
Привет. Я делаю так. Функция ищет три последних вершины.
//-------------------------------------------------------------------+ // Функция Zigzag получает и заносит в массив данные 3-х последних + // вершин Зигзага + //-------------------------------------------------------------------+ void Zigzag() { int i,j; double zz; for(i=0,j=0;i<Bars && j<3;i++) { zz=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i); if(zz!=0) { zzbar[j]=i; zzp[j]=zz; j++; } } return; }
Привет. Я делаю так. Функция ищет три последних вершины.
Не дает мне покоя этот ZigZag, пытаюсь загнать в массив значения 10 последних вершин ZZ
#property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "https://www.metaquotes.net/" int PrevTime=0; int init() { return(0); } int deinit() { return(0); } int start() { int cnt1, cnt2=0; double ZZ_Mass[10][2],ZZ1,ZZ2; if (iTime(NULL,0,0)>PrevTime) { PrevTime=iTime(NULL,0,0); for (cnt1=1;cnt1<iBars(NULL,0);cnt1++) { ZZ1=iCustom(NULL,0,"ZigZag",12,5,3,1,cnt1); ZZ2=iCustom(NULL,0,"ZigZag",12,5,3,2,cnt1); if (ZZ1!=0 && ZZ2!=0) Print ("~~~~~~~~~~~~~~~~~~~~~~ZZ1 = ", ZZ1, " / ZZ2 = ", ZZ2 ); if (ZZ1!=0) { ZZ_Mass [cnt2][0]=ZZ1; ZZ_Mass [cnt2][1]=cnt1; cnt2++; } if (ZZ2!=0) { ZZ_Mass [cnt2][0]=ZZ2; ZZ_Mass [cnt2][1]=cnt1; cnt2++; } if (cnt2==10) break; } //for (cnt2=0; cnt2<10; cnt2++) Print ("----------------Вершина =", cnt2, " = ", ZZ_Mass [cnt2][0]); } return(0); }
Что-то снова делаю не так, ибо вылезает:
1) Каким-то образом на одном баре 2 вершины:
2007.10.26 18:57:41 2007.10.16 11:00 TestZZ EURUSD,H1: ~~~~~~~~~~~~~~~~~~~~~~ZZ1
= 1.4225 / ZZ2 = 1.4157
2007.10.26 18:57:41 2007.10.16 10:00 TestZZ EURUSD,H1: ~~~~~~~~~~~~~~~~~~~~~~ZZ1
= 1.4225 / ZZ2 = 1.4157
2007.10.26 18:57:41 2007.10.12 15:00 TestZZ EURUSD,H1: ~~~~~~~~~~~~~~~~~~~~~~ZZ1
= 1.4208 / ZZ2 = 1.4159
2007.10.26 18:57:41 2007.09.26 00:00 ZigZag EURUSD,H1: loaded successfully
2) По логики ZZ вершины должны чередоваться, т.е если 9>8 то 8<7, 7>6 .... или если 9<8 то 8>7, 7<6 и т.д., у меня снова не так:
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =9 = 1.3848
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =8 = 1.3828
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =7 = 1.3893
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =6 = 1.3987
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =5 = 1.3941
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =4 = 1.3935
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =3 = 1.4062
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =2 = 1.4098
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =1 = 1.4119
2007.10.26 19:02:54 2007.09.21 21:00 TestZZ EURUSD,H1: ----------------Вершина =0 = 1.4042
Кто силен? Подскажите, где косяк? Или с ZZ не все так просто, как
мне кажется?
Привет.
А зачем так сложно все. Крутани ЗЗ в цикле с обратным отсчетом от 0 бара и запиши при ненулевых значениях ряд ЗЗ в массив или в 10 разных переменных типа ЗЗ1 ... ЗЗ10
Думаю такой код своять можно минут за 20. Попутного тренда и больших профитов.
Кажется и правда, что-то я перемудрил с буферами, так вроде работает как надо, если не важно какая вершина (верх/низ) ведь есть же нулевой буфер). Хоть ответ и лежал на поверхности - сам увидеть не мог) СПАСИБО.
Ты мог увидеть сам. Для этого всего лишь нужно было сделать буферы видимыми на графике. Это описывалось (с картинкой) вот в этой теме: Ищется быстрый ZigZag
Кто-нибудь может подсказать как его вообще использовать этот Zig-Zag? Я имею в виду не стратегию, а принцип. Вот это вот значение, которое мы получаем написав
ZZ1=iCustom(NULL,0,"ZigZag",12,5,3,1,cnt1);
Что оно показывает и что с ним дальше делать? И какие там параметры?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В эксперте используется ZZ, периодически в логи выводится :
2007.10.22 15:06:37 Zigzag USDCHF,H1: uninit reason 1
Что бы это значило, откуда это? Нигде не нашел...