//+------------------------------------------------------------------+ //| 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 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 //+------------------------------------------------------------------+