Errores, fallos, preguntas - página 202

 
Interesting:

Ahora, a diferencia de MT4, el período no significa el número de segundos en un período.

Lee con más atención, escribí sobre _Period, no sobre PeriodSeconds. Y no abarrotes la página con tus errores de percepción, por favor.
 
ANG3110:
Nunca mostró el número de segundos, incluso en MT4 querida... Pero los minutos en MT4 se mostraron claramente. ¿Qué muestra entonces _Period en el gráfico H1? A mí me parece un fallo grave.
ANG3110:
Lee con atención, he escrito sobre _Period, no sobre PeriodSeconds. Y no obstruyas la página con tus errores de percepción, por favor.
Ya está arreglado. El punto general es que, usando PeriodSeconds obtenemos exactamente los segundos de un periodo, y luego hacemos lo que queramos con ellos...

Por tanto, H1 = 16385 no es una tontería, es la representación numérica de H1 en ENUM_TIMEFRAMES.


Leer la ayuda de Period-u

Periodo

Devuelve el valor del marco temporal del gráfico actual.

ENUM_TIMEFRAMESPeriodo();

Valor devuelto

Contenido de la variable _Period , que contiene el valor del marco temporal del gráfico actual. El valor puede ser uno de los valores dela enumeración ENUM_TIMEFRAMES.

PS

Así,no devuelve el número de minutos correspondientes al periodo (como era en MT4), sino el elemento de la enumeración ENUM_TIMEFRAMES(o su representación numérica, en su caso)...

 
Interesting:
Ya está corregido. El punto general es que, usando PeriodSeconds obtenemos exactamente los segundos de un periodo, y luego hacemos lo que queramos con ellos...

Por tanto, H1 = 16385 no es una tontería, sino una representación numérica de H1 en ENUM_TIMEFRAMES.

Maldita sea, qué lío. Antes todo era sencillo y fácil - sólo tienes que escribir Period() y obtendrás minutos. Ahora tienes unos identificadores de servicio que no necesitas para tu trabajo. Vale, intentaré conseguir los minutos en segundos.
 

Entonces, si solicito _Period en H1 y obtengo este ENUM_TIMEFRAMES= 16385, ¿cómo puedo obtener minutos de él?

Aunque, por supuesto, dividir PeriodSeconds()/60 no vale nada. Pero, ¿qué son estos identificadores y cómo se trabaja con ellos?

 
ANG3110:

Entonces, si solicito _Period en H1 y obtengo este ENUM_TIMEFRAMES= 16385, ¿cómo puedo obtener minutos de él?

He estado utilizando esta función en mi biblioteca de migración durante 11 meses y ha funcionado bien hasta ahora

//Fumction PeriodToMinute
int PeriodToMinute(ENUM_TIMEFRAMES Value)
{
//----------------------------------------------------------------------------//
//Work variables
int Result; //Returned importance
//----------------------------------------------------------------------------//
Result = PeriodSeconds(Value)/60;
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}

ANG3110:

Aunque, por supuesto, debe dividir PeriodSeconds()/60 por sí mismo. Pero aún así, qué tipo de identificadores son y cómo trabajar con ellos.

Esta pregunta puede remitirse a los fundamentos de la POO. Se trata de identificadores y enumeradores. Por favor, consulte la Referencia o cualquier buen libro de programación C++ para más detalles.

Esto ya se ha implementado en MQL4, pero no es tan obvio.

Cada identificador (ya sea escrito en MQL5 o creado por el usuario) puede tener su propia "representación numérica".

En pocas palabras (lo explico lo mejor que puedo)...

Puedes pensar que es por compatibilidad con el entorno externo, por ejemplo, DLL u otro (que no tiene ni idea de MQL y sus identificadores).

Por lo tanto, si necesitas trabajar con un punto dentro del programa MQL5, sería razonable utilizar el identificador PERIOD_H1 de la enumeración ENUM_TIMEFRAMES.

Pero si necesitas decirle al entorno externo (por ejemplo DLL) que estamos trabajando con el periodo H1, es más fácil hacerlo con la representación numérica de este identificador, en nuestro caso es 16385.

 
ANG3110:

Entonces, si solicito _Period en H1 y obtengo este ENUM_TIMEFRAMES= 16385, ¿cómo puedo obtener minutos de él?

Aunque, por supuesto, debería dividir PeriodSeconds()/60. Pero, ¿qué son estos identificadores y cómo debo trabajar con ellos?

así

int minute = PeriodSeconds(_Period)/60;
 
Interesting:

Llevo 11 meses utilizando esta función en mi biblioteca de migración, y hasta ahora ha ido bien

Lo tengo. Gracias por la respuesta.
 
sergey1294:

así

Gracias a ti también.
 

Los promotores.

1. La cadena OHLC comienza a guiñar el ojo en algunas condiciones. Revelado al probar EA en un ordenador de un solo núcleo (CPU probablemente sobrecargada)...

2. ¿Es posible colocar la lista de clases y su funcionalidad (el relleno) en el navegador, tal y como se hace en Delphi (porque no es muy cómodo trabajar con la lista de procedimientos y funciones de un módulo)?

 
Ashes:

Se ha intentado guardar el informe del probador en formato Open XML. Minutos de espera (Pentium 4, 3.0GHz), la aplicación no respondía, el proceso terminal.exe en el administrador de tareas funcionaba de forma desenfrenada (cerca del 50% de la CPU) comiendo la RAM (cerca de 250Mb), Resultado - nada. MT5 sólo responde, no entra ninguna cotización (indicador de estado de la conexión con un círculo gris giratorio). Un segundo intento, es lo mismo. La ventana "Herramientas" tiene 2 asientos "MemoryException 107878464 bytes not available", el tiempo correspondiente al intento de recibir un informe en OpenXML.
El archivo HTML se generó casi instantáneamente (unos 12 Mb). Tarda mucho en abrirse, pero no es culpa de MT5...

Repito. Todo lo mismo, pero con la construcción 358. Sólo que lleva más tiempo. Hay una dependencia del tamaño del informe - el informe corto se procesa sin problemas.
Razón de la queja: