Características del lenguaje mql5, sutilezas y técnicas - página 181

 
Andrey Khatimlianskii:

Suelo tener 1-2 gráficos en un terminal como este, es difícil confundirse. Pero la cuestión está clara.

Opero más símbolos, más EAs se ejecutan. Supervisión de los símbolos no comercializables todavía. Se crean símbolos personalizados, se ejecuta el probador, etc.

Un caballo de batalla, en general.
 
fxsaber:

Operando con más símbolos, más EAs funcionando. Supervisión de los símbolos no comercializables todavía. Se están creando símbolos personalizados, el probador está en marcha, etc.

Un caballo de batalla, en general.

Tengo un caballo de batalla sólo bajo contraseña de inversor para todas las cuentas. Y no importa si hay EAs o no.

 
trader_number_one:

Sólo tengo un caballo de batalla bajo mi contraseña de inversión para todas las cuentas. Y no me importa si hay asesores o no.

Los asesores no sólo sirven para comerciar. Además, tienes que ser capaz de comerciar con un caballo de batalla.

 
fxsaber:

Tengo diez terminales. En la confusión de una, me cambié a otra cuenta. Pasa el tiempo, miro el Terminal y veo que necesito otra cuenta - cambio a la antigua. Y completamente sin esperar que el EA se cuelgue, veo que el EA se ha iniciado.

¿funcionará este sencillo código con el cambio de cuenta?

bool IsShowMessageBox = true;
//+------------------------------------------------------------------+
int OnInit()
{
   if(IsShowMessageBox && MessageBox("Произвести запуск эксперта?", "Run EA", MB_OKCANCEL) == IDCANCEL) return(INIT_FAILED);
   IsShowMessageBox = false;
   return(INIT_SUCCEEDED);
}


¿y el reinicio de sesión ejecutará este código cuando se interrumpa la conexión?

 
Igor Makanu:

¿funcionará un código simple como este con un cambio de cuenta?

No.

¿el reinicio de sesión cuando se interrumpe la conexión activará este código?

El reinicio de sesión automático no lo hará. El manual lo hará.

 

La solución está en la superficie. ¿Qué es lo que no cambia en el gráfico cuando lo cambias? Así es: los objetos gráficos. Cuando el robot se inicia, se crea un objeto gráfico, que se elimina en DeInit, en la situación normal, respectivamente, en OnInit comprobar para el objeto, si existe, entonces algo salió mal y devolver INIT_FAILED.

Aproximadamente así:

#define  NAME "test"

int OnInit()
  {
   static const string symbol=_Symbol;
   if (ObjectFind(0,NAME)>=0||symbol!=_Symbol) return INIT_FAILED;
   else ObjectCreate(0,NAME,OBJ_HLINE,0,0,0);
   return INIT_SUCCEEDED;
  }

void OnDeinit(const int reason){
   switch(reason){
      case REASON_PARAMETERS:
      case REASON_PROGRAM:
      case REASON_REMOVE:
      case REASON_INITFAILED:
      case REASON_CLOSE:
      case REASON_CHARTCLOSE:
      case REASON_TEMPLATE:
      case REASON_CHARTCHANGE: ObjectDelete(0,NAME);
      case REASON_RECOMPILE:
      case REASON_ACCOUNT: break;
   }
}

void OnTick(){
}
 
Vladimir Simakov:

La solución está en la superficie. ¿Qué es lo que no cambia en el gráfico cuando lo cambias? Así es: los objetos gráficos. Cuando el robot se inicia, se crea un objeto gráfico, que se elimina en DeInit, en la situación normal, respectivamente, en OnInit comprobar para el objeto, si existe, entonces algo salió mal y devolver INIT_FAILED.

Aproximadamente así:

el ahorro no es un problema, aquí en general tenemos que distribuir la inicialización de EA correctamente, el caso de cambiar las cuentas es la menor de mis preocupaciones, pero cómo se lanza el gráfico en sí y cuando el gráfico no está listo es un misterio envuelto en la oscuridad )))

revisado la lectura de los comentarios... no es suave - ni siquiera es visible en la "pantalla negra" al cambiar entre cuentas en un símbolo inexistente ;)

int OnInit()
{
   string arr_comm[];
   if(StringSplit(ChartGetString(0, CHART_COMMENT), StringGetCharacter(";", 0), arr_comm) == 2) Print("_StopFlag = ", (bool)((int)arr_comm[0]), " ; _UninitReason = ", (int)arr_comm[1]);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Comment((string)_StopFlag + ";" + (string)_UninitReason);
}
 
Vladimir Simakov:

La solución está en la superficie. ¿Qué es lo que no cambia en el gráfico cuando lo cambias? Así es: los objetos gráficos. Cuando el robot se inicia, se crea un objeto gráfico, que se elimina en DeInit, en la situación normal, respectivamente, en OnInit comprobar para el objeto, si existe, entonces algo salió mal y devolver INIT_FAILED.

Esto es algo así:

También puede utilizar las variables globales de la terminal. Tampoco se borran.

 
Konstantin Nikitin:

También podrías utilizar las variables globales del terminal. Tampoco se borrarán.

Gustos y sabores... No me gustan...

 
Vladimir Simakov:

Para el sabor y el color... No me gustan...

Por ejemplo, borro todos los objetos del VDS. Sólo que es innecesario no cargar la agenda. Y no hay necesidad de ellos allí. Utilizo los globales. Así que todo depende de la situación.