forked from nique_372/MQLArticles
163 lines
No EOL
10 KiB
MQL5
163 lines
No EOL
10 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| DailyFilter.mqh |
|
|
//| Copyright 2025, Leo. |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2025, Leo."
|
|
#property link "https://www.mql5.com"
|
|
#property strict
|
|
|
|
#ifndef MQLARTICLES_STRATEGY_UTILS_DAILYFILTER_MQH
|
|
#define MQLARTICLES_STRATEGY_UTILS_DAILYFILTER_MQH
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Clase CWeeklyFilter |
|
|
//+------------------------------------------------------------------+
|
|
class CWeeklyFilter
|
|
{
|
|
private:
|
|
bool m_lunes;
|
|
bool m_martes;
|
|
bool m_miercoles;
|
|
bool m_jueves;
|
|
bool m_viernes;
|
|
bool m_sabado;
|
|
bool m_domingo;
|
|
bool m_operarCrypto; // Indica si el bot opera en mercados crypto (24/7)
|
|
|
|
public:
|
|
CWeeklyFilter(void);
|
|
~CWeeklyFilter(void);
|
|
// Configurar todos los días a la vez
|
|
void Set(bool lunes, bool martes, bool miercoles, bool jueves, bool viernes, bool sabado, bool domingo);
|
|
// Establecer días individuales
|
|
void SetLunes(bool value)
|
|
{
|
|
m_lunes = value;
|
|
}
|
|
void SetMartes(bool value)
|
|
{
|
|
m_martes = value;
|
|
}
|
|
void SetMiercoles(bool value)
|
|
{
|
|
m_miercoles = value;
|
|
}
|
|
void SetJueves(bool value)
|
|
{
|
|
m_jueves = value;
|
|
}
|
|
void SetViernes(bool value)
|
|
{
|
|
m_viernes = value;
|
|
}
|
|
void SetSabado(bool value)
|
|
{
|
|
m_sabado = value;
|
|
}
|
|
void SetDomingo(bool value)
|
|
{
|
|
m_domingo = value;
|
|
}
|
|
// Establecer modo crypto
|
|
void SetOperarCrypto(bool value)
|
|
{
|
|
m_operarCrypto = value;
|
|
}
|
|
|
|
// Verificar si el día actual es un día de operación
|
|
inline bool IsDayTrade();
|
|
// Verificar si un día específico es un día de operación
|
|
bool IsDayTrade(datetime time);
|
|
// Verificar si un día de la semana es un día de operación
|
|
bool IsDayTradeByDayOfWeek(int day_of_week);
|
|
};
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Constructor |
|
|
//+------------------------------------------------------------------+
|
|
CWeeklyFilter::CWeeklyFilter(void)
|
|
{
|
|
// Por defecto, operar en días laborables (lunes a viernes)
|
|
m_lunes = true;
|
|
m_martes = true;
|
|
m_miercoles = true;
|
|
m_jueves = true;
|
|
m_viernes = true;
|
|
m_sabado = false;
|
|
m_domingo = false;
|
|
m_operarCrypto = false;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Destructor |
|
|
//+------------------------------------------------------------------+
|
|
CWeeklyFilter::~CWeeklyFilter(void)
|
|
{
|
|
// No se requieren acciones de limpieza especiales
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Establecer todos los días de una vez |
|
|
//+------------------------------------------------------------------+
|
|
void CWeeklyFilter::Set(bool lunes, bool martes, bool miercoles, bool jueves, bool viernes, bool sabado, bool domingo)
|
|
{
|
|
m_lunes = lunes;
|
|
m_martes = martes;
|
|
m_miercoles = miercoles;
|
|
m_jueves = jueves;
|
|
m_viernes = viernes;
|
|
m_sabado = sabado;
|
|
m_domingo = domingo;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Verificar si el día actual es un día de operación |
|
|
//+------------------------------------------------------------------+
|
|
bool CWeeklyFilter::IsDayTrade()
|
|
{
|
|
return IsDayTrade(TimeCurrent());
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Verificar si un día específico es un día de operación |
|
|
//+------------------------------------------------------------------+
|
|
bool CWeeklyFilter::IsDayTrade(datetime time)
|
|
{
|
|
MqlDateTime dt;
|
|
TimeToStruct(time, dt);
|
|
return IsDayTradeByDayOfWeek(dt.day_of_week);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Verificar si un día de la semana es un día de operación |
|
|
//+------------------------------------------------------------------+
|
|
bool CWeeklyFilter::IsDayTradeByDayOfWeek(int day_of_week)
|
|
{
|
|
if((day_of_week == 0 || day_of_week == 6) && !m_operarCrypto)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
switch(day_of_week)
|
|
{
|
|
case 0:
|
|
return m_domingo; // Domingo
|
|
case 1:
|
|
return m_lunes; // Lunes
|
|
case 2:
|
|
return m_martes; // Martes
|
|
case 3:
|
|
return m_miercoles; // Miércoles
|
|
case 4:
|
|
return m_jueves; // Jueves
|
|
case 5:
|
|
return m_viernes; // Viernes
|
|
case 6:
|
|
return m_sabado; // Sábado
|
|
default:
|
|
return false; // Por si acaso
|
|
}
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
#endif // MQLARTICLES_STRATEGY_UTILS_DAILYFILTER_MQH |