Tal vez puedas usar las funciones
datetime ini = OrderOpenTime(); datetime fin = OrderCloseTime();
Amigo investwithalejandro, lo primero que debes entender es que una posicion es el resultado de una o mas operaciones.
entonces, para solucionar tu necesidad puedes hacer algo asi:
1. primero saber cual es el numero de posición que
quieres consultar,
2. después hacer un "for" pasando por todas las operaciones cerradas ("HistoryDealsTotal()");
3. después
debes identificar si esa
operación es una operación de cierre o de apertura (la propiedad "DEAL_ENTRY" te ayuda con eso),
4.
En caso de que sea una
operación de cierre, extraes el "DEAL_POSITION_ID", con el que sabrás a que numero de posición pertenece
esa
operación,
5.entonces confirmas si esta posición es la misma que estas queriendo consultar(punto
1)
6. en caso de que 5 sea correcto, deberías extraer el tiempo (la hora) de ejecución de esa operación
7.
debes entender que puede haber mas de una
operación de cierre, con distinta hora para la misma posición, así que lo mas lógico, es extraer el tiempo de la
mas nueva, por lo que debes confirmar si esa hora de ejecución es mas nueva que alguna que cumpliese las mismas condiciones
anteriores.
y listo, ya tienes la hora de cierre de la POSICIÓN
espero te sirva, saludos!
Amigo investwithalejandro, lo primero que debes entender es que una posicion es el resultado de una o mas operaciones.
entonces, para solucionar tu necesidad puedes hacer algo asi:
1. primero saber cual es el numero de posición que
quieres consultar,
2. después hacer un "for" pasando por todas las operaciones cerradas ("HistoryDealsTotal()");
3. después
debes identificar si esa
operación es una operación de cierre o de apertura (la propiedad "DEAL_ENTRY" te ayuda con eso),
4.
En caso de que sea una
operación de cierre, extraes el "DEAL_POSITION_ID", con el que sabrás a que numero de posición pertenece
esa
operación,
5.entonces confirmas si esta posición es la misma que estas queriendo
consultar(punto 1)
6. en caso de que 5 sea correcto, deberías extraer el tiempo (la hora) de ejecución de esa operación
7.
debes entender que puede haber mas de una
operación de cierre, con distinta hora para la misma posición, así que lo mas lógico, es extraer el tiempo
de la mas nueva, por lo que debes confirmar si esa hora de ejecución es mas nueva que alguna que cumpliese las mismas condiciones
anteriores.
y listo, ya tienes la hora de cierre de la POSICIÓN
espero te sirva, saludos!
Perfecto, gracias:)
Tengo un problema similar al compañero del hilo pero la solución expuesta me funciona en ocasiones, cuando la ejecuto en Deinit(), seguro estoy cometiendo algún error.
Quiero Obtener precio de Apertura, Tiempo de Apertura y Comentario
datetime to_date = TimeCurrent(); HistorySelect(0,to_date); int deals = HistoryDealsTotal(); ulong Position = 0; if(deals != 0) { for(int i = 0; i < deals; i++) { DealTicket = HistoryDealGetTicket(i); if(DealTicket == 0) { continue; } if((HistoryDealGetInteger(DealTicket,DEAL_ENTRY) != DEAL_ENTRY_OUT)) { continue; } if(StringFind(IntegerToString(HistoryDealGetInteger(DealTicket,DEAL_MAGIC)),IntegerToString(Obj_Inst[PS].MagicNumber_Estra),0) == -1) { continue; } Position = HistoryDealGetInteger(DealTicket,DEAL_POSITION_ID); Magic = HistoryDealGetInteger(DealTicket,DEAL_MAGIC); Profit = HistoryDealGetDouble(DealTicket,DEAL_PROFIT) + HistoryDealGetDouble(DealTicket,DEAL_SWAP) + HistoryDealGetDouble(DealTicket,DEAL_COMMISSION); Var_Lotes = HistoryDealGetDouble(DealTicket,DEAL_VOLUME); DealTipy = HistoryDealGetInteger(DealTicket,DEAL_TYPE); TiempoCierre = HistoryDealGetInteger(DealTicket,DEAL_TIME); Precio_Cierre = HistoryDealGetDouble(DealTicket,DEAL_PRICE); TiempoApertura = HistoryDealGetInteger(Position,DEAL_TIME); Precio_Apertura = HistoryDealGetDouble(Position,DEAL_PRICE); Comentario = HistoryDealGetString(Position,DEAL_COMMENT); } }
- 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
Buenas tardes. Me gustaría saber como puedo obtener la duración de una posición(en msg,segundos, o minutos....) justo cuando la cierro. Sé obtener los milisegundos desde 1/1/1970 de cuando se abre la posición, pero no de cuando se cierra. Además, la existencia de años bisiestos y meses con distinto numero de días lo complica. Estoy seguro de que debe haber alguna función o forma muy sencilla de conseguir esto, pero no la encuentro.¿Alguien puede ayudarme por favor?
Un saludo