CurrentTime
CurrentTime devuelve la hora del reloj en el momento de la ejecución como un entero HHMMSS, idéntica en cada bar del gráfico. Usa TIME para leer la hora de cierre de cada bar.
Sintaxis
CurrentTimeCómo funciona
CurrentTime lee el reloj en el momento en que se ejecuta el código y devuelve la hora del día como un entero de seis dígitos HHMMSS, donde HH es la hora, MM el minuto y SS el segundo. Un valor de 073000 representa 07:30:00. La referencia es la zona horaria del mercado del instrumento, que puede diferir de la de la máquina local. La constante no toma parámetros ni desplazamiento entre corchetes.
El valor pertenece a la familia Current de constantes de fecha y hora, que describen el momento de la ejecución y no un bar del gráfico. Por tanto, todos los bars de un cálculo ven el mismo número: un indicador refrescado a las 07:30:00 devuelve 073000 en cada bar histórico. Su equivalente por bar es TIME, que devuelve la hora de cierre de cada bar que se procesa y cambia a lo largo del eje temporal. Los filtros de sesión aplicados a datos históricos corresponden a TIME; CurrentTime describe la hora del reloj actual.
Como el valor es un entero compacto, las comparaciones funcionan de forma natural: CurrentTime >= 090000 es cierto desde las 09:00:00 en adelante. En un sistema ProOrder en vivo CurrentTime tiene sentido, ya que el código se ejecuta en tiempo real a medida que llegan los bars. En un backtest refleja la hora a la que se ejecuta la prueba, lo que lo hace inadecuado para condiciones históricas de entrada o salida.
Ejemplos
Ejemplo 1, Marca de activación (Indicador)
// Set the flag when the script executes at exactly 07:30:00
IF (CurrentTime = 073000) THEN
WakeUp = 1
ELSE
WakeUp = 0
ENDIF
RETURN WakeUpEl indicador dibuja 1 en todo el gráfico cuando se recalcula a las 07:30:00 hora del mercado, y 0 en caso contrario.
Ejemplo 2, Escaneo dentro del horario de la sesión (ProScreener)
// Return matches only during the cash session
inSession = (CurrentTime >= 090000) AND (CurrentTime < 173000)
SCREENER[inSession AND close > Average[20](close)] (close AS "Close")El screener devuelve una lista vacía fuera de la ventana elegida, usando la forma empaquetada HHMMSS para una comprobación de rango limpia.
Ejemplo 3, Apagado al final del día (ProOrder)
// Stop the strategy near the close
DEFPARAM CumulateOrders = false
IF CurrentTime >= 173000 THEN
QUIT
ENDIF
IF close CROSSES OVER Average[20](close) THEN
BUY 1 CONTRACT AT MARKET
ENDIFEn vivo, el sistema se detiene a sí mismo a partir de las 17:30:00 hora del mercado. Los backtests no pueden ejercitar esta rama de forma significativa, porque CurrentTime contiene la hora de la ejecución de la prueba en cada bar.
Errores y trampas habituales
- El mismo valor en cada bar. CurrentTime describe el reloj, no el gráfico, por lo que una condición como
CurrentTime = 073000es verdadero o falso para todo el cálculo a la vez. La lógica de sesión por bar necesitaTIME. - Punto ciego del backtest. En un backtest CurrentTime devuelve la hora en que se ejecuta la prueba, por lo que los filtros de hora construidos sobre ella pasan o bloquean en bloque y producen resultados que no coinciden con el comportamiento en vivo.
- La coincidencia exacta es frágil.
CurrentTime = 073000solo es válido durante un único segundo. Las comprobaciones de rango comoCurrentTime >= 073000son más fiables para la lógica de filtrado. - Sin desplazamiento entre corchetes.
CurrentTime[1]no compila. Solo constantes por barra comoTIMEaceptan un índice comoTIME[N].
Instrucciones relacionadas
TIME, hora de cierre de cada bar como un entero HHMMSS, el equivalente por bar de esta constante.OpenTime, hora de apertura de cada bar como entero HHMMSS.OpenTimestamp, tiempo UNIX de la apertura de cada bar.Timestamp, tiempo UNIX del cierre de cada bar.CurrentHour, hora del reloj en el momento de la ejecución.CurrentMinute, minuto del reloj en el momento de la ejecución.CurrentSecond, segundo del reloj en el momento de la ejecución.CurrentYear, año del reloj en el momento de la ejecución.