1
0
Fork 0
MQLArticles/Strategy/Utils/DailyFilter.mqh

166 Zeilen
13 KiB
MQL5

2025-12-05 16:33:47 -05:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| 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
//+------------------------------------------------------------------+
2025-12-28 18:28:41 -05:00
//| |
//+------------------------------------------------------------------+
#include "..\\..\\..\\TimeUtils\\TimeUtils.mqh"
//+------------------------------------------------------------------+
2025-12-05 16:33:47 -05:00
//| Clase CWeeklyFilter |
//+------------------------------------------------------------------+
class CWeeklyFilter
{
private:
2025-12-28 18:28:41 -05:00
bool m_days[7];
bool m_operarCrypto;
2025-12-05 16:33:47 -05:00
public:
CWeeklyFilter(void);
~CWeeklyFilter(void);
2025-12-28 18:28:41 -05:00
//--- Configuraci<EFBFBD>n de d<EFBFBD>as
2025-12-05 16:33:47 -05:00
void Set(bool lunes, bool martes, bool miercoles, bool jueves, bool viernes, bool sabado, bool domingo);
2025-12-28 18:28:41 -05:00
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<EFBFBD>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<EFBFBD>bado
inline bool Sabado(bool value) { return (m_days[6] = value); }
__forceinline bool Sabado() const { return m_days[6]; }
// D<EFBFBD>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<EFBFBD>n de d<EFBFBD>as de operaci<EFBFBD>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();
2025-12-05 16:33:47 -05:00
};
//+------------------------------------------------------------------+
//| Constructor |
//+------------------------------------------------------------------+
CWeeklyFilter::CWeeklyFilter(void)
{
2025-12-28 18:28:41 -05:00
m_days[0] = false; // Domingo
m_days[1] = true; // Lunes
m_days[2] = true; // Martes
m_days[3] = true; // Mi<EFBFBD>rcoles
m_days[4] = true; // Jueves
m_days[5] = true; // Viernes
m_days[6] = false; // S<EFBFBD>bado
2025-12-05 16:33:47 -05:00
m_operarCrypto = false;
}
//+------------------------------------------------------------------+
//| Destructor |
//+------------------------------------------------------------------+
CWeeklyFilter::~CWeeklyFilter(void)
{
}
//+------------------------------------------------------------------+
2025-12-28 18:28:41 -05:00
//| Habilitar todos los d<EFBFBD>as |
2025-12-05 16:33:47 -05:00
//+------------------------------------------------------------------+
2025-12-28 18:28:41 -05:00
inline void CWeeklyFilter::EnableAll()
2025-12-05 16:33:47 -05:00
{
2025-12-28 18:28:41 -05:00
for(int i = 0; i < 7; i++)
m_days[i] = true;
2025-12-05 16:33:47 -05:00
}
//+------------------------------------------------------------------+
2025-12-28 18:28:41 -05:00
//| Deshabilitar todos los d<EFBFBD>as |
2025-12-05 16:33:47 -05:00
//+------------------------------------------------------------------+
2025-12-28 18:28:41 -05:00
inline void CWeeklyFilter::DisableAll()
2025-12-05 16:33:47 -05:00
{
2025-12-28 18:28:41 -05:00
for(int i = 0; i < 7; i++)
m_days[i] = false;
2025-12-05 16:33:47 -05:00
}
//+------------------------------------------------------------------+
2025-12-28 18:28:41 -05:00
//| Establecer todos los d<EFBFBD>as de una vez |
2025-12-05 16:33:47 -05:00
//+------------------------------------------------------------------+
2025-12-28 18:28:41 -05:00
void CWeeklyFilter::Set(bool lunes, bool martes, bool miercoles, bool jueves, bool viernes, bool sabado, bool domingo)
2025-12-05 16:33:47 -05:00
{
2025-12-28 18:28:41 -05:00
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;
2025-12-05 16:33:47 -05:00
}
//+------------------------------------------------------------------+
//| Verificar si un d<EFBFBD>a de la semana es un d<EFBFBD>a de operaci<EFBFBD>n |
//+------------------------------------------------------------------+
2025-12-28 18:28:41 -05:00
bool CWeeklyFilter::IsDayTradeByDayOfWeek(int day_of_week) const
2025-12-05 16:33:47 -05:00
{
if((day_of_week == 0 || day_of_week == 6) && !m_operarCrypto)
return false;
2025-12-28 18:28:41 -05:00
return m_days[day_of_week];
}
//+------------------------------------------------------------------+
//| Verificar si un d<EFBFBD>a espec<EFBFBD>fico es un d<EFBFBD>a de operaci<EFBFBD>n |
//+------------------------------------------------------------------+
__forceinline bool CWeeklyFilter::IsDayTrade(datetime time) const
{
return IsDayTradeByDayOfWeek(CTimeUtils::DayOfWeek(time));
2025-12-05 16:33:47 -05:00
}
2025-12-28 18:28:41 -05:00
//+------------------------------------------------------------------+
//| Verificar si el d<EFBFBD>a actual es un d<EFBFBD>a de operaci<EFBFBD>n |
//+------------------------------------------------------------------+
__forceinline bool CWeeklyFilter::IsDayTrade() const
{
return IsDayTrade(TimeCurrent());
}
2025-12-05 16:33:47 -05:00
//+------------------------------------------------------------------+
2025-12-28 18:28:41 -05:00
#endif // MQLARTICLES_STRATEGY_UTILS_DAILYFILTER_MQH