Вот функция:
int fZZ (int Ext_Depth, int Ext_Deviation, int Ext_Backstep, int Limit_Bars, int cnt_Bars, bool change_Bar, int flag_NewBar, double a_High[], double a_Low[], double& Low_buffer[], double& High_buffer[], double& ZZ_buffer[]) { int pos, counted_bars = cnt_Bars - Limit_Bars; int limit, counterZ, whatlookfor; int shift, back, lasthighpos, lastlowpos; double val, res; double curlow, curhigh, lasthigh, lastlow; bool downloadhistory = false; //---- if (Limit_Bars == cnt_Bars) { ArrayResize (Low_buffer, cnt_Bars); ArrayResize (High_buffer, cnt_Bars); ArrayResize (ZZ_buffer, cnt_Bars); } //---- if (counted_bars == 0 && downloadhistory) // history was downloaded { ArrayInitialize (ZZ_buffer, 0.0); ArrayInitialize (High_buffer, 0.0); ArrayInitialize (Low_buffer, 0.0); } if (counted_bars == 0) { limit = cnt_Bars - Ext_Depth; downloadhistory = true; } if (counted_bars > 0) { while (counterZ < level && pos < 100) { res = ZZ_buffer[pos]; if (res != 0) {counterZ++;} pos++; } pos--; limit = pos; if (Low_buffer[pos] != 0) { curlow = Low_buffer[pos]; whatlookfor = 1; } else { curhigh = High_buffer[pos]; whatlookfor = -1; } for (pos = limit - 1; pos >= 0; pos--) { //ZZ_buffer[pos] = 0.0; fCompletionArray (StringConcatenate ("fZZ(", Ext_Depth, ",", Ext_Deviation, ",", Ext_Backstep, ")"), "ZZ_buffer", pos, change_Bar, flag_NewBar == 1 && Limit_Bars != cnt_Bars, true, 0.0, ZZ_buffer, cnt_Bars); //Low_buffer[pos] = 0.0; fCompletionArray (StringConcatenate ("fZZ(", Ext_Depth, ",", Ext_Deviation, ",", Ext_Backstep, ")"), "Low_buffer", pos, change_Bar, flag_NewBar == 1 && Limit_Bars != cnt_Bars, true, 0.0, Low_buffer, cnt_Bars); //High_buffer[pos] = 0.0; fCompletionArray (StringConcatenate ("fZZ(", Ext_Depth, ",", Ext_Deviation, ",", Ext_Backstep, ")"), "High_buffer", pos, change_Bar, flag_NewBar == 1 && Limit_Bars != cnt_Bars, true, 0.0, High_buffer, cnt_Bars); } } for (shift = limit; shift >= 0; shift--) { val = a_Low[fLowest (a_Low, Ext_Depth, shift)]; if (val == lastlow) {val = 0.0;} else { lastlow = val; if ((a_Low[shift] - val) > Ext_Deviation) {val = 0.0;} else { for (back = 1; back <= Ext_Backstep; back++) { res = Low_buffer[shift+back]; if ((res != 0) && (res > val)) { //Low_buffer[shift+back] = 0.0; fCompletionArray (StringConcatenate ("fZZ(", Ext_Depth, ",", Ext_Deviation, ",", Ext_Backstep, ")"), "Low_buffer", shift+back, change_Bar, flag_NewBar == 1 && Limit_Bars != cnt_Bars, false, 0.0, Low_buffer, cnt_Bars); } } } } fCompletionArray (StringConcatenate ("fZZ(", Ext_Depth, ",", Ext_Deviation, ",", Ext_Backstep, ")"), "Low_buffer", shift, change_Bar, flag_NewBar == 1 && Limit_Bars != cnt_Bars, true, IIFd ((a_Low[shift] == val), val, 0.0), Low_buffer, cnt_Bars); /*if (a_Low[shift] == val) {Low_buffer[shift] = val;} else {Low_buffer[shift] = 0.0;}*/ //--- high val = a_High[fHighest (a_High, Ext_Depth, shift)]; if (val == lasthigh) {val = 0.0;} else { lasthigh = val; if ((val - a_High[shift]) > Ext_Deviation) {val = 0.0;} else { for (back = 1; back <= Ext_Backstep; back++) { res = High_buffer[shift+back]; if ((res != 0) && (res < val)) { //High_buffer[shift+back] = 0.0; fCompletionArray (StringConcatenate ("fZZ(", Ext_Depth, ",", Ext_Deviation, ",", Ext_Backstep, ")"), "High_buffer", shift+back, change_Bar, flag_NewBar == 1 && Limit_Bars != cnt_Bars, false, 0.0, High_buffer, cnt_Bars); } } } } fCompletionArray (StringConcatenate ("fZZ(", Ext_Depth, ",", Ext_Deviation, ",", Ext_Backstep, ")"), "High_buffer", shift, change_Bar, flag_NewBar == 1 && Limit_Bars != cnt_Bars, true, IIFd ((a_High[shift] == val), val, 0.0), High_buffer, cnt_Bars); /*if (a_High[shift] == val) {High_buffer[shift] = val;} else {High_buffer[shift] = 0.0;}*/ if (Limit_Bars != cnt_Bars && PrintCom) {Print ("fZZ(): Low_buffer[", shift, "] = ", Low_buffer[shift], "; High_buffer[", shift, "] = ", High_buffer[shift]);} } //---- final cutting if (whatlookfor == 0) { lastlow = 0; lasthigh = 0; } else { lastlow = curlow; lasthigh = curhigh; } for (shift = limit; shift >= 0; shift--) { res = 0.0; switch (whatlookfor) { case 0: // look for peak or lawn if (lastlow == 0 && lasthigh == 0) { if (High_buffer[shift] != 0) { lasthigh = a_High[shift]; lasthighpos = shift; whatlookfor = -1; //ZZ_buffer[shift] = lasthigh; res = 1; } if (Low_buffer[shift] != 0) { lastlow = a_Low[shift]; lastlowpos = shift; whatlookfor = 1; //ZZ_buffer[shift] = lastlow; res = 1; } fCompletionArray (StringConcatenate ("fZZ(", Ext_Depth, ",", Ext_Deviation, ",", Ext_Backstep, ")"), "ZZ_buffer", shift, change_Bar, flag_NewBar == 1 && Limit_Bars != cnt_Bars, true, IIFd ((High_buffer[shift] != 0), lasthigh, IIFd ((Low_buffer[shift] != 0), lastlow, 0.0)), ZZ_buffer, cnt_Bars); } break; case 1: // look for peak if (Low_buffer[shift] != 0.0 && Low_buffer[shift] < lastlow && High_buffer[shift] == 0.0) { ZZ_buffer[lastlowpos] = 0.0; lastlowpos = shift; lastlow = Low_buffer[shift]; //ZZ_buffer[shift] = lastlow; fCompletionArray (StringConcatenate ("fZZ(", Ext_Depth, ",", Ext_Deviation, ",", Ext_Backstep, ")"), "ZZ_buffer", shift, change_Bar, flag_NewBar == 1 && Limit_Bars != cnt_Bars, true, lastlow, ZZ_buffer, cnt_Bars); res = 1; } if (High_buffer[shift] != 0.0 && Low_buffer[shift] == 0.0) { lasthigh = High_buffer[shift]; lasthighpos = shift; //ZZ_buffer[shift] = lasthigh; fCompletionArray (StringConcatenate ("fZZ(", Ext_Depth, ",", Ext_Deviation, ",", Ext_Backstep, ")"), "ZZ_buffer", shift, change_Bar, flag_NewBar == 1 && Limit_Bars != cnt_Bars, true, lasthigh, ZZ_buffer, cnt_Bars); whatlookfor = -1; res = 1; } break; case -1: // look for lawn if (High_buffer[shift]!= 0.0 && High_buffer[shift] > lasthigh && Low_buffer[shift] == 0.0) { ZZ_buffer[lasthighpos] = 0.0; lasthighpos = shift; lasthigh = High_buffer[shift]; //ZZ_buffer[shift] = lasthigh; fCompletionArray (StringConcatenate ("fZZ(", Ext_Depth, ",", Ext_Deviation, ",", Ext_Backstep, ")"), "ZZ_buffer", shift, change_Bar, flag_NewBar == 1 && Limit_Bars != cnt_Bars, true, lasthigh, ZZ_buffer, cnt_Bars); } if (Low_buffer[shift] != 0.0 && High_buffer[shift] == 0.0) { lastlow = Low_buffer[shift]; lastlowpos = shift; //ZZ_buffer[shift] = lastlow; fCompletionArray (StringConcatenate ("fZZ(", Ext_Depth, ",", Ext_Deviation, ",", Ext_Backstep, ")"), "ZZ_buffer", shift, change_Bar, flag_NewBar == 1 && Limit_Bars != cnt_Bars, true, lastlow, ZZ_buffer, cnt_Bars); whatlookfor = 1; } break; default: return; } if (Limit_Bars != cnt_Bars && PrintCom) {Print ("fZZ(): ZZ_buffer[", shift, "] = ", ZZ_buffer[shift]);} } //---- return (Limit_Bars); }Кто-нибудь сможет дать дельный совет? Я джаже не знаю что запустить на проверку (Принтовать), чтобы попытаться отыскать ошибку???
Функция:
int fCompletionArray (string txt, // Отличительный текст string Name, // Имя обрабатываемого массива int shift, // Номер обрабатываемого бара bool Cond1, // Условие изменяемости массива bool Cond2, // Флаг прихода нового бара bool Cond3, // Флаг обратного счёта баров double Value, // Вносимое значение в обрабатываемый бар double& Out_Array[], // Обрабатываемый массив int cntBar) // Количество всех обработанных баров- это замена буферного индикатора на динамический массив.
Например, когда я брал зигзаг от уважаемого нена (nen),
то оказалось, что он работает на положительных данных,
а между сериями high и low должна быть дельта хотя бы 0,0001.
... иначе оно виснет.
В итоге перед зигзагом прибавлял константу, а после- вычитал.
Может поможет.
ДА!... Как перезагрузить терминал - народ отзывчив - "Всегда пожалуйста!"
"Вот функция", вырезанная х.з. откуда и зачем- никому не интересно в ней копаться.
Тем более, что если кажется, что там работы на 15 минут- то реально часа 2-3.
Работа тупая- делал, знаю. Ловит на невнимательности.
Зачем возмущаться? пообещайте, наконец, денег.
.
P.S.: не возьмусь. Может кто-то.
.
P.S.2: все просто. все буфера которые есть в функции -
должны стать буферами индикатора.
Т.е. написать ZigZag2, который обязан показать LowBuffer / HighBuffer, а потом ZZBuffer.
Ессно, все должно совпасть с ZigZag индикатором.
.
А там смотреть. Если пусто- разбираться.
.
Смешной вопрос.
"У меня в HighBuffer пусто". Поздравляю.
Нанимайте учителя разбираться. К кому претензия-то?
Уважаемый! Х.З. откуда - это моего мозга работа!
Этот мозг, как часть моего организма лишён иллюзий, что мимо пробегающий кодер будет в этом моём коде разбираться, но не предоставив код, этот самый первый пробегающий мимо кодер бросит: "А где код?" И чтобы упредить "следующий акт" - "Код в студию!"...
А вот надежду, что у кого-то, заглянувшего на эту страничку и прочитавшего первый пост родится просто мысль в каком направлении мне копать - НА ЭТО НАДЕЖДА ВСЕГДА ЕСТЬ!!! НАДЕЖДА на некий "мозговой штурм"... Любой процесс требует стимуляции - кумекание не исключение!... Кстати, стимуляция деньгами далеко не всегда "лучший и надёжный способ"! И при том, не нужно забывать, что перед "Б" ВСЕГДА сдедует "А", и пишущий сначала ждёт от читающего "ПОНИМАНИЯ" (о содержании своего вопроса)! А этот процесс никакими деньгами не стимулируешь!... :)))
И при чём здесь разговор о каких-то претензиях - это просто жизненный опыт (взляд на жизнь) того же мозга... :)
P.S. Про "пообещайте денег"... Мне проще сделать самому, чем выслушивать многозначительный трёп, что "так как я хочу у меня не получится"! Умение "ГОВОРИТЬ" не должно отставать от умения "СЛЫШАТЬ"!
TarasBY:
Умение "ГОВОРИТЬ" не должно отставать от умения "СЛЫШАТЬ"!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Форум работает "хуже не куда"...
Хочу "скормить" ZigZag`у вместо привычных баровых значений, бары Эквити виртуальной корзины ордеров от момента Zero_Point. Каждый бар на любом TF имеет четыре привычных значения ("цены"). Индикаторы (ZigZag не единственный), которые я сделал на эквити корзины, запускаются пользовательскими функциями (впоследствии сделаю библиотеку индюков на эквити корзины).