Descargar MetaTrader 5

Duración de una posición abierta: tiempo total, tiempo neto

Para añadir comentario, por favor Autorícese o regístrese
Jose Miguel Soriano
5071
Jose Miguel Soriano  

¿Si una posición se mantiene abierta con fin de semana o festivos de por medio, cómo medimos el tiempo neto, el tiempo de mercado real en que está abierta?

Si usamos la siguiente función obtenemos el tiempo natural pero no el real de mercado abierto...

//----------------------- RETORNA EL TIEMPO QUE LLEVA ABIERTA LA POSICIÓN -------------------------
double tiempoMercadoPosic(string simb= NULL, mi_FECHA_HORA modo= _SEG)
  {                                      //enum mi_FECHA_HORA {_AÑO=0,_MES=1,_DIA=2,_HORA=3,_MIN=4,_SEG=5,_DSEM=6,_DAÑO=7};
   double result=0, sgds=0;
   datetime horaApert= horaApertPosicion(simb);
   sgds= (double)(TimeCurrent()- horaApert);
   switch(modo)
   {
      case _DIA  : result= sgds/(60*60*24);   break; // calcula número de días
      case _HORA : result= sgds/(60*60);      break; // calcula número de horas
      case _MIN  : result= sgds/60;           break; // calcula número de minutos
      case _SEG  : result= sgds;                     // calcula segundos
   }
   return(result);
}

datetime horaApertPosicion(string simb)
  {
   datetime resp= -1;
   if(PositionSelect(simb)) resp= (datetime)PositionGetInteger(POSITION_TIME);
   return(resp);
  }

 ¿Alguien propone método de obtener el tiempo neto o real de mercado?

Alain Verleyen
Moderador
34420
Alain Verleyen  
Jose Miguel Soriano
5071
Jose Miguel Soriano  

Gracias. ¿Vale así...?

//----------------------------------- TIEMPO NETO POSICIÓN ABIERTA -------------------------------
long tiempoNetoPosic(string simb)
{              //devuelve el tiempo en segundos
   datetime arTmpBarra[];
   datetime horaIni= horaApertPosicion(simb),
            horaFin= TimeCurrent();
   long contTmp= CopyTime(simb, PERIOD_M1, horaIni, horaFin, arTmpBarra); //el inicio de las barras queda dentro del intervalo definido
   contTmp= contTmp>0? contTmp*60+(horaFin-arTmpBarra[(int)contTmp-1])+(horaIni-arTmpBarra[0]): -1;
   return(contTmp);          //devuelve -1 si ha habido error
}
Para añadir comentario, por favor Autorícese o regístrese