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

 
Igor Makanu:

es diferente

existen las llamadas tareas de Control y Gestión

EA - gestión, servicio - control

el control no debe ser superfluo: si se consumen todos los recursos del sistema, se obtiene un sistema inestable en lugar de control

¿Cuál es el ahorro? El servicio hará la misma enumeración de pedidos, las mismas comparaciones.

Si la idea es que un servicio "atienda" a varios asesores enviándoles la señal de "algo ha cambiado", la solución es cuestionable.
En primer lugar, es una tontería esperar a que los datos críticos necesarios para tomar una decisión vengan de fuera. Y en segundo lugar, el ahorro, si es que lo hay, será sólo en el caso de una multitud de Asesores Expertos en un terminal.

Esto es más bien un truco teórico, en la práctica no tenemos problemas con la búsqueda de órdenes en el EA.

 
Algún tipo de fallo en MT5 ha detectado esta situación.
ACCOUNT_TRADE_EXPERT = true
ACCOUNT_TRADE_ALLOWED = false
TERMINAL_TRADE_ALLOWED = true
Hay que tener en cuenta que este tipo de prohibición puede ser el resultado de la Terminal (bug), no del corredor.
 
fxsaber:
Algún tipo de fallo en la MT5 ha detectado esta situación. Tenga en cuenta que esta prohibición puede ser el resultado de la Terminal (error), no el corredor.

No es la misma situación que la de Robo, los primeros 2 minutos se cierra la operación y las cotizaciones van?

Sólo que no recuerdo si el comercio está prohibido todos los días o sólo los lunes durante estos 2 minutos.

 
Alexey Viktorov:

No es una situación como la de Robo, los primeros 2 minutos la operación está cerrada y las cotizaciones están entrando?

Solo que no recuerdo si todos los días o solo los lunes estos 2 minutos no se pueden negociar.

No, esto es en la mitad del día. Fallo de MT5, el corredor no está involucrado.

 
Alexey Viktorov:

Sólo que no recuerdo si el comercio está prohibido todos los días o sólo los lunes durante esos 2 minutos.

Sólo cuando el mercado se abre
 
MessageBox no muestra toda la información en el registro. Al leer el registro, a veces surgen preguntas. La solución es la siguiente.
// Терминал при MessageBox не выводит в лог имя MQL-программы, текст заголовка окна, флаги и результат нажатия.
int MessageBox2( const string Text, const string Caption = NULL, const int Flags = 0 )
{
  const int Res = MessageBox(Text, Caption, Flags);
  
#define  TOSTRING(A) " " + #A + " = " + (string)(A)
  Print("MessageBox:" + TOSTRING(Caption) + TOSTRING(Flags) + TOSTRING(Res));
#undef  TOSTRING
  
  return(Res);
}

#define MessageBox MessageBox2
 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Peculiaridades de mql5, consejos y trucos

fxsaber, 2020.04.30 08:49

Algún fallo en MT5 ha detectado esta situación.
ACCOUNT_TRADE_EXPERT = true
ACCOUNT_TRADE_ALLOWED = false
TERMINAL_TRADE_ALLOWED = true
Hay que tener en cuenta que este tipo de prohibición puede ser el resultado de la Terminal (bug), no del corredor.

Lo tengo de nuevo. Supongo que esto puede ocurrir en situaciones raras cuando se vuelve a registrar.

Solución: si es falso, inténtelo de nuevo tras una breve pausa.

bool IsTradeAllowed( const int Attempts = 0 )
{        
  // https://www.mql5.com/ru/forum/170952/page174#comment_16363677
  bool Res = false;
  int Count = 0;
  
  // https://www.mql5.com/ru/forum/170952/page174#comment_16363677
  while (!(Res = ::MQLInfoInteger(MQL_TRADE_ALLOWED) &&
                 ::AccountInfoInteger(ACCOUNT_TRADE_EXPERT) &&
                 ::AccountInfoInteger(ACCOUNT_TRADE_ALLOWED) &&
                 ::TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)) &&
         (Count++ < Attempts) && !::IsStopped())
    ::Sleep(100);
    
  return(Res);
}
 
Cuando se quiere captar un cambio en una variable en la asignación.
if (Value != (Value = NewValue()))
  Print("Value is changed.");
 
fxsaber:
Cuando se necesita captar un cambio en una variable en la asignación.

Tienes UB aquí, no puedes usarlo.

 
Vict:

Tienes UB aquí, no puedes usarlo.

Funciona, pero puedes sugerir una macro adecuada.