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

 
Yevhenii Levchenko:

¿Qué tengo que decir: ocurre y se debe también a algún tipo de fisuras en las cotizaciones o estoy escribiendo algo mal?

¿Quieres que te diga que el probador de MT4 no funciona correctamente? - No escuchará su captura de pantalla con errores en ticks o barras - el probador generará todo desde cualquier TF bajo posible

los desarrolladores siempre han respondido a preguntas como la suya: ¡escriba los códigos correctamente!

te mostré un ejemplo de cómo escribir tu código.... no puedo verlo, y no es interesante :))) - ocupado, leyendo artículos, me pondré a trabajar en mis códigos

 
Igor Makanu:

¿Quieres que te diga que el probador de MT4 no funciona correctamente? - No escuchará su captura de pantalla con errores en ticks o barras - el probador generará todo desde cualquier TF bajo posible

los desarrolladores siempre han respondido a preguntas como la suya: ¡escriba los códigos correctamente!

te mostré un ejemplo de cómo escribir tu código.... no puedo verlo, y no es interesante :))) - ocupado, leyendo artículos, me pondré a trabajar en mis códigos

¡Bien! Gracias

 
Yevhenii Levchenko:

¡Bien! Gracias

Puede ser útil: https://www.mql5.com/ru/forum/165405#comment_5602248

Архивные котировки от Metaquotes
Архивные котировки от Metaquotes
  • 2017.01.02
  • www.mql5.com
Ситуация: В терминале MT4 по клавише F2 можно закачать архивные котировки. Они нужны всем, кто разрабатывает свою торговую систему...
 

Buenas tardes, compañeros. Estoy aprendiendo a escribir cosas sencillas en mql4, ahora estoy tratando de trabajar con arrays. No puedo entender el error en este pedazo de código:

   double d1 = NormalizeDouble(Low[iLowest(NULL, 0, MODE_LOW, MaxLimit, 0)],4);
   double d2 = NormalizeDouble(High[iHighest(NULL, 0, MODE_HIGH, MaxLimit, 0)],4);
   double CrossBarsNum[][2];
   for (double d = d1; d <= d2; d += 0.0001)
     {
       double a = 0.0;
       for(int i = 0; i < MaxLimit; i++)
           if(d > Low[i] && d < High[i])
               a+=1;
               CrossBarsNum[(d-d1)/0.0001,0] = d;
               CrossBarsNum[(d-d1)/0.0001,1] = a;

Se bloquea en las dos últimas líneas con la expresión entera esperada. Por lo que he entendido, un índice en un array puede establecerse mediante una fórmula. Es necesario buscar en las cadenas de la matriz y registrar secuencialmente las comillas y el número de barras que las contienen. La fórmula da un valor entero (de 0 en adelante en incrementos de uno), entonces ¿cuál es el error?

 
Azat0t:

Buenas tardes, compañeros. Estoy aprendiendo a escribir cosas sencillas en mql4, ahora estoy tratando de trabajar con arrays. No puedo entender el error en este pedazo de código:

Se bloquea en las dos últimas líneas con la expresión entera esperada. Por lo que he entendido, un índice en un array puede establecerse mediante una fórmula. Es necesario buscar en las cadenas de la matriz y registrar secuencialmente las comillas y el número de barras que las contienen. La fórmula devuelve un valor entero (de 0 en adelante en pasos de uno), entonces ¿cuál es el error?

Haz que el índice del array sea de tipo int, no double. El índice del array debe ser un número entero.

 
Gracias. Casi siempre lo he hecho. Después de cargar, pulsé "Actualizar" y las comillas eran diferentes. Olvidé que había establecido un límite de tiempo para el trabajo del robot. :)
 
Azat0t:

Buenas tardes, compañeros. Estoy aprendiendo a escribir cosas sencillas en mql4, ahora estoy tratando de trabajar con arrays. No puedo entender el error en este pedazo de código:

Se bloquea en las dos últimas líneas con la expresión entera esperada. Por lo que he entendido, un índice en un array puede establecerse mediante una fórmula. Es necesario buscar en las cadenas de la matriz y registrar secuencialmente las comillas y el número de barras que las contienen. La fórmula devuelve un valor entero (de 0 en adelante en pasos de uno), así que ¿dónde está el error?

Utilizar una conversión de tipo explícita

               CrossBarsNum[int((d-d1)/0.0001),0] = d;
               CrossBarsNum[int((d-d1)/0.0001),1] = a;
 
Gracias, he corregido el error, pero sigue sin dar resultado: el array no se llena. ¿Con qué puede estar relacionado?
   int handle;
   handle = FileOpen("FindLevels.txt", FILE_CSV|FILE_WRITE, '\t');
   double d1 = NormalizeDouble(Low[iLowest(NULL, 0, MODE_LOW, MaxLimit, 0)],4);
   double d2 = NormalizeDouble(High[iHighest(NULL, 0, MODE_HIGH, MaxLimit, 0)],4);
   double CrossBarsNum[][2];
   for (double d = d1; d <= d2; d += 0.0001)
     {
       double a = 0.0;
       for(int i = 0; i < MaxLimit; i++)
           if(d > Low[i] && d < High[i])
               a++;
               CrossBarsNum[int((d-d1)/0.0001),0] = a;
               CrossBarsNum[int((d-d1)/0.0001),1] = d;
     } 
   FileWrite(handle, CrossBarsNum[11,1], d, d1, d2, a, ArraySize(CrossBarsNum));
   //FileWriteArray(handle, CrossBarsNum, 0, WHOLE_ARRAY);
   FileClose(handle);
   return(0);
Las variables d, d1, d2 funcionan exactamente
 
Azat0t:
Gracias, he corregido el error, pero aún no hay resultado: el array no se llena. ¿Con qué se puede relacionar esto? Las variables d, d1, d2 funcionan exactamente
El tamaño de su matriz es siempre cero en la primera dimensión. No he visto ArrayResize() en ninguna parte
 
Azat0t:
Gracias, he corregido el error, pero aún no hay resultado: el array no se llena. ¿De qué puede tratarse? Las variables d, d1, d2 funcionan exactamente

No olvides poner

#property strict
Arregla todos los errores y quizás todo se solucione. Aprende a utilizar el depurador. Con la ejecución paso a paso se revelan todos los problemas.
Razón de la queja: