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