[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 616

 
xant:

rigonich

Veinticinco años otra vez. Pregunté muy específicamente si había dado el primer paso correcto. No has respondido a una pregunta directa, no has dicho una palabra de fondo.

Sí, claro, me leo un libro de texto, pero como tengo una profesión que no tiene nada que ver con la programación, está claro que pido un algoritmo claro, sencillo y concreto. ¿Qué tan difícil puede ser de entender? Si le resulta difícil responder sobre el fondo, ¿para qué molestarse? Simplemente vete.

Y como comentario - no tienes ni idea de la cantidad de gente que conozco a la que, como médico de cabecera, puedo llamar estúpida. Es difícil imaginar que los adultos no entiendan cuestiones básicas sobre su propia salud. Si reacciono a todo el mundo como tú, no valdré nada como especialista. Duerme bien.

_______________

Por favor - que alguien me envíe un correo electrónico a neroy(dog)mail.ru que pueda tomar el código de EA y pegar lo que necesita en el lugar correcto.


No has pedido coger tu EA y pegar en él el código necesario, no has colgado el código del EA, primero pediste ayuda para solucionar el problema de la pérdida de datos al apagar el EA, cuando lo hiciste, insultaste a quien te ayudó, luego preguntaste si habías hecho bien el "primer paso", y cuando te dijeron que estaba mal y te señalaron errores concretos, vuelves a insultar a quien te está ayudando, así que supongo que nadie más querrá hacerlo.

P.D. No se me ocurre un algoritmo más fácil y claro, que coger dos funciones ya hechas, copiarlas en mi EA y poner una llamada de una al principio del init y la otra al final del inicio.

 
rigonich:

En realidad es tu código, parcialmente corregido por otra persona.


mi código no dio ningún error. Pero tampoco dio ningún resultado.

Y su código ni siquiera funcionó, porque 24 errores....

pero he cogido la idea... y ahora funciona.

 

El compilador, por supuesto, es inhumano. Ahora mi cerebro está casi roto en cuanto a por qué se muestra el error

'(' - definición de función inesperada G:\gram_Files_2MT4-demo\experts\3.mq4 (139, 14)

mientras que este Asesor Experto trabajó como un encanto ayer, pero hoy acabo de abrir un largo IF en varios cortos if....

Resulta que se me escapó una coma invertida sobre un KILLOMETRO de donde el compilador mostró el error! Además, no dijo nada sobre la coma invertida, no se conformó con la FUNCIÓN, ves....:((((((((

 

rigonich

Podría responderte punto por punto a cada una de tus palabras, pero ya no le veo sentido. Si alguien es terco, no tiene sentido explicar nada. La cuestión era cómo organizarse. Luego, cuando diste la pista de que las variables globales son mejores que escribir en un archivo, surgió la pregunta de cómo hacerlo correctamente. Entonces, su nervioso cofirmante dio una pieza de código, sin perder la oportunidad de bromear. Es sencillo: una parte del código va en el bloque de inicialización y otra en el bloque principal de EA.

Esto es lo que entra en el bloque de inicialización:

 void fGet_MineGV (string fs_PrefName = "") // префикс имени переменной
     {
        string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
        if (GlobalVariableCheck (ls_Name)) SUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
        if (GlobalVariableCheck (ls_Name)) SUA1 = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
        if (GlobalVariableCheck (ls_Name)) BUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
        if (GlobalVariableCheck (ls_Name)) BUA1 = GlobalVariableGet (ls_Name);
     }

Esto es lo que entra en el bloque principal

 void fSave_MineGV (string fs_PrefName = "") // префикс имени переменной
{
 static datetime ldt_NewBar;
 datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
 //---- Сохраняемся в начале каждой минуты
 if (ldt_NewBar == ldaTBeginBar) return;
 ldt_NewBar = ldaTBeginBar;
 //---- Сохраняем поочереди значения каждой переменной
 string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
 GlobalVariableSet (ls_Name, SUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
 GlobalVariableSet (ls_Name, SUA1);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
 GlobalVariableSet (ls_Name, BUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
  GlobalVariableSet (ls_Name, BUA1);
}

Como puedes ver, he cambiado el nombre de las variables.

Así que inserté secuencialmente la segunda parte del código, empezando inmediatamente después del cálculo de las variables y hasta el final del bloque de inicio, terminando con un intento de inserción antes de la última llave.

A juzgar por tu explicación tan profesional, eso es lo que debería haber hecho, porque está claro para cualquier principiante. Según tú, debería funcionar. Pero no es así. Esto es lo mejor que he conseguido:

8 error(s), 0 warning(s)        
 

no pudo encontrar la función correcta en la biblioteca

Tamaño del TakeProfit de la última posición cerrada.

¿Tal vez alguien tenga uno?

 

¿están permitidas estas cadenas?

if ( (A==1 && B==2) && (C==2 || D==3) && E==4)

¿Es decir, tanto AND como OR en una línea?

 
 lottamer:

¿están permitidas estas cadenas?

if ( (A==1 && B==2) && (C==2 || D==3) && E==4)

¿Es decir, tanto AND como OR en una línea?


La respuesta es sí. ¿Hay lenguas que no están permitidas? ¿Qué, tienen que reducir todo a formas conjuntivas y disyuntivas-normales?
 
lottamer:

no pudo encontrar la función correcta en la biblioteca

Tamaño de la toma de beneficios de la última posición cerrada.

¿Tal vez alguien tenga uno?


Escríbalo usted mismo - hay 1 solo bucle. Sólo trata de hacerlo. Y si fallas, muéstranos el código de tu bucle: te ayudaremos.
 
xant:

rigonich

Podría responderte punto por punto a cada una de tus palabras, pero ya no le veo sentido. Si alguien es terco, no tiene sentido explicar nada. La cuestión era cómo organizarse. Luego, cuando diste la pista de que las variables globales son mejores que escribir en un archivo, surgió la pregunta de cómo hacerlo correctamente. Entonces, su nervioso cofirmante dio una pieza de código, sin perder la oportunidad de bromear. Es sencillo: una parte del código va en el bloque de inicialización y otra en el bloque principal de EA.

Esto es lo que entra en el bloque de inicialización:

Esto es lo que entra en el bloque principal

Como puedes ver, he cambiado el nombre de las variables.

Así que inserté secuencialmente la segunda parte del código, empezando inmediatamente después del cálculo de las variables y hasta el final del bloque de inicio, terminando con un intento de inserción antes de la última llave.

A juzgar por tu explicación tan profesional, eso es lo que debería haber hecho, porque está claro para cualquier principiante. Según tú, debería funcionar. Pero no es así. Esto es lo mejor que he conseguido:


Lee con atención. Estos dos bloques se denominan descripciones de funciones, y no pueden colocarse dentro de otras descripciones de funciones. En el init se debe colocar

{
fGet_MineGV();
}

y en start una llamada similar a la segunda función. las funciones en sí deben colocarse por separado en su EA, ni en init ni en start en ninguna función personalizada.

Ytu nervioso cofirmante no te dio parte del código, sino dos funciones ya hechas que escribió para ti.

 
lottamer:

¿están permitidas estas cadenas?

if ( (A==1 && B==2) && (C==2 || D==3) && E==4)

¿Es decir, tanto AND como OR en una línea?


Sí, el compilador trata todo lo que está encerrado entre paréntesis como una comparación independiente.
Razón de la queja: