forked from nique_372/MQLArticles
169 lines
6.6 KiB
MQL5
169 lines
6.6 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
| |
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
#include "..\\..\\..\\TimeUtils\\TimeUtils.mqh"
| |
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
namespace TSN
| |
{
| |
//+------------------------------------------------------------------+
| |
//| Clase CWeeklyFilter |
| |
//+------------------------------------------------------------------+
| |
class CWeeklyFilter
| |
{
| |
private:
| |
bool m_days[7];
| |
bool m_operarCrypto;
| |
| |
public:
| |
CWeeklyFilter(void);
| |
~CWeeklyFilter(void);
| |
| |
//--- Configuración de días
| |
void Set(bool lunes, bool martes, bool miercoles, bool jueves, bool viernes, bool sabado, bool domingo);
| |
void Set(const bool& arr[], int src_start = 0) { ArrayCopy(m_days, arr, 0, src_start, 7); }
| |
| |
| |
//--- Setters y Getters
| |
// Domingo
| |
inline bool Domingo(bool value) { return (m_days[0] = value); }
| |
__forceinline bool Domingo() const { return m_days[0]; }
| |
| |
// Lunes
| |
inline bool Lunes(bool value) { return (m_days[1] = value); }
| |
__forceinline bool Lunes() const { return m_days[1]; }
| |
| |
// Martes
| |
inline bool Martes(bool value) { return (m_days[2] = value); }
| |
__forceinline bool Martes() const { return m_days[2]; }
| |
| |
// Miércoles
| |
inline bool Miercoles(bool value) { return (m_days[3] = value); }
| |
__forceinline bool Miercoles() const { return m_days[3]; }
| |
| |
// Jueves
| |
inline bool Jueves(bool value) { return (m_days[4] = value); }
| |
__forceinline bool Jueves() const { return m_days[4]; }
| |
| |
// Viernes
| |
inline bool Viernes(bool value) { return (m_days[5] = value); }
| |
__forceinline bool Viernes() const { return m_days[5]; }
| |
| |
// Sábado
| |
inline bool Sabado(bool value) { return (m_days[6] = value); }
| |
__forceinline bool Sabado() const { return m_days[6]; }
| |
| |
// Día de la semana (0-6, Domingo=0, Lunes=1, etc.)
| |
__forceinline bool DayOfWeek(int day, bool value) { return (m_days[day] = value); }
| |
__forceinline bool DayOfWeek(int day) const { return m_days[day]; }
| |
| |
// Modo crypto
| |
inline bool OperarCrypto(bool value) { return (m_operarCrypto = value); }
| |
__forceinline bool OperarCrypto() const { return m_operarCrypto; }
| |
| |
//--- Verificación de días de operación
| |
__forceinline bool IsDayTrade() const;
| |
__forceinline bool IsDayTrade(datetime time) const;
| |
bool IsDayTradeByDayOfWeek(int day_of_week) const;
| |
| |
//--- Utilidades
| |
inline void EnableAll();
| |
inline void DisableAll();
| |
};
| |
| |
//+------------------------------------------------------------------+
| |
//| Constructor |
| |
//+------------------------------------------------------------------+
| |
CWeeklyFilter::CWeeklyFilter(void)
| |
{
| |
m_days[0] = false; // Domingo
| |
m_days[1] = true; // Lunes
| |
m_days[2] = true; // Martes
| |
m_days[3] = true; // Miércoles
| |
m_days[4] = true; // Jueves
| |
m_days[5] = true; // Viernes
| |
m_days[6] = false; // Sábado
| |
m_operarCrypto = false;
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| Destructor |
| |
//+------------------------------------------------------------------+
| |
CWeeklyFilter::~CWeeklyFilter(void)
| |
{
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| Habilitar todos los días |
| |
//+------------------------------------------------------------------+
| |
inline void CWeeklyFilter::EnableAll()
| |
{
| |
for(int i = 0; i < 7; i++)
| |
m_days[i] = true;
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| Deshabilitar todos los días |
| |
//+------------------------------------------------------------------+
| |
inline void CWeeklyFilter::DisableAll()
| |
{
| |
for(int i = 0; i < 7; i++)
| |
m_days[i] = false;
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| 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_days[0] = domingo;
| |
m_days[1] = lunes;
| |
m_days[2] = martes;
| |
m_days[3] = miercoles;
| |
m_days[4] = jueves;
| |
m_days[5] = viernes;
| |
m_days[6] = sabado;
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| Verificar si un día de la semana es un día de operación |
| |
//+------------------------------------------------------------------+
| |
bool CWeeklyFilter::IsDayTradeByDayOfWeek(int day_of_week) const
| |
{
| |
if((day_of_week == 0 || day_of_week == 6) && !m_operarCrypto)
| |
return false;
| |
return m_days[day_of_week];
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| Verificar si un día específico es un día de operación |
| |
//+------------------------------------------------------------------+
| |
__forceinline bool CWeeklyFilter::IsDayTrade(datetime time) const
| |
{
| |
return IsDayTradeByDayOfWeek(CTimeUtils::DayOfWeek(time));
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| Verificar si el día actual es un día de operación |
| |
//+------------------------------------------------------------------+
| |
__forceinline bool CWeeklyFilter::IsDayTrade() const
| |
{
| |
return IsDayTrade(TimeCurrent());
| |
}
| |
}
| |
//+------------------------------------------------------------------+
| |
#endif // MQLARTICLES_STRATEGY_UTILS_DAILYFILTER_MQH
|