Reloj para Metatrader 5

Os dejo por aquí, listo para compilar, un indicador que muestra el tiempo restante para que se cierre la vela que estais viendo. Lo marca arriba a la derecha, y puedes modificar con las coordenadas X e Y donde quieres que salga exactamente. Simplemente copiar el codigo en vuestro editor de Meta Trader 5, y ejecutar como un indicador más.

//+------------------------------------------------------------------+
//|                                                CandleTimerEA.mq5 |
//|                                  Copyright 2026, Raulito073    |
//+------------------------------------------------------------------+
#property copyright "AI Raulito073"
#property indicator_chart_window
#property indicator_plots 0

// Nombre del objeto de texto
#define OBJ_NAME "CandleTimerLabel"

//+------------------------------------------------------------------+
//| Indicator initialization function                                |
//+------------------------------------------------------------------+
int OnInit()
{
   // Crear el objeto de texto en el gráfico
   if(!ObjectCreate(0, OBJ_NAME, OBJ_LABEL, 0, 0, 0))
   {
      Print("Error al crear el objeto visual.");
      return(INIT_FAILED);
   }
   
   // Configurar la posición en la esquina superior derecha
   ObjectSetInteger(0, OBJ_NAME, OBJPROP_CORNER, CORNER_RIGHT_UPPER);
   ObjectSetInteger(0, OBJ_NAME, OBJPROP_XDISTANCE, 80); // Distancia desde la derecha
   ObjectSetInteger(0, OBJ_NAME, OBJPROP_YDISTANCE, 20); // Distancia desde arriba
   
   // Configurar apariencia del texto
   ObjectSetString(0, OBJ_NAME, OBJPROP_FONT, "Arial Black");
   ObjectSetInteger(0, OBJ_NAME, OBJPROP_FONTSIZE, 14);
   ObjectSetInteger(0, OBJ_NAME, OBJPROP_COLOR, clrLimeGreen); // Color verde llamativo

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Indicator deinitialization function                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // Borrar el objeto al quitar el indicador del gráfico
   ObjectDelete(0, OBJ_NAME);
}

//+------------------------------------------------------------------+
//| Indicator iteration function                                     |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   // Obtener el tiempo de la vela actual y el tiempo del servidor
   datetime candle_start = time[rates_total - 1];
   datetime current_time = TimeCurrent();
   
   // Calcular la duración del período actual en segundos
   int period_seconds = PeriodSeconds();
   
   // Calcular el tiempo transcurrido y el restante
   int elapsed = (int)(current_time - candle_start);
   int remaining = period_seconds - elapsed;
   
   // Evitar valores negativos por desincronización leve
   if(remaining < 0) remaining = 0;
   
   // Dar formato de tiempo (Horas:Minutos:Segundos)
   string timer_text = "";
   
   int hours = remaining / 3600;
   int minutes = (remaining % 3600) / 60;
   int seconds = remaining % 60;
   
   if(hours > 0)
   {
      timer_text = StringFormat("%02d:%02d:%02d", hours, minutes, seconds);
   }
   else
   {
      timer_text = StringFormat("%02d:%02d", minutes, seconds);
   }
   
   // Actualizar el texto en la pantalla
   ObjectSetString(0, OBJ_NAME, OBJPROP_TEXT, timer_text);
   ChartRedraw();

   return(rates_total);
}
//+------------------------------------------------------------------+

Asi quedaría en un gráfico con velas de 5 minutos

Lo bueno es que da igual la temporalidad, ya que el reloj se ajusta solo a lo que estes viendo.

Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *