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

 

¿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?

 

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
}