2026-09-13 08:47:52 -05:00 | | | //+------------------------------------------------------------------+
|
| | | //| 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
|