Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1410

 
Alexey Viktorov:

Внимательно почитайте документацию и пример кода. У вас неправильно организован цикл.

Только не говорите, что цикл for и while одинаково работают. Проблема не в этом, а в выделенных строках.

Спасибо, это я читал(с этого начал)

Все работает в моем коде, просто глюк в МТ4, графиков 8, а видит 7(

2021.03.10 11:59:23.914 Label EURCAD,M15: 9/
2021.03.10 11:59:23.914 Label EURCAD,M15: 8/
2021.03.10 11:59:23.914 Label EURCAD,M15: 7/
2021.03.10 11:59:23.914 Label EURCAD,M15: 6/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 5/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 4/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 3/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 2/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 1/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 0/EURUSD
 
Маловероятно. Сколько раз я грешил на платформу, всегда оказывался неправ сам.
 
Aleksei Stepanenko:
Маловероятно. Сколько раз я грешил на платформу, всегда оказывался неправ сам.
не видит один конкретный график, все остальные видит и новые, если добавляю, видит
 
long currChart=ChartFirst();
int i=0;
while(currChart>=0)
  {
  Print(i,ChartSymbol(currChart)," ID =",currChart);
  currChart=ChartNext(currChart); // на основании предыдущего получим новый график
  i++;// не забудем увеличить счетчик
  }

Может так попробуйте

 
Aleksei Stepanenko:

Может так попробуйте

Тоже самое

2021.03.10 12:45:48.434 Label EURCAD,M15: 8/
2021.03.10 12:45:48.434 Label EURCAD,M15: 7/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 6/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 5/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 4/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 3/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 2/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 1/EURUSD
 

А почему печать отличается? Другой код?

Print(i,ChartSymbol(currChart)," ID =",currChart);
2021.03.10 12:45:48.434 Label EURCAD,M15: 1/EURUSD

Сколько графиков открыто, какие? Символ, период.

Развёрнуты/свёрнуты?
 
MakarFX:

Спасибо, это я читал(с этого начал)

Все работает в моем коде, просто глюк в МТ4, графиков 8, а видит 7(

Очень плохо читал. Наверное как принудиловку в школе. Вроде прочёл, а в голове ничего не отложилось.

Вот тут возьмите пример. Там правда цель другая, но всё-же перебор открытых графиков не меняется в зависимости от цели этого перебора.

Или вот код

/********************Script program start function*******************/
void OnStart()
 {
  long prevChart = 0;
  int i = 0;
  do
   {
    prevChart = ChartNext(prevChart);
    ChartSetInteger(prevChart, CHART_BRING_TO_TOP, 0, true);
    Sleep(200);
    i++;
   }
  while(prevChart >= 0);
 }/*******************************************************************/
Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2021.01.15
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Aleksei Stepanenko:

А почему печать отличается? Другой код?

Сколько графиков открыто, какие? Символ, период.

Развёрнуты/свёрнуты?
Alexey Viktorov:

Очень плохо читал. Наверное как принудиловку в школе. Вроде прочёл, а в голове ничего не отложилось.

Вот тут возьмите пример. Там правда цель другая, но всё-же перебор открытых графиков не меняется в зависимости от цели этого перебора.

Или вот код

Вопрос снят, перезапуск терминала решил проблему

 

Подскажите как избежать array out of range в этом коде

double GetExtremumZigZagPriceHigh(string symbol="",ENUM_TIMEFRAMES timeframe=0,int extremum_number=0)//,int depth=12,int deviation=5,int backstep=3)
  {
   if(symbol=="") //Если symbol = "" , то..
      symbol=Symbol(); //Присвоить переменной symbol значение текущего символа на графике.

//Объявить необходимые переменные:
   double price[];                                                 //Цена экстремума выбранная из массива таймсерии.
//datetime time[];
   int    count;                                                   //Счетчик цикла.
int bars_quantity=1000; //Количество баров на графике.
int extremum_count=0;                                           //Счетчик экстремумов.

   ArraySetAsSeries(price,true);                   //Устанавить флаг, чтобы индексация массива производилась как в таймсериях.
   CopyBuffer(handle,1,0,bars_quantity,price);     //Скопировать в динамический массив price[] цены указанного количества баров.

   for(count=1; count<bars_quantity; count++) //Запустить цикл, который будет бежать по каждому бару.
     {
      if(price[count]!=0) //Если Цена Зигзага есть, то есть не равна нулю, то..
        {
         extremum_count++;        //Увеличить счетчик экстремумов на одну единицу.

         if(extremum_count>extremum_number) //Если счетчик экстремумов превысил значение указанного номера экстремума, то..
            return(price[count]);                 //Вернуть эту цену.
        }
     }
//Print("GetExtremumZigZagPrice(): Экстремум ЗигЗага ",extremum_number," не найден"); //А до тех пор, пока ЗигЗаг не показывает цену,
   return(0);                                                                          //Печатать Print, и возвращать ноль.
  }

Ругается на это место

if(price[count]!=0)
 
CopyBuffer

Возвращаемое значение

Количество скопированных элементов массива либо -1 в случае ошибки .

Примечание

При запросе данных из индикатора, если запрашиваемые таймсерии еще не построены или их необходимо загрузить с сервера, то функция сразу же вернет -1, но при этом сам процесс загрузки/построения будет инициирован.

При запросе данных из эксперта или скрипта, будет инициирована загрузка с сервера , если локально этих данных у терминала нет, либо начнется построение нужной таймсерии, если данные можно построить из локальной истории, но они еще не готовы. Функция вернет то количество данных, которые будут готовы к моменту истечения таймаута.

Проверять надо, не факт что у Вас там bars_quantity