Filtro de operaciones utilizando el historial

 

Buenas tardes.

He programado un filtro de operaciones que devuelva true o false si un símbolo se ha cerrado con beneficios en el día, pero por alguna razón no se activa.

Comprobando el acceso a las operaciones del historial a través de un script muy sencillo parece que algo no funciona como espero porque no devuelve ningún resultado:

void OnStart(){
   for(int h=0;h<HistoryDealsTotal();h++){
      ulong ticket=HistoryDealGetTicket(h);
      if(HistoryDealGetInteger(ticket,DEAL_MAGIC)>0){
         double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
         Print("Beneficio de la posición cerrada con ticket ",ticket,": ",profit);
         //break;
         }
      }
   }

El script no es exactamente el bool que he programado pero para simplificar esto debería devolver algún resultado, pero ni siquiera un error en la consola.

Cualquier ayuda es bienvenida.

 
Pedro Roberto Diez San Jose:

HistoryDealGetTicket

Elige una transacción a procesar posteriormente y devuelve el ticket de transacción en el historial. Antes de llamar a la función HistoryDealGetTicket(), hay que recibir el historial de transacciones y órdenes usando la función HistorySelect() o HistorySelectByPosition().

Por otro lado, te recomiendo que para próximas ocasiones hagas un Print() antes de cada cálculo/función para que te asegures de que todo está bien en cada paso y así saber rápidamente donde está el problema.

 
Miguel Angel Vico Alba #:

HistoryDealGetTicket

Elige una transacción a procesar posteriormente y devuelve el ticket de transacción en el historial. Antes de llamar a la función HistoryDealGetTicket(), hay que recibir el historial de transacciones y órdenes usando la función HistorySelect() o HistorySelectByPosition().

Por otro lado, te recomiendo que para próximas ocasiones hagas un Print() antes de cada cálculo/función para que te asegures de que todo está bien en cada paso y así saber rápidamente donde está el problema.

Gracias, lo he corregido usando HistorySelect que me sirve para definir el rango temporal.

datetime end=TimeCurrent(),
startdate=StringToTime(TimeToString(TimeCurrent(),TIME_DATE));
HistorySelect(startdate,end);

Con esto obtengo las operaciones del día.

 
Pedro Roberto Diez San Jose #:

Gracias, lo he corregido usando HistorySelect que me sirve para definir el rango temporal.

Con esto obtengo las operaciones del día.

Buen trabajo! 😉👍