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

 
ANDREY:

He añadido corchetes void PrintArray(double &eArray[]) El compilador no ha mostrado ningún error ni advertencia.
PERO..... la función Print() no imprimió una sola vez por alguna razón.

Entiendo tu pereza, porque yo también soy así. Si no te da pereza y mi entusiasmo lo sustituye, te agradeceré que me digas qué más falla en la función personalizada.

Gracias por la ayuda y perdón por las molestias.

¿Quizás la matriz está vacía? Compruébalo cambiando un poco la función

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }
Si imprime 0, busque un problema en el llenado de la matriz.
 
Alexey Viktorov:

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

He encontrado un error. En la última líneaPrint(str);has pasado str en lugar deestr. Lo arreglé y todo quedó bien.

Gracias a usted, ahora he comprendido este tema no sólo a grandes rasgos, sino en detalle. La única pregunta sin respuesta era sobre los puntos positivos de mi post

Gracias por su ayuda y apoyo.

 
Maxim Kuznetsov:

en el foro y en las publicaciones sobre C#, Delphi y todo lo demás...

Nunca he hecho esto, ¿puede algún enlace para "tontos"?
 
ANDREY:

He encontrado un error. En la última líneaPrint(str); has pasado str en lugar deestr. Lo arreglé y todo quedó bien.

Gracias a usted, ahora he comprendido este tema no sólo a grandes rasgos, sino en detalle. La única pregunta sin respuesta era sobre los puntos positivos de mi post

Gracias por su ayuda y apoyo.

No fui yo quien lo transmitió,

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Cualquier pregunta de los novatos en MQL4 y MQL5, ayuda y discusión de algoritmos y códigos

Aleksei Stepanenko, 2021.03.13 09:04

Print("-LoY[0]-", DoubleToString(LoY[0],4), "---LoY[1]--", DoubleToString(LoY[1],4), "---LoY[2]--" , DoubleToString(LoY[2],4), "---LoY[3]--" , DoubleToString(LoY[3],4),................  "---LoY[30]--" ,  DoubleToString(LoY[30],4) );

Es posible que desee imprimir una matriz o hacer una función separada para imprimir una matriz:

void PrintArray(double &eArray)
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

Y llamar desde cualquier lugar

PrintArray(LoY);

Simplemente no le presté atención. No entiendo cómo la compilación fue sin error...

¿Cuál es la respuesta si lo has calculado y has escrito toda la secuencia

ANDREY:

Creo que por fin lo he descubierto (soy un poco lento) ......

En la primera iteración, la variable de cadena str está vacía. Los caracteres =+ le dicen a str que se asigne a sí misma vacía (sin valores) y a sí misma vacía añade una cadena con valores, a saber,"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+",";. El valor de esta cadena es " --LoY[0]--, --1.6104-- ". Después de estas operaciones , str obtiene el valor "--LoY[0]--, --1.6104-- " en la primera iteración. Según he entendido en su terminología, esto se llama el primer elemento.

En la segunda iteración str ya tiene el primer elemento con el valor " --LoY[0]--, --1.6104-- " Los caracteres =+ indican a str que se asigne con el valor del primer elemento y que mismo con el valor del primer elemento, añade una cadena con otros valores, a saber "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+",";. El valor de esta cadena ya es " --LoY[1]--, --1.6105--". Después de estas operaciones, str obtiene el valor"--LoY[0]-- --1.6104-- --LoY[1]-- --1.6105--" en la segunda iteración.Es decir, str tiene el segundo elemento y en la trigésima iteración str contendrá 30 elementos con diferentes valores de los elementos del array.

Cuando el bucle termine, la variable de cadena str con 30 elementos se imprimirá fuera del bucle una vez.
Me costó mucho tiempo entender este algoritmo porque cuando hablabas de la suma sólo me fijé en el signo rojo "--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+", no en str+=

Así que sigue siendo un misterio para mí qué papel juegan esos pluses rojos "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+" en este algoritmo

Gracias por su ayuda.

Y qué misterio queda, si todo está bien programado...
 
MakarFX:
Nunca lo he hecho, ¿puede algún enlace para "tontos"?

Si no has escrito antes en C#, Delphi y similares, no te servirá de nada... Las ventanas se crean como en todas partes, pero primero hay que aprender a hacerlo "en todas partes".

Primero un breve curso de C#, WinForms (por ejemplo). Debe haber un montón de ellos en Internet. Esto va un poco más allá del ámbito del foro.

 

Alexey Viktorov .

Alexey Viktorov:


Y qué misterio queda, si todo está correctamente escrito...

Durante mucho tiempo no entendí este algoritmo, porque cuando hablabas de la adición sólo prestaba atención a los pluses rojos "--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+", pero no a str+=

Por eso sigue siendo un misterio para mí qué papel juegan estos pluses rojos"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+" en este algoritmo

De la forma en que he descrito mi entendimiento se deduce inequívocamente que la conexión de las cadenas en cada iteración se produce en un lugar y una vez junto con la operación de asignación str+=

Es decir, mediante el símbolo +, el valor de un elemento de la variable de cadena str se conecta (plus) con el valor de otro elemento de la misma variable de cadena str
Y sigo sin entender qué significan estos + rojos str +="--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+",";. No se realiza ninguna operación de suma sobre los valores que están entre estos pluses rojos ..... como me parece a mí. Si estoy en lo cierto, ¿qué función cumplen estos pluses rojos? Y si me equivoco, es que no he entendido algo.

Por cierto, en tu post, en la línea amarilla, sólo hay un plus rojo así antes de +DoubleToString(LoY[r],4). Pero no lo veo después.

Gracias por su ayuda.

 
Alexey Viktorov:

Sólo que no está claro cómo la compilación fue sin error, no está claro...


Y yo mismo inicialicé str dentro del cuerpo de la función de usuario cuando vi que el compilador señalaba que str estaba indefinido. Pero me olvidé de contarlo.
Entonces borré str de la función de usuario en todas partes y puse eStr entre paréntesis en lugar de str en la última línea de la función de usuario.

 
Maxim Kuznetsov:

Si no has escrito antes en C#, Delphi y similares, no te servirá de nada... Las ventanas se crean como en todas partes, pero primero hay que aprender a hacerlo "en todas partes".

Primero un breve curso de C#, WinForms (por ejemplo). Debe haber un montón de ellos en Internet. Esto va un poco más allá del ámbito del foro.

Bueno, el formulario se puede crear.


Estoy más interesado en cómo debe hacerse el intercambio de datos entre mi ventana y el Asesor Experto.

 
void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }
 

Aleksei Stepanenko:

void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }


Gracias por la aclaración.

Por cierto, he quitado los pluses amarillos y el compilador ha dado un error. Así que juegan algún papel en toda esta construcción. Pero lo que .... todavía no entiendo. Para qué son necesarios cuando la adición de cadenas se realiza sólo mediante el uso de pluses azules. A juzgar por sus explicaciones, no hay nada más en esta construcción ..... si no me equivoco.

Y sobre la cadena(i)... Sobre la conversión de tipos .... está más o menos claro para mí. Lo que no está claro es que..... string es el nombre de un tipo de variable. i es una variable contadora que denota el índice de un elemento del array. ¿Y por qué estái entre paréntesis () ? Hasta ahora he pensado que los paréntesis son una característica de la función. Por ejemplo, Print( ). Y en algunas funciones se ponen diferentes datos dentro de los paréntesis. Pero, ¿qué significan los paréntesis o qué función cumplen los paréntesis con respecto a i y a toda esta construcción - cadena(i)? A primera vista, parece que antes la variable i tenía un tipo int (entero), y luego cambiaste el tipo de la variable i de int a string (cadena) . Pero los paréntesis redondos que contienen no me dejan pensar así.

Gracias por la explicación.

Razón de la queja: