Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1410

 
Alexey Viktorov:

Lea atentamente la documentación y el código de ejemplo. Su bucle no está organizado correctamente.

No me digas que los bucles for y while funcionan igual. Ese no es el problema, sino las líneas resaltadas.

Gracias, lo he leído (por ahí empecé)

Todo funciona en mi código, sólo un fallo en MT4, gráficos 8 pero ve 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
 
Poco probable. Las veces que he pecado sobre la plataforma, siempre he resultado estar equivocado yo mismo.
 
Aleksei Stepanenko:
Poco probable. Cuántas veces he echado la culpa a la plataforma, siempre resulta que yo mismo me equivoco.
No puedo ver un gráfico en particular, puedo ver todos los demás y si añado uno nuevo, puedo verlo
 
long currChart=ChartFirst();
int i=0;
while(currChart>=0)
  {
  Print(i,ChartSymbol(currChart)," ID =",currChart);
  currChart=ChartNext(currChart); // на основании предыдущего получим новый график
  i++;// не забудем увеличить счетчик
  }

¿Por qué no pruebas esto?

 
Aleksei Stepanenko:

¿Por qué no pruebas esto?

Lo mismo.

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
 

¿Por qué la impresión es diferente? ¿Código diferente?

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

¿Cuántas cartas están abiertas, cuáles? Símbolo, punto.

¿Desplegado/desplegado?
 
MakarFX:

Gracias, eso es lo que he leído (por ahí empecé).

Todo funciona en mi código, sólo un fallo en MT4, gráficos 8 pero ve 7(

Muy mala lectura. Probablemente como la lectura forzada en la escuela. Lo he leído pero no se me ha grabado nada en el cerebro.

He aquí un ejemplo. El propósito es diferente allí, pero aún así la enumeración de las cartas abiertas no cambia dependiendo del propósito de la enumeración.

O aquí está el código

/********************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:

¿Por qué la impresión es diferente? ¿Código diferente?

¿Cuántas cartas están abiertas, cuáles? Símbolo, punto.

¿Desplegado/desplegado?
Alexey Viktorov:

Muy mala lectura. Debe haber sido como una lectura forzada en la escuela. Es decir, lo leí, pero no se me quedó nada en la cabeza.

He aquí un ejemplo. El objetivo es diferente en este caso, pero aún así la enumeración de cartas abiertas no cambia en función del objetivo de esta enumeración.

O aquí está el código

La cuestión se elimina, el problema se resuelve reiniciando el terminal

 

Ayúdame a evitar el array fuera de rango en este código

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, и возвращать ноль.
  }

Es esta ubicación la que se está desechando.

if(price[count]!=0)
 
CopyBuffer

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

Número de elementos del array copiados o -1 en caso de error .

Nota

Cuando se solicitan datos de un indicador, si las series temporales solicitadas no han sido construidas todavía o necesitan ser descargadas del servidor, la función devolverá inmediatamente -1, pero se iniciará el proceso de carga/construcción propiamente dicho.

Cuando se solicitan datos al Asesor Experto o a un script, se iniciará la carga desde el servidor si el terminal no tiene estos datos localmente, o se iniciará la construcción de las series temporales requeridas si los datos pueden ser construidos desde el historial local, pero aún no están listos. La función devolverá la cantidad de datos que estarán listos cuando el tiempo de espera expire.

Comprueba si tienes bars_quantity ahí

Razón de la queja: