Errores, fallos, preguntas - página 2458

 

Al pasar de MQL4 a MQL5 me encontré con un fallo:

Código:

ResetLastError();

int ObjTotal = ObjectsTotal(0);

int Error = GetLastError();

devoluciones:

ObjetoTotal = 0.

Error = 4022

¿Qué es este error y por qué no se menciona en la documentación?

He probado diferentes variantes: ObjectsTotal(0, -1, -1), ObjectsTotal(ChartID(), 0, OBJ_TREND), etc.

El resultado es el mismo.

¿Cómo hacer que funcione?

Terminal: MetaTrader 5, Versión 5.00 build 2025.
 
Игорь Евдокимов:

Consejo: Si quieres preguntar algo, inserta el código COMPLETO, no un trozo.

De qué sirve: cualquiera toma tu código y lo ejecuta por su cuenta. Y casi nadie mira el código grueso: el código grueso es irrespetuoso.

Ejemplo de su código:

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError();
   int ObjTotal=ObjectsTotal(0);
   int Error=GetLastError();
   Print("ObjectsTotal: ",ObjTotal,", GetLastError: ",Error);
//---
  }
//+------------------------------------------------------------------+

Ejecútalo en un gráfico que no tenga objetos gráficos. Resultado:

2019.05.10 13:26:59.169 1 (EURUSD,H1)   ObjectsTotal: 0, GetLastError: 0

Es decir, no hay ningún error.


Usando la terminal:

2019.05.10 13:25:35.665 MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
2019.05.10 13:25:35.668 Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3712 / 8077 Mb, Disk: 77 / 415 Gb, GMT+2
2019.05.10 13:25:35.668 C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
Archivos adjuntos:
1.mq5  2 kb
 
Vladimir Karputov:

Un consejo: si quieres preguntar algo, inserta el código COMPLETO, no un trozo.

Gracias por el consejo, eso es lo que haré.

Sin embargo, la cuestión sigue abierta.

Aclaración: si el trozo de código del post anterior está en la función OnDeinit() del indicador, el resultado es este:

2019.05.10 14:08:20.105 PtS (EURUSD,H1) ObjectsTotal: 0, GetLastError: 4022

Si se ejecuta el mismo código después de eliminar el indicador del gráfico, como el script (1.mq5 del post anterior), obtenemos

2019.05.10 14:08:33.609 1 (EURUSD,H1) ObjectsTotal: 8575, GetLastError: 0

Por favor, ayúdenme a entender la razón.

¡Caballeros desarrolladores! ¿Qué es este error que no aparece en la documentación?

 
Vladislav Andruschenko :

error en el comprobador de estrategias durante la optimización.

"tarea rechazada por el agente probador "

Por ejemplo, si la moneda de su cuenta es el euro,

  • EURJPY No hay problema
  • Error en GBPJPY


Si la moneda de su cuenta es el USD

  • USDCAD No hay problema
  • USDJPY No hay problema
  • Error en EURAUD


aparece cuando se utilizan otros pares de divisas en el código.

En mi ejemplo se utiliza el cálculo del lote dinámico



Es decir, cuando el EA solicita el precio de otra moneda.

@Vladislav Andruschenko

Hola, ¿has conseguido alguna respuesta o solución a este problema?

 
Vladimir Pastushak:

Cuando se cambia el horario/período, PBB recibe un valor de 10, sin importar el valor que haya especificado en el campo de entrada.

En el momento de la reinicialización, es como si fuera la primera ejecución.

Hay dos maneras de resolver su problema

1 - Almacenar el valor de la PBB en las variables globales y obtener el periodo desde allí.

2 - Cuando se dispara OnChartEvent, reiniciar el indicador MA y obtener un nuevo mango...

Comprobadas todas las opciones. No funciona.

Fallo en MQL5.

No inicializa nuevos valores. Sólo con entrada de parámetro int PBB_=. No hay otras opciones. Esto no es nada bueno.

 
Uladzimir Izerski:

He comprobado todas las opciones. No funciona.

Fallo en el programa MQL5.

Los nuevos valores no se inicializan. Sólo con el parámetro de entrada int PBB_=. No hay otras opciones. Esto no es nada bueno.

Todo está bien en MQL, simplemente no entiendes lo que estás haciendo en tu código y cómo funciona todo...

Una vez más, cuando llame aChartSetSymbolPeriod(0,_Symbol,_Period);

Estás restableciendo todo por defecto...

Alternativamente, pruebe el inite para solicitar un valor de su campo de texto.

Cuando se inicia el indicador por primera vez, todo se crea y cuando se cambian los datos en el campo, se llama a la nueva unidad y se establece el valor de su campo de texto...

 
Vladimir Pastushak:

Todo está bien en MQL, simplemente no entiendes lo que estás haciendo en el código y cómo funciona todo...

Una vez más, cuando llame aChartSetSymbolPeriod(0,_Symbol,_Period);

Estás restableciendo todo por defecto...

Alternativamente, pruebe el inite para solicitar un valor de su campo de texto.

Después de la lógica, el primer inicio del indicador, todo se crea, pero cuando se cambian los datos en el campo, habrá una nueva llamada en la unidad y la configuración de valores de su campo de texto ...

Lo he probado con el campo de texto y a través de GlobalVariable, pero nunca he probado nada. Es tan silencioso como en un tanque.

En otra varianteOnCalculate funciona sin problemas.

 
Uladzimir Izerski:

He probado tanto desde un campo de texto como a través de GlobalVariable y cualquier otra cosa que haya probado. Es tan silencioso como un tanque.

La otra versión de OnCalculate funciona sin problemas.

Eso significa que estás haciendo algo mal

 
Al acceder a mi cuenta se abre una ventana que dice que no debo leer las "filas" no preparadas, aunque dice que la autorización permite la conexión a la cuenta... ¿Qué debo hacer?
 
Vladimir Pastushak:

Entonces estás haciendo algo mal.

Ya has publicado el código.

Si yo soy un inepto, alguien debe ser un profesional. Todavía no lo veo.

Acepto su esfuerzo por encontrar una respuesta. Hay algo más que eso. Es decir, a nivel de los desarrolladores.