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

 
Aleksei Stepanenko:

o hacer una función de impresión de matrices por separado:

Y llámalo desde cualquier lugar

Alexey, he estado mucho tiempo en silencio, pero no veo esto tranquilamente... ¿Por qué usar IntegerToString() cuando una conversión de tipo explícita es mucho más simple y menos costosa...

eStr+=(string)i+": "+DoubleToString(eArray[i],4)+", ";
 

no sé, la costumbre :)

 
Aleksei Stepanenko:

o hacer una función de impresión de matrices por separado:

Y llamar desde cualquier lugar

Muchas gracias por su comprensión y aclaración. Me detengo a estudiar y comprender la información que es nueva para mí.

 
Alexey Viktorov:

Alexey, he estado mucho tiempo en silencio, pero no lo veo tranquilo... ¿Por qué usar IntegerToString() cuando una conversión de tipo explícita en este caso es mucho más fácil y menos costosa...

Y gracias también por sus valiosas aportaciones.

 
¿Puedes decirme dónde buscar y leer sobre la creación de una ventana externa para un EA?
 
MakarFX:
Puedes decirme por favor dónde buscar y leer sobre la creación de una ventana externa para EA.

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

tcl.Eval("toplevel .myWin ; wm title .myWin {Окношко}" ); // простите, не удержался
 
Aleksei Stepanenko:

o hacer una función de impresión de matrices por separado:

Y llamar desde cualquier lugar

He decidido hacer una función de impresión de matrices personalizada por separado. O más bien, no hacer uno, utilizar el ( PrintArray() ) Lo cual ya has hecho.

¿Qué he hecho?

He colocado la llamada a la función PrintArray() del usuario dentro de la función OnTick()... como se describe en el tutorial de Kovalev.

2. He colocado el cuerpo de la función PrintArray() fuera de la función OnTick()... ... como se describe en el tutorial de Kovalev.

Todas las nuevas variables del cuerpo de esta función son locales. Se declaran e inicializan dentro de esta función.

int P1=0;
double LoY[31];
void OnTick()
{
if (P1==0)
{
for(int r=0; r<31;r++)
{
LoY[r]=1.6104+(r*2)*0.0001;
P1=1;
}
}
//*************************************************************  Б Л О К    N 2
for(int x=0; x<31;x++)
{
if (Bid < LoY[x] )
{
LoY[x]=Bid;
}
}
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
PrintArray(LoY);
}
//****************************

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);
   }

No he hecho ningún cambio en su función. Pero el compilador da 6 errores por alguna razón. Y todos ellos están relacionados con la función del usuario.

Les agradecería mucho que me dijeran qué he hecho mal.
Gracias.

 
ANDREY:

He decidido hacer una función de impresión de matrices personalizada por separado. O más bien, no hacer uno, utilizar el ( PrintArray() ) Lo cual ya has hecho.

¿Qué he hecho?

He colocado la llamada a la función PrintArray() del usuario dentro de la función OnTick()... como se describe en el tutorial de Kovalev.

2. He colocado el cuerpo de la función PrintArray() fuera de la función OnTick()... ... como se describe en el tutorial de Kovalev.

Todas las nuevas variables del cuerpo de esta función son locales. Se declaran e inicializan dentro de esta función.

No he hecho ningún cambio en su función. Pero el compilador produce 6 errores por alguna razón. Y todas ellas están relacionadas con una función del usuario.

Le estaré muy agradecido si me dice qué he hecho mal.
Gracias.

No recuerdo exactamente y me da pereza comprobarlo. Prueba a añadir corchetes

void PrintArray(double &eArray[])
 

Aleksei Stepanenko:

string str="";

for(int r=0; r<31;r++)
   {
   LoY[r]=1.6104+r*0.0001;
   str+="--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", ";
   }
Print(str);


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 =+ ordenan a str que se asigne a sí misma vacía (sin valores) y a sí misma vacía añada 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.

 
Alexey Viktorov:

No lo recuerdo exactamente y me da pereza comprobarlo. Prueba a añadir corchetes

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 su ayuda y disculpe las molestias.

Razón de la queja: