bool b=true; for (i=0; i<AmountCandle; i++) if (diapazon1candle <= raznitca[i]) { b=false; break; } if (b) Print ( "Есть подтверждение");
Искреннее Спасибо. Работает.
А если быть точнее - не работает как надо.
Например, AmountCandle = 15.
Он находит, что, допустим 3 бара, соответствует условиям, и делает Принт. А следующие 12 баров сбрасывает. Но надо, чтобы он проверил эти ВСЕ бары и только потом давал Принт!
Он находит, что, допустим 3 бара, соответствует условиям, и делает Принт. А следующие 12 баров сбрасывает. Но надо, чтобы он проверил эти ВСЕ бары и только потом давал Принт!
приведенный мой код так не работает.
он обрывает проверку если встречает неподходящее условие. и ставит флаг = false.
инчае проверяет все до конца и при b=true выдает вам принт.
приведенный мой код так не работает.
он обрывает проверку если встречает неподходящее условие. и ставит флаг = false.
инчае проверяет все до конца и при b=true выдает вам принт.
Именно так он и делает - не обрывает проверку. Проверьте пожалуйста у себя.
extern string A1 = "Поглощение"; extern int TF1 = 60; // текущий ТФ extern int TF2 = 240; // h1 extern int TF3 = 1440;// h4 extern int TF4 = 10080; // D1 extern int AmountCandle = 5; // сколько брать предыдущих свечей для сравнения extern int PersentA1 = 5; // процент от диапазона свечи extern bool SignalAlert = true; extern bool SignalEmail = false; extern string InputEmail = ""; //========объявляем переменные double alow [200]; // значения ЛОУ свечей в массиве double ahigh [200]; // Значения ХАЙ свечей в массиве double raznitca [200]; // Значения хай минус лоу double low2TF1, low1TF1, high1TF1, high2TF1, diapazon1candle,Close1Candle, Open1Candle ; int init() { return(0); } int deinit() { return(0); } int start() { //===2 свеча TF1 high2TF1 = iHigh (Symbol(),TF1,2); // цена открытия второй свечи 1 символ low2TF1 = iLow (Symbol(),TF1,2); // цена закрытия второй свечи 1 символ //===1 свеча TF1 high1TF1 = iHigh (Symbol(),TF1,1); // цена открытия второй свечи 1 символ low1TF1 = iLow (Symbol(),TF1,1); // цена закрытия второй свечи 1 символ Close1Candle = iClose(Symbol(),TF1,1); Open1Candle = iOpen(Symbol(),TF1,1); //=====Вычисляем диапазон первой свечи для сравнения с массивом diapazon1candle = high1TF1 - low2TF1; // Print ("Диапазон первой свечи - " + diapazon1candle); //=====циклы for (int i = 1; i <=AmountCandle; i++) // задействуем цикл для ЛОУ свечей. AmountCandle - количество свечей для обработки { double iii = Low[i]; // присваиваем iii значения лоу этих свечей alow [i] = iii; // передаем все значения в массив } // ====Аналогичный цикл для ХАЙ свечей for ( i = 1; i <=AmountCandle; i++) { double hh = High[i]; // присваиваем hh значения лоу этих свечей ahigh [i] = hh; // передаем все значения в массив } //======== вычисление разницы хай минус лоу for ( i = 1; i <=AmountCandle; i++) { raznitca[i] = (ahigh [i] - alow [i]); // делаем разницу в пунктах } //************** ВОТ ВАШ КОД bool b=true; for (i=2; i<=AmountCandle; i++) // тут i = 2 потому что во второй свечи начинаем сравнивать с первой { if (diapazon1candle <= raznitca[i]) { b=false; break; } if (b == true) { Print ("Свеча " + i + " Диапазон 1 свечи: " + diapazon1candle*1000 + " разница: " + raznitca[i]*1000); } } return(0); }
Он по очереди проверяет, нашел 1 условие - пропустил его на принт, не нашел второе - сбросил и так по кругу
у вас с индексацией все в порядке?
во первых, вся ваша писанина по циклам выглядит в итое так -
//=====циклы for (int i = 1; i <=AmountCandle; i++) raznitca[i] = (High[i] - Low[i]); // делаем разницу в пунктах
а этого текста не понял
// тут i = 2 потому что во второй свечи начинаем сравнивать с первой
где та первая?
у вас с индексацией все в порядке?
во первых, вся ваша писанина по циклам выглядит в итое так -
Ну на данном ТФ конечно так. Но я еще на этом графике буду брать данные с других ТФ, а там уже (High[i] - Low[i]) не сработает.
Поэтому, сделал так чтоб потом копи-пастом проще было.
А что с индексацией не так?
А вообще меня просто интересует первый вопрос. Остальное я сам доделаю.
в третьих
вы почто всунули условие внутрь цикла?
if (b == true) { Print ("Свеча " + i + " Диапазон 1 свечи: " + diapazon1candle*1000 + " разница: " + raznitca[i]*1000); }
у вас с индексацией все в порядке?
во первых, вся ваша писанина по циклам выглядит в итое так -
а этого текста не понял
// тут i = 2 потому что во второй свечи начинаем сравнивать с первой
где та первая?
а тут без разницы где она. Основной вопрос остается в первом посте
Делаю вот так:
Но на деле получается, что НА КАЖДОМ баре в массиве где выполняется это условие выполняется Принт. А надо - чтобы он выполнялся только если выполняется условие на ВСЕХ барах, а не по отдельности.
if (newbar==true) // делайте проверку при появлении только нового бара, чтобы не захламлять { int count; // счетчик количества count=0; for ( i = 1; i <=AmountCandle; i++) // AmountCandle и есть значение N - количество баров у которых берем ХАЙ { if (diapazon1candle > raznitca[i]) //diapazon1candle - хай 1 свечи, который сравниваем с предыдущими. raznitca[i] - в этом массиве содержатся ХАЙ цены N баров { сount++; } else break; } if (count ==AmountCandle) Print ( "Есть подтверждение"); }

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Делаю вот так:
Но на деле получается, что НА КАЖДОМ баре в массиве где выполняется это условие выполняется Принт. А надо - чтобы он выполнялся только если выполняется условие на ВСЕХ барах, а не по отдельности.
Допустим, AmountCandle = 15, надо чтобы Принт срабатывал когда diapazon1candle был больше ВСЕХ 15 баров.
Вот как это реализовать? У же голова кипит. Как только не пробовал...
Нужно именно это сравнение. ArrayMaximum и ArrayMinimum не предлагать, мне не подходит. Надо именно как сравнить со всеми элементами в массиве ВМЕСТЕ