ICTLibraryEasy/Src/Concepts/Bloques/Base.mqh
2026-11-03 21:58:16 -05:00
197 lines
7.4 KiB
MQL5
//+------------------------------------------------------------------+
//| Blocks.mqh |
//| Copyright 2025, Niquel Mendoza. |
//| https://www.mql5.com/es/users/nique_372/news |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, Niquel Mendoza."
#property link "https://www.mql5.com/es/users/nique_372/news"
#property strict
#ifndef ICT_LIBRARY_BASE_BLOCKS_MQH
#define ICT_LIBRARY_BASE_BLOCKS_MQH
#include "..\\Base.mqh"
// Todo es inferfaz no clase... por eso ya no habra m_handle
//+------------------------------------------------------------------+
//| Interfaz para todo tipo de bloque: Fvg, Gap, Ob, Bpr |
//+------------------------------------------------------------------+
class IBlocks : public IIctConcept
{
public:
//---
IBlocks() {}
~IBlocks() {}
//--- Configuración
virtual inline void SetAlertas(bool activar, string alert_types) = 0;
//--- Eventos
virtual inline void OnNewBar() = 0;
//--- Obtención de datos - Tamaños
virtual inline int SizeBajistasMitigados() = 0;
virtual inline int SizeAlcistasMitigados() = 0;
virtual inline int SizeAlcistas() = 0;
virtual inline int SizeBajistas() = 0;
//--- Control
virtual inline void SetParo() = 0;
virtual inline void ChangeTimeframe(ENUM_TIMEFRAMES new_timeframe) = 0;
//--- Getters básicos
virtual inline ENUM_CONCEPT_UN_BLOQUE_TYPE BloqueType() const = 0;
};
//+------------------------------------------------------------------+
//| Interfaz para bloques gen (no inverso): |
//+------------------------------------------------------------------+
// Ob, Fvg, Gap, Rdrb, Imbalance
class IBlocksGen : public IBlocks
{
public:
//---
IBlocksGen() {}
~IBlocksGen() {}
//--- Creación
virtual bool Create(string symbol, ENUM_TIMEFRAMES timeframe,
long chart_id = 0, int subwin = 0,
bool show_concept = true) = 0;
//--- Configuración
virtual inline void SetGrapich(color clr_bull, color clr_bear, color clr_mitad_bull,
color clr_mitad_bear, ENUM_LINE_STYLE style_concept,
bool fill_concept, int width_c, bool mostrar_mitad_,
int max_espera, int width_line, ENUM_LINE_STYLE style_mitad) = 0;
//--- General
virtual inline void SetCalculatePrevInNextBar() = 0;
//--- Obtención de datos
// Mitigados
virtual inline Bloques GetAlcistaMitigado(const int pos) = 0;
virtual inline Bloques GetBajistaMitigiado(const int pos) = 0;
virtual inline void GetAlcistasMitigados(Bloques &bloques[]) = 0;
virtual inline void GetBajistasMitigados(Bloques &bloques[]) = 0;
// Activo
virtual inline Bloques GetAlcista(const int index) = 0;
virtual inline Bloques GetBajista(const int index) = 0;
virtual inline void GetData(Bloques &alcistas[], Bloques &bajistas[]) = 0;
// Extra
virtual inline Bloques GetLastAlcista() = 0;
virtual inline Bloques GetLastBajista() = 0;
virtual inline Bloques GetMasCercanoAlcista() = 0;
virtual inline Bloques GetMasCercanoBajista() = 0;
};
//+------------------------------------------------------------------+
//| Imbalances (FVG, Gap, Imbalance, RDRB) |
//+------------------------------------------------------------------+
class IImbalanceBlocks : public IBlocksGen
{
public:
//---
IImbalanceBlocks() {}
~IImbalanceBlocks() {}
//---
virtual inline void Set(int range_, ENUM_MODO_OBTENCION_IMBALANCE mode_obtencin,
ENUM_STYLE_DIBUJO_IMBALANCES style_draw_imbalacnes, TSN::CDiff* diff) = 0;
virtual inline void DesactivarUsoMarketBook() = 0;
};
//+------------------------------------------------------------------+
//| Intefaz para bloques (nor) que utilizen tick |
//+------------------------------------------------------------------+
template <typename T>
class IBlockTick : public T
{
public:
//---
IBlockTick() {}
~IBlockTick() {}
//---
virtual inline void OnTickEvent(datetime curr_time) = 0;
virtual inline void FreeArrayMitigated() = 0;
};
//+------------------------------------------------------------------+
//| Interfaz para bloques inversos |
//+------------------------------------------------------------------+
// Breaker block, Todos los Bpr* , Todos los Inverse* / I*
class IInverseBlocksGen : public IBlocks
{
public:
//---
IInverseBlocksGen() {}
~IInverseBlocksGen() {}
//---
virtual inline void SetGrapich(color clr_bull, color clr_bear, color clr_mitad_bull, color clr_mitad_bear, ENUM_LINE_STYLE style_concept,
bool fill_concept, int width_c, bool mostrar_mitad_, int max_espera, int width_line = 1, ENUM_LINE_STYLE style_mitad = STYLE_DOT) = 0;
//---
virtual inline int MaxEsperaToSuperate() = 0;
virtual inline void MaxEsperaToSuperate(const int new_val) = 0;
//--- Obtencion de data
// Mitigados
virtual inline BreakerBloques GetAlcistaMitigado(const int index) = 0;
virtual inline BreakerBloques GetBajistaMitigado(const int index) = 0;
virtual inline void GetAlcistasMitigados(BreakerBloques &out[]) = 0;
virtual inline void GetBajistasMitigados(BreakerBloques &out[]) = 0;
// No mitigados
virtual inline BreakerBloques GetAlcista(const int index) = 0;
virtual inline BreakerBloques GetBajista(const int index) = 0;
virtual inline void GetData(BreakerBloques &out_alcistas[], BreakerBloques &out_bajitas[]) = 0;
// Extra
virtual inline BreakerBloques MasCercanoAlcista() = 0;
virtual inline BreakerBloques MasCercanoBajista() = 0;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
// Para CInverse*
class IInverseImbalance : public IInverseBlocksGen
{
public:
IInverseImbalance(void) {}
~IInverseImbalance(void) {}
//---
virtual bool CreateByBlockBar(long chart_id_, int subwin_, bool mostar_obj, int handle_block_bar) = 0;
virtual bool CreateByBlockTick(long chart_id_, int subwin_, bool mostar_obj, int handle_block_tick) = 0;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
// Para CBpr*
class IInverseBpr : public IInverseImbalance
{
public:
IInverseBpr(void) {}
~IInverseBpr(void) {}
//---
virtual inline void SetProperties(ENUM_MODO_OBTENCION_IMBALANCE mode_obt, TSN::CDiff* min_diff_) = 0;
virtual inline void DesactivarUsoMarketBook() = 0;
};
//+------------------------------------------------------------------+
#endif
//+------------------------------------------------------------------+