Скачать MetaTrader 5

Предложение изменить код примера в документации MQL4.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
У тебя есть торговый сигнал? Опубликуй его и на своем блоге!
khorosh
8192
khorosh 2016.03.22 19:28 

Впервые столкнулся с необходимостью выполнения однотипного действия на всех открытых графиках терминала МТ4. Стал искать как это можно сделать в документации. В описании функции ChartNext() увидел пример,  где в цикле происходил перебор графиков. Не долго думая(плохая привычка - не думая использовать на халяву готовое) скопировал этот пример в свой эксперт. Вроде как бы работал нормально, но в процессе эксплуатации   выяснилось, что первый график в цикле пропущен. Только тогда вник в  код этого примера. Ну то, что в цикле первый график пропущен, видимо так было задумано, так как принт информации для первого графика был выполнен первоначально вне цикла. Но, чтобы такие как я больше не попадали в такую ситуацию, лучше всё таки в примере сделать цикл полным, чтобы его можно было скопировать и использовать в своих разработках. Кроме того пример не лучший образец для начинающих программистов, так как грешит необоснованно большим количеством лишних и не нужных переменных.

Пример:

//--- переменные для идентификаторов графиков 
   long currChart,prevChart=ChartFirst(); 
   int i=0,limit=100; 
   Print("ChartFirst = ",ChartSymbol(prevChart)," ID = ",prevChart); 
   while(i<limit)// у нас наверняка не больше 100 открытых графиков 
     { 
      currChart=ChartNext(prevChart); // на основании предыдущего получим новый график 
      if(currChart<0) break;          // достигли конца списка графиков 
      Print(i,ChartSymbol(currChart)," ID =",currChart); 
      prevChart=currChart;// запомним идентификатор текущего графика для ChartNext() 
      i++;// не забудем увеличить счетчик 
     }

 Так сделал я:

long currChart = ChartFirst();  
   while(true)
     { 
      Print(ChartSymbol(currChart)," ID =",currChart);      
      if(ChartNext(currChart)==-1) break;
      currChart=ChartNext(currChart);  
     }
Vasiliy Sokolov
21676
Vasiliy Sokolov 2016.03.22 19:44  

Раз пошла такая пьянка:

for(long currChart = ChartFirst();currChart != -1; currChart=ChartNext(currChart)) 
      Print(ChartSymbol(currChart)," ID =",currChart);
khorosh
8192
khorosh 2016.03.22 19:51  
Vasiliy Sokolov:

Раз пошла такая пьянка:

Ну ващще!)
Yerlan Imangeldinov
1030
Yerlan Imangeldinov 2016.04.23 00:55  
Еще добавьте перегрузку операции, чтобы все новички вас ненавидели и материли))
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий