1
0
Ответвление 0
ответвлён от nique_372/ICTLibraryEasy
ICTLibraryEasy/Src/Concepts/TradingSession.mqh
Nique_372 e46307a620
2025-12-10 17:38:17 -05:00

339 строки
28 КиБ
MQL5

//+------------------------------------------------------------------+
//| TradingSession.mqh |
//| Copyright 2025, Leo. |
//| https://www.mql5.com/es/users/nique_372/news |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, Leo."
#property link "https://www.mql5.com/es/users/nique_372/news"
#property strict
#ifndef ICTLIBRARYEASY_SRC_CONCEPTS_TRADINGSESSION_MQH
#define ICTLIBRARYEASY_SRC_CONCEPTS_TRADINGSESSION_MQH
#include "..\\Base\\Imports.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*
Ejemplo con sesion 10-14
start_hour = 10
start_minute = 0
end_hour = 14
end_minute = 0
══════════╪══════════════════════════════════════════╪═══════════════════════════════════════
TIEMPO │ EXTERNO (API Pública) │ INTERNO (Eventos Automáticos)
══════════╪══════════════════════════════════════════╪═══════════════════════════════════════
│ │
09:59 │ IsInitSession() → false │
│ IsEndSession() → false │ OnOutOfSession() 🔄
│ EnSesion() → false │
│ │
──────────┼──────────────────────────────────────────┼───────────────────────────────────────
│ │
10:00 ⚡ │ IsInitSession() → true ⭐ │ OnInitSession() ✅
│ IsEndSession() → false │ └─ Inicialización de sesión
│ EnSesion() → true ✅ │ OnSession() ✅
│ │ └─ Primera actualización
│ │
──────────┼──────────────────────────────────────────┼───────────────────────────────────────
│ │
10:01 │ IsInitSession() → false │ OnSession() ✅
│ IsEndSession() → false │ └─ Actualización continua
│ EnSesion() → true ✅ │
│ │
──────────┼──────────────────────────────────────────┼───────────────────────────────────────
│ │
... │ IsInitSession() → false │ OnSession() 🔄
│ IsEndSession() → false │ └─ Actualización continua
│ EnSesion() → true ✅ │
│ │
──────────┼──────────────────────────────────────────┼───────────────────────────────────────
│ │
13:58 │ IsInitSession() → false │ OnSession() ✅
│ IsEndSession() → false │ └─ Actualización continua
│ EnSesion() → true ✅ │
│ │
──────────┼──────────────────────────────────────────┼───────────────────────────────────────
│ │
13:59 │ IsInitSession() → false │ OnSession() ✅
│ IsEndSession() → false │ └─ Última actualización directa
│ EnSesion() → true ✅ │
│ │
──────────┼──────────────────────────────────────────┼───────────────────────────────────────
│ │
14:00 ⚡ │ IsInitSession() → false │ OnEndSession() ✅
│ IsEndSession() → true ⭐ │ ├─ Captura final de datos
│ EnSesion() → false ❌ │ ├─ Calcula inicio/fin próxima sesión
│ │ └─ OnSession() (llamada interna)
│ │ └─ Actualización final max/min
│ │
──────────┼──────────────────────────────────────────┼───────────────────────────────────────
│ │
14:01 │ IsInitSession() → false │ OnOutOfSession() 🔄
│ IsEndSession() → false │ └─ Fuera de sesión
│ EnSesion() → false │
│ │
══════════╧══════════════════════════════════════════╧═══════════════════════════════════════
LEYENDA:
⚡ = Momento crítico (inicio/fin de sesión)
⭐ = Flag temporal (true solo en ese minuto)
✅ = Ejecución/Estado activo
❌ = Estado inactivo
🔄 = Ejecución repetitiva
Notas:
• EnSesion() retorna true durante [10:00, 13:59] (NO incluye 14:00)
• IsEndSession() retorna true SOLO a las 14:00 (flag temporal)
• Para incluir el último minuto en lógica: usar EnSesion() || IsEndSession()
• A las 14:00, OnEndSession() llama internamente a OnSession() para captura final*
*Depende del tipo de sesion (CRangeSession)
*/
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CTradingSession : public CLoggerBase
{
private:
int m_handle;
//---
void Destroy();
public:
CTradingSession();
~CTradingSession();
//---
bool Create(string symbol_, ENUM_TIMEFRAMES timeframe_, long chart_id_, int subwin_, bool show_concept_,
bool forzar_lunes_viernes, int start_hour, int start_minute, int end_hour, int end_minute, string session_name);
//--- Setter principales
inline void SetExtra(color clr_line_init, color clr_line_end, ENUM_LINE_STYLE style_lines_, int width_lines_, ENUM_TYPE_DRAW_RANGE_SESSION type_draw_);
inline void SetGrapichStyles(ENUM_LINE_STYLE rect_style_, color clr_rect_, int widht_rect_, bool fill_rect_);
//---
inline bool ShowAll();
inline bool HideAll();
inline bool DeleteAll();
inline void SetFlagMostrarObjetos(bool mostrar);
inline void ForzeToActulizeCurrentTick();
inline bool IsNewBarConcept() { return ICTTradingSession_IsNewBarConcept(m_handle); }
//--- Getters tiempo
inline datetime GetInitTimeSessionCurrNext();
inline datetime GetEndTimeSessionCurrNext();
inline datetime GetInitTimeSessionPrev();
inline datetime GetEndTimeSessionPrev();
inline int GetDuracionSessionSegundos();
inline int GetDuracionSessionMinutos();
//--- Estados de sesión
inline bool IsInitSession();
inline bool IsEndSession();
inline bool EnSesion();
//--- Eventos
inline void OnTickEvent();
//--- Nombre de la sesion
inline string GetSessionName();
//--- Log
inline void AddLogFlags(const uint8_t flags) override final;
void RemoveLogFlags(const uint8_t flags) override final;
//--- Getters
inline int Handle() const { return m_handle; }
inline string Symbol() const { return ICTTradingSession_Simbolo(m_handle); }
inline ENUM_TIMEFRAMES Timeframe() const { return ICTTradingSession_Timeframe(m_handle); }
inline long ChartId() const { return ICTTradingSession_ChartId(m_handle); }
inline int Subwin() const { return ICTTradingSession_Subwin(m_handle); }
inline bool InitialStateObj() const { return ICTTradingSession_GetInittialStateObj(m_handle); }
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CTradingSession::CTradingSession()
: m_handle(INVALID_HANDLE)
{
}
//+------------------------------------------------------------------+
CTradingSession::~CTradingSession()
{
Destroy();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CTradingSession::Create(string symbol_, ENUM_TIMEFRAMES timeframe_, long chart_id_, int subwin_, bool show_concept_,
bool forzar_lunes_viernes, int start_hour, int start_minute, int end_hour, int end_minute, string session_name)
{
if(m_handle != INVALID_HANDLE)
Destroy();
//---
m_handle = ICTTradingSession_Create(symbol_, timeframe_, chart_id_, subwin_, show_concept_, forzar_lunes_viernes, start_hour, start_minute, end_hour, end_minute, session_name);
//---
if(m_handle >= 0)
{
return true;
}
else
{
LogError("No se pudo crear un m_handle para CTradingSession", FUNCION_ACTUAL);
Remover();
}
//---
return false;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
inline void CTradingSession::SetExtra(color clr_line_init, color clr_line_end, ENUM_LINE_STYLE style_lines_, int width_lines_, ENUM_TYPE_DRAW_RANGE_SESSION type_draw_)
{
ICTTradingSession_SetExtra(m_handle, clr_line_init, clr_line_end, style_lines_, width_lines_, type_draw_);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
inline void CTradingSession::SetGrapichStyles(ENUM_LINE_STYLE rect_style_, color clr_rect_, int widht_rect_, bool fill_rect_)
{
ICTTradingSession_SetGrapichStyles(m_handle, rect_style_, clr_rect_, widht_rect_, fill_rect_);
}
//+------------------------------------------------------------------+
inline bool CTradingSession::ShowAll()
{
return ICTTradingSession_ShowAll(m_handle);
}
//+------------------------------------------------------------------+
inline bool CTradingSession::HideAll()
{
return ICTTradingSession_HideAll(m_handle);
}
//+------------------------------------------------------------------+
inline bool CTradingSession::DeleteAll()
{
return ICTTradingSession_DeleteAll(m_handle);
}
//+------------------------------------------------------------------+
inline void CTradingSession::SetFlagMostrarObjetos(bool mostrar)
{
ICTTradingSession_SetFlagMostrarObjetos(m_handle, mostrar);
}
//+------------------------------------------------------------------+
inline void CTradingSession::ForzeToActulizeCurrentTick()
{
ICTTradingSession_ForzeToActulizeCurrentTick(m_handle);
}
//+------------------------------------------------------------------+
inline datetime CTradingSession::GetInitTimeSessionCurrNext()
{
return ICTTradingSession_GetInitTimeSessionCurrNext(m_handle);
}
//+------------------------------------------------------------------+
inline datetime CTradingSession::GetEndTimeSessionCurrNext()
{
return ICTTradingSession_GetEndTimeSessionCurrNext(m_handle);
}
//+------------------------------------------------------------------+
inline datetime CTradingSession::GetInitTimeSessionPrev()
{
return ICTTradingSession_GetInitTimeSessionPrev(m_handle);
}
//+------------------------------------------------------------------+
inline datetime CTradingSession::GetEndTimeSessionPrev()
{
return ICTTradingSession_GetEndTimeSessionPrev(m_handle);
}
//+------------------------------------------------------------------+
inline int CTradingSession::GetDuracionSessionSegundos()
{
return ICTTradingSession_GetDuracionSessionSegundos(m_handle);
}
//+------------------------------------------------------------------+
inline int CTradingSession::GetDuracionSessionMinutos()
{
return ICTTradingSession_GetDuracionSessionMinutos(m_handle);
}
//+------------------------------------------------------------------+
inline bool CTradingSession::IsInitSession()
{
return ICTTradingSession_IsInitSession(m_handle);
}
//+------------------------------------------------------------------+
inline bool CTradingSession::IsEndSession()
{
return ICTTradingSession_IsEndSession(m_handle);
}
//+------------------------------------------------------------------+
inline bool CTradingSession::EnSesion()
{
return ICTTradingSession_EnSesion(m_handle);
}
//+------------------------------------------------------------------+
inline void CTradingSession::OnTickEvent()
{
ICTTradingSession_OnTickEvent(m_handle);
}
//+------------------------------------------------------------------+
inline string CTradingSession::GetSessionName()
{
return ICTTradingSession_GetSesionName(m_handle);
}
//+------------------------------------------------------------------+
inline void CTradingSession::AddLogFlags(const uint8_t flags)
{
CLoggerBase::AddLogFlags(flags);
ICTTradingSession_AddLogFlags(m_handle, flags);
}
//+------------------------------------------------------------------+
void CTradingSession::RemoveLogFlags(const uint8_t flags)
{
CLoggerBase::RemoveLogFlags(flags);
ICTTradingSession_RemoveLogFlags(m_handle, flags);
}
//+------------------------------------------------------------------+
void CTradingSession::Destroy()
{
if(m_handle != INVALID_HANDLE)
{
ICTTradingSession_Delete(m_handle);
m_handle = INVALID_HANDLE;
}
}
#endif // ICTLIBRARYEASY_SRC_CONCEPTS_TRADINGSESSION_MQH
//+------------------------------------------------------------------+