Librerías: Expert - página 12

 
¿Si el Asesor Experto requiere cargar una DLL, no marca esta casilla por sí mismo? Se trata de expertmode, parece. No veo la interfaz. ¿Tengo que editar el código o la plantilla a mí mismo?
 
traveller00:
¿Si el Asesor Experto requiere cargar una DLL, no marca esta casilla por sí mismo? Se trata de expertmode, parece. No veo la interfaz. ¿Tengo que editar el código o la plantilla a mí mismo?

Había ejemplos con DLL arriba.

 

Me gustaría aclarar la semántica del código de retorno del método Parámetros. Ahora mismo, cuando hay un error al recibir una cadena con una plantilla, el método devuelve 0. Esto supone que 0 significa un error.

En todos los demás casos, el retorno es una cadena:

Res = (int)EXPERT::StringBetween(Str, EXPERT_FLAGS, STRING_END);

, es decir, llega el valor de expertmode de la plantilla, que puede ser igual a 0 de forma bastante legal. EXPERT se utiliza de esta manera en otros proyectos, en particular en Tester:

void OnTimerReal()
{
  ...
  if ((this.Symb += BeginTick) && EXPERT::Parameters(0, Params, Names))
  {
    ... открытие рабочего чарта
  }
}

Como resultado, si el método devuelve 0, Tester no funciona. ¿Por qué? Si se restablece el indicador de operación real, no significa que se deba prohibir la comprobación, en mi opinión. Además, Tester no hace nada silenciosamente en este caso.

 
Stanislav Korotky:

Me gustaría aclarar la semántica del código de retorno del método Parámetros. Actualmente, cuando hay un error al recibir una cadena con una plantilla, el método devuelve 0. Esto supone que 0 significa un error.

El valor de retorno ha cambiado desde las primeras publicaciones. Así que históricamente, el valor de retorno ha resultado no decir nada acerca de si hay un error allí o no.

En todos los demás casos, el valor de retorno es una cadena:

, es decir, el valor expertmode de la plantilla llega allí, que puede ser igual a 0 de forma bastante legal. En otros proyectos, en particular en Tester, EXPERT se utiliza de esta manera :

Como resultado, si el método devuelve 0, Tester no funciona. ¿Por qué? Si la bandera de operación real se restablece, no significa que la prueba debe ser prohibida, imho. Especialmente, Tester no hace nada en silencio en este caso.

Según el código que has citado, efectivamente, no funcionará si el autotrading está desactivado. No recuerdo si es un error o hecho a propósito. Lo más probable es que se hiciera a propósito para que fuera posible conectar DLLs.


ZЫ Tendré que actualizar la biblia. Hay un fuerte giro para compartir con Sequence. Dado que sólo yo necesito esta característica, no es una prioridad para actualizarlo.

 

La única vez que la construcción de detección de bucle infinito funcionó.

ME      3       15:22:12.123    Message Endless loop:
KS      3       15:22:12.123    Message Expert.mqh
IP      3       15:22:12.123    Message 169
DG      3       15:22:12.123    Message bool EXPERT::TemplateApply(const long,const string&,const bool)
FQ      3       15:22:12.123    Message Condition: !::IsStopped()&&::ChartGetInteger(Chart_ID,CHART_COLOR_STOP_LEVEL,0,Value)&&(!(bool)((int)Value>>24))


Ocurrió en Expert.mqh en este momento.

      while (_CS(!::IsStopped() && ::ChartGetInteger(Chart_ID, CHART_COLOR_STOP_LEVEL, 0, Value) && (!(bool)((int)Value >> 24))))
        ::Sleep(1); // https://www.mql5.com/ru/forum/170952/page190#comment_18830346


Utilizo Expert.mqh activamente todos los días, pero esta es la primera vez que me lo encuentro. Aparentemente hay alguna situación muy rara. Tenlo en cuenta.

 
Buen trabajo, pero supongo que ahora mismo cargará el Experto con el preset por defecto? También sería bueno si se puede cargar archivos SET para el experto elegido
 

Hola, gracias EXPER.mqh es increíble.

1. ¿Cómo puedo activar "Algo trading" para EA abierto con EXPERT::Run(....).

2. Estoy utilizando la versión 2019. ¿Existe una versión más reciente?

 
upinsa #:

1. ¿Cómo puedo activar "Algo trading" para EA abierto con EXPERT::Run(....)

Lea esto.

2. Estoy utilizando la versión 2019. ¿Hay una versión más reciente?

Última versión.


 
static bool GetInputNames( MqlParam &Parameters[], string &InputNames[] )
  {
    const int Size = ::ArraySize(Parameters);
    bool Res = (Size > 1);

    if (Res)
    {
      ::ArrayResize(InputNames, Size - 1);

      for (int i = 1; (i < Size) && Res; i++)
      {
        InputNames[i - 1] = EXPERT::GetInputName(Parameters[i]);
        Res &= (InputNames[i - 1] != NULL);
      }
    }

    return(Res);
  }

grupo de entrada "【label1】";

Esta situación no parece ser considerado. Cuando el parámetro es un grupo, no hay un valor específico, y el valor recibido será nulo, por lo que los parámetros después del grupo no se recibirán.

 
hini #:

grupo de entrada "【label1】";

Esta situación no parece ser considerado. Cuando el parámetro es un grupo, no hay un valor específico, y el valor recibido será nulo, por lo que los parámetros después del grupo no se recibirán.

Si hay un problema, por favor dar archivos mq5 listo para reproducir.