Discusión sobre el artículo "Libro de Recetas MQL5: El Historial de Transacciones y la Biblioteca de Funciones para Obtener Propiedades de Posición"
El artículo es bueno, me ha gustado. A menudo sucede que la posición actual se compone de varias ofertas, y además de la primera y la última, me gustaría conocer los parámetros de 2, 3, etc. ofertas. Una característica así enriquecería el artículo.
Pregunta al autor del artículo.
¿Cómo puedo obtener el ID de la posición en la que participó la operación inmediatamente después de la apertura de la posición?
Pregunta al autor del artículo.
¿Cómo obtener el identificador de la posición en la que se ha realizado la operación inmediatamente después de la apertura de la posición?
Seleccione la posición usando la función PositionSelect() y obtenga su identificador usando la función PositionGetInteger() y el identificador mql5 - POSITION_IDENTIFIER.
Ejemplo de la Ayuda:
//+------------------------------------------------------------------+ //| Función comercial| //+------------------------------------------------------------------+ void OnTrade() { //--- comprueba si la posición está disponible e imprime la hora de su cambio if(PositionSelect(_Symbol)) { //--- obtener el identificador de posición para seguir trabajando con él ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER); Print(_Symbol," postion #",position_ID); //--- obtener el tiempo de formación de la posición en milisegundos desde el 01.01.1970 long create_time_msc=PositionGetInteger(POSITION_TIME_MSC); PrintFormat("Position #%d POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID, create_time_msc,TimeToString(create_time_msc/1000)); //--- obtener el tiempo del último cambio de posición en segundos desde el 01.01.1970 long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE); PrintFormat("Position #%d POSITION_TIME_UPDATE = %i64 seconds => %s", position_ID,update_time_sec,TimeToString(update_time_sec)); //--- obtener el tiempo del último cambio de posición en milisegundos desde el 01.01.1970 long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC); PrintFormat("Position #%d POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s", position_ID,update_time_msc,TimeToString(update_time_msc/1000)); } //--- }
Seleccione una posición utilizando la función PositionSelect() y obtenga su identificador utilizando la función PositionGetInteger() y el identificador mql5 - POSITION_IDENTIFIER.
Ejemplo de la Ayuda:
¡Gracias, tol64! En principio, tienes razón.
Y disculpa que la primera pregunta haya sido escueta... a pesar de haber dado una referencia al identificador de posición.
El problema es el siguiente. Es necesario, después de abrir una posición, capturar esta apertura en el historial de transacciones con la ayuda de la clase CDealInfo utilizando el método ::PositionId(). Y preferiblemente con el menor intervalo de tiempo entre el momento de la apertura y el momento en que aparece en el historialuna operación de tipo DEAL_ENTRY_IN o DEAL_ENTRY_INOUT .
¡Gracias, tol64! En principio, la verdad es tuya.
Y pido disculpas por la brevedad de la primera pregunta... a pesar de que di un enlace a la identificación de la posición.
El problema es el siguiente. Después de abrir una posición, es necesario capturar esta apertura en el historial de transacciones utilizando la clase CDealInfo con el método ::PositionId(). Y preferiblemente con el menor espacio de tiempo entre el momento de la apertura y el momento en que aparece en el históricouna operación de tipo DEAL_ENTRY_IN o DEAL_ENTRY_INOUT .
En mi opinión, el seguimiento del evento en OnTrade(), como en el ejemplo anterior, es bastante adecuado para esto. Pero yo pensaría que de repente una posición no puede ser seleccionada por un evento de trade, y la siguiente no lo será pronto. Entonces usted necesita para realizar un seguimiento del medio ambiente por temporizador. Incluso milisegundos se puede establecer ahora.
Bueno, o en lugar de rastrear la posición abierta, escanear el historial de operaciones (número de operaciones). Recordamos la anterior y compararla con la actual. También puede hacerlo en el temporizador. Hay muchas variantes. Todo depende de la tarea específica.
Anatoly, he encontrado un problema aquí. Por favor, comparte tu experiencia. O bien hay un error al trabajar con funciones, o estoy yendo "mal". Pero creo que he hecho todo correctamente....
Tengo una pregunta sobre las variantes de funciones en las que la segunda no "funciona".
Por ejemplo:
1)
double HistoryOrderGetDouble( ulong ticket_number, // billete ENUM_ORDER_PROPERTY_DOUBLE property_id // identificador de la propiedad );
2)
bool HistoryOrderGetDouble( ulong ticket_number, // billete ENUM_ORDER_PROPERTY_DOUBLE property_id, // identificador de la propiedad double& double_var // aquí tomamos el valor de la propiedad );
He adjuntado el código fuente.
Anatoly, he encontrado un problema aquí. Por favor, comparte tu experiencia. O bien hay un error al trabajar con funciones, o estoy yendo "mal". Pero creo que he hecho todo correctamente....
La pregunta es acerca de las variantes de la función en la que el segundo no "trabajo".
...
¿Qué ves en el log? No veo ningún problema al ejecutar el script.
Veo que con la configuración por defecto del script hay una entrada como "Fallo al devolver la función HistoryOrderGetDouble()".
Es decir, la versión booleana de la función no obtiene el valor de la propiedad.
Veo que con la configuración por defecto del script hay un registro como "Fallo al devolver la función HistoryOrderGetDouble()".
Es decir, la versión booleana de la función no obtiene el valor de la propiedad.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Libro de Recetas MQL5: El Historial de Transacciones y la Biblioteca de Funciones para Obtener Propiedades de Posición:
Es momento de resumir brevemente la información facilitada los artículos anteriores sobre propiedades de posición. En este artículo crearemos unas cuantas funciones adicionales para obtener las propiedades que solo se pueden conseguir tras acceder al historial de transacciones. También nos familiarizaremos con estructuras de datos que nos permitirán acceder a propiedades de posición y del símbolo de una forma más conveniente.
Autor: Anatoli Kazharski