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

 
Sergey Likho:

¿Cuál es la mejor manera de escribir el algoritmo?


Tarea:

Un Asesor Experto se ejecuta en diferentes gráficos.

Necesito tener un archivo separado con información minuto a minuto sobre la cuenta, el saldo, el patrimonio, etc.

Ahora resulta que todos los Asesores Expertos escriben toda la información en un archivo. Como resultado, tenemos un montón de entradas innecesarias.

Cuál es la posible solución original, para que sólo un bot haga registros en el fichero (y, si se borrara, el otro bot empezaría a hacer registros, etc.)

Crear un objeto gráfico en OnInit() con el nombre del EA, o cualquier otro objeto. Tal vez, el EA ya está creando un objeto, puede utilizarlo, por ejemplo, "MyEA":ObjectCreate(0,"MyEA",OBJ_...,...)

En OnTick() donde se escribe al fichero tenemos que comprobar el primer ID del gráfico con esta misma etiqueta = significa que es el primer Asesor Experto instalado en el terminal, no nos interesa el resto.

Tenemos que usar la sobrecarga:

string ChartGetSymb()
  {
   string symb="";
   long chartID=ChartFirst();
   while(chartID!=-1) 
    {
      if(ObjectGetString(chartID,"MyEA",OBJPROP_NAME)=="MyEA")
       {
        symb=ChartSymbol(chartID);
        break;
       }
      chartID=ChartNext(chartID);
     }
   return(symb);
  }

Obtenemos el primer gráfico/símbolo con un Asesor Experto instalado en él

Luego lo comparamos con el primer Asesor Experto antes de escribirlo en un archivo:

if(ChartGetSymb() == Symbol()) {
  записываем в файл, если соответствует символу, иначе не записываем
}


No es una construcción fácil, pero es mejor que escribir en una variable global

 
Artyom Trishkin:

Toma el MA estándar, cambia el tipo de datos del buffer, compila y comprueba en la ventana de datos del terminal (Ctrl+D)

Eso no ayudaría ya que no aparecería en el terminal. Pero lo he comprobado en el indicador ZigZag, que tiene dos buffers adicionales para High y Low, declarados como INDICATOR_CALCULATIONS. También se toman del programa, aunque no se muestran en el terminal. Gracias por el consejo de todos modos.
 
Sergey Likho:

ChartID() se escribe en las variables globales del terminal con un error. ¿qué es esta tontería?


Prueba este código:


El resultado de la ejecución de este código

2019.11.29 15:22:07.453 Script 00 EURUSD,H1: removed
2019.11.29 15:22:07.453 00 EURUSD,H1: uninit reason 0
2019.11.29 15:22:07.453 00 EURUSD,H1: GVAR id:131992895281608496 GV_id:131992895281608496
2019.11.29 15:22:07.453 00 EURUSD,H1: initialized
2019.11.29 15:22:07.433 Script Test\00 EURUSD,H1: loaded successfully
 
Vitaly Muzichenko:

Cree un objeto gráfico en OnInit() con el nombre del EA o cualquier otro objeto, quizás el EA ya crea un objeto, entonces puede usarlo, supongamos "MyEA": ObjectCreate(0,"MyEA",OBJ_...,...)

En OnTick() donde se escribe al fichero tenemos que comprobar el primer ID del gráfico con esta misma etiqueta = significa que es el primer Asesor Experto instalado en el terminal, no nos interesa el resto.

Tenemos que usar la sobrecarga:


Obtenemos el primer gráfico/símbolo con un Asesor Experto instalado en él

Luego lo comparamos con el primer Asesor Experto antes de escribirlo en un archivo:


No es una construcción fácil, pero es mejor que escribir en la variable global

Sí, buena idea.

Gracias.


Pregunta, ¿qué pasa si el EA ha sido borrado (por ejemplo, debido a un error), pero el objeto ha permanecido. ¿Qué hacer, si el gráfico se cierra completamente, tenemos que reasignar el EA "principal"?

 
Sergey Likho:

Sí, es una buena idea.

Gracias.


Pregunta entonces: ¿Qué pasa si el EA ha sido borrado (por ejemplo, debido a un error), pero el objeto ha permanecido. ¿Qué hacer si el gráfico se cierra en su totalidad, necesitamos reasignar de alguna manera el Asesor Experto "principal"?

Sólo hay un caso de error - si el Asesor Experto fue borrado accidentalmente y el objeto fue dejado, pero en mi memoria, no recuerdo tal error en MT4. En todos los demás casos, se reasignará al perito principal.


P.D. Trate de comprobar que OnDeInit() se emitirá en caso de error en el Asesor Experto y auto-borrado del gráfico. Probablemente, puedes comprobarlo fácilmente creando una variable y contando los ticks y dividiéndolos por 10/0 en el 11º tick.

En OnDeInit() use Print y vea la causa de la desinicialización, y si ocurre, entonces por esta causa/número borre el objeto "MyEA" del gráfico

t++;
if(t > 10) {
 int e = 10;
 e /= 0;
}

Puedes escribir sobre el resultado, porque no tengo tiempo para comprobarlo yo mismo

 
Vitaly Muzichenko:

Cree un objeto gráfico en OnInit() con el nombre del EA o cualquier otro objeto, quizás el EA ya crea un objeto, entonces puede usarlo, supongamos "MyEA": ObjectCreate(0,"MyEA",OBJ_...,...)

En OnTick() donde se escribe al fichero tenemos que comprobar el primer ID del gráfico con esta misma etiqueta = significa que es el primer Asesor Experto instalado en el terminal, no nos interesa el resto.

Tenemos que usar la sobrecarga:


Obtenemos el primer gráfico/símbolo con un Asesor Experto instalado en él

Luego lo comparamos con el primer Asesor Experto antes de escribirlo en un archivo:


No es una construcción fácil, pero es mejor que escribir en una variable global

Creo que se equivoca. Los GVs no se escriben en el disco cada vez. Si no fuera así, no habría necesidad de forzar a GV al disco.

void  GlobalVariablesFlush();
Y encima, revisando todas las cartas en busca de EA y objeto... Vitaly, eso es una pena...
 
Alexey Viktorov:

Creo que se equivoca. Los GVs no se escriben en el disco cada vez. De lo contrario, no necesitaríamos la función de escritura forzada de GV en el disco.

Sí además de recorrer todos los gráficos en busca de EA y objeto... Vitaly, eso es una pena...

Sí, lo son:GlobalVariableSet("GV",ID);

perfiles -> gvariables.dat


 
Vitaly Muzichenko:

También se escriben como:GlobalVariableSet("GV",ID);

perfiles -> gvariables.dat


Cuando lo creas, puede ser, pero cuando lo sobrescribes antes de desactivar la aplicación que escribe allí, tienes que comprobarlo. Soy demasiado vago. Aun así, de forma puramente teórica, si se escribiera en el disco cada vez, la función anterior sería un traqueteo.

 
Sergey Likho:

No puedes hacer eso.

Busque un programa de Windows que sincronice los datos en carpetas. Y configúralo para que el Asesor Experto se copie en un nuevo terminal automáticamente.

Según tengo entendido, hay programas de este tipo, pero sólo funcionan con archivos, pero si es un documento de texto, no copia el contenido y no reemplaza los archivos, quizás no he encontrado un programa normal. Es una lástima que los desarrolladores no hayan considerado la opción de especificar la ruta desde donde descargar el archivo del Asesor Experto o del robot, pensé que podía especificar la ruta como se hace habitualmente, pero como señalas arriba es imposible.

 
Seric29:

Según tengo entendido hay programas de este tipo, pero solo funcionan con archivos, pero si es un documento de texto, no se copia el contenido y no se sustituyen los archivos, quizás no he encontrado un programa normal. Me parece mal que los desarrolladores no hayan tenido en cuenta la posibilidad de establecer la ruta desde donde obtener el archivo del robot o del experto. Pensé que sería posible establecer la ruta como se hace habitualmente, pero como has señalado arriba no es posible.

Observa en este post las palabras "Todos los terminales tienen carpetas compartidas".

Esto no es posible. Foro sobre el comercio, los sistemas de comercio automatizados y las pruebas de las estrategias de comercio

¿Qué debo hacer si quiero utilizar un producto del Mercado?

Sergey Tabolin, 2019.11.23 08:17

¿De verdad crees que no sé cómo y dónde instalar? )))

Todos los terminales tienen carpetas comunes

He descargado un indicador gratuito del mercado. Se une al hardware.

¿Por qué funciona en un hardware, pero no en el otro?

Conclusión obvia: está ligado, al menos no sólo al hardware...


Busca información sobre cómo se hace y ya está... Esto se llama enlace de carpetas.

Razón de la queja: