//+------------------------------------------------------------------+ //| BosChoch.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_BOS_CHOCH_MQH #define ICTLIBRARYEASY_SRC_CONCEPTS_BOS_CHOCH_MQH #include "..\\Base\\Imports.mqh" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //FLUJO DE TRABAJO: //Consta unicamente de OnNewBar, ahi se lleva acabo toda la logica, obtencion, dibujado etc. //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CBosChoch { private: int handle; int handle_swing; string symbol; ENUM_TIMEFRAMES timeframe; long chart_id; int subwin; bool show_concept; //--- void Destroy(); public: CBosChoch(); ~CBosChoch(); //--- bool Create(string symbol_, ENUM_TIMEFRAMES timeframe_, long chart_id_ = 0, int subwin_ = 0, bool show_concept_ = true); //--- Setter principales inline void SetGrapich(color clr_choch_, color clr_bos_, color clr_choch_bajista, color clr_bos_bajista, ENUM_LINE_STYLE style_bos_choch_); inline void Init(int16_t lenth_, color swing_low_clr, color swing_high_clr, string font_swing, int8_t font_size_swing, bool show_swings, int max_espera_bos_choch_, MODE_BUSQUEDA_SWING swing_strict_, bool is_exter_struct, int rango); //--- inline bool ShowAll(); inline bool HideAll(); inline bool DeleteAll(); inline void SetFlagMostrarObjetos(bool mostrar); inline void ForzeToActulizeCurrentTick(); //--- Devuelve true si es que para esta vela (0 - actual) ocurrio un (bos O choch) alcista (osea que el close[1] > precio_swing), de lo contrario false inline bool NuevaRopturaAlAlza(); //--- Devuelve false si es que para esta vela (0 - actual) ocurrio un (bos O choch) alcista (osea que el close[1] > precio_swing), de lo contrario false inline bool NuevaRopturaAlaBaja(); //--- Obtiene la tendencia actual inline ENUM_TYPE_CHOCH_BOS_TREND CurrentTrend(); //--- Obtiene bos y choch previos inline void InitPrevSimepl(); //--- Ejecuta la logica princiapl, en cada vela inline void OnNewBarSimple(); //--- Devuleve el contador alcista (1 = choch | 1 > significa bos), el contador te indica cuantas veces ocurrio una roptura, en este caso alcista. inline int ContadorAlcista(); //--- Devuleve el contador bajistas (1 = choch | 1 > significa bos), el contador te indica cuantas veces ocurrio una roptura, en este caso alcista. inline int ContadorBajista(); //--- Resetea los contadores [Esto solo si es necesario, si se hace esto entonces, el contador alcista y bajista sera 0, esto puede lleva a errores, por lo que usalo con cuidado] inline void ResetContadores(); //--- Obtiene un array de todos los (boch y choch) alcistas registrados inline void GetBullStruct(MarketStruct &out[]); //--- Obtiene un array de todos los (boch y choch) bajistas registrados inline void GetBearStruct(MarketStruct &out[]); inline int GetAlcistasCreadosSize() { return ICTBosChoch_GetAlcistasCreadosSize(handle); } inline int GetBajistasCreadosSize() { return ICTBosChoch_GetBajistasCreadosSize(handle); } inline MarketStruct GetAlcistasCreados(int idx) { return ICTBosChoch_GetAlcistasCreados(handle, idx); } inline MarketStruct GetBajistasCreados(int idx) { return ICTBosChoch_GetBajistasCreados(handle, idx); } inline void SetParo() { ICTBosChoch_SetParo(handle); } //--- Esta funcion se debe de llaamr al final de la creacion del bos choch // luego de lalamr a Create, SetGrapcih, e Init... esta funcion lo que hara sera obtener el handle del swing // QUe usa bos choch. // Rewucerda que solo se debe de llamar una unica vez esta funcion inline void SetSwingHandlePtr() { ICTBosChoch_InitSwingPointer(handle, handle_swing); } //--- inline void AddLogFlag(uint8_t log_flag); inline void RemoveLogFlag(uint8_t log_flag); inline bool IsNewBarConcept() { return ICTBosChoch_IsNewBarConcept(handle); } //--- inline int Handle() const { return handle; } inline string Symbol() const { return symbol; } inline ENUM_TIMEFRAMES Timeframe() const { return timeframe; } inline long ChartId() const { return chart_id; } inline int Subwin() const { return subwin; } inline bool ShowConcept() const { return show_concept; } inline int HandleSwing() const { return handle_swing;} // Imporate devuelve el handle REAL no el especifico }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ CBosChoch::CBosChoch() : handle(INVALID_HANDLE), symbol(NULL), timeframe(WRONG_VALUE), chart_id(0), subwin(0), show_concept(false), handle_swing(INVALID_HANDLE) { } //+------------------------------------------------------------------+ CBosChoch::~CBosChoch() { Destroy(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CBosChoch::Create(string symbol_, ENUM_TIMEFRAMES timeframe_, long chart_id_ = 0, int subwin_ = 0, bool show_concept_ = true) { if(handle != INVALID_HANDLE) Destroy(); handle = ICTBosChoch_Create(symbol_, timeframe_, chart_id_, subwin_, show_concept_); if(handle >= 0) { symbol = symbol_; timeframe = timeframe_; chart_id = chart_id_; subwin = subwin_; show_concept = show_concept_; return true; } else { FastLog(FUNCION_ACTUAL, FATAL_ERROR_TEXT, "No se pudo crear un handle para CBosChoch"); Remover(); } return false; } //+------------------------------------------------------------------+ //:::: Esta funcion, establece lo colores, estilos de los OBJ_TREND, relacionado a los bos y choch //- clr_choch_ : Color del (OBJ_TREND) choch alcista //- clr_bos_ : Color del (OBJ_TREND) bos alcista //- clr_choch_bajista : Color del (OBJ_TREND) choch bajista //- clr_bos_bajista : Color del (OBJ_TREND) bos bajista //- style_bos_choch_: Estilo de la linea del bos y choch //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ inline void CBosChoch::SetGrapich(color clr_choch_, color clr_bos_, color clr_choch_bajista, color clr_bos_bajista, ENUM_LINE_STYLE style_bos_choch_) { ICTBosChoch_SetGrapich(handle, clr_choch_, clr_bos_, clr_choch_bajista, clr_bos_bajista, style_bos_choch_); } //+------------------------------------------------------------------+ //:::: Esta funcion incia, el bos y choch. //- lenth_: Velas anteriores y posteriro al que la vela candidad debera de ser mayor (swing high), o menor (swing low), para que se considere como swing //- max_espera_bos_choch_ : Maxima espera en velas para, que luego creado un swing, se espere su roptura (close[1] > swing_high.price o swing_low.price > close[1]) para // - que se cree un bos o choch //- swing_strict_: Modo de busqueda de un swing, si es estricto entonces se pedira "consecutivdad" de lo contrairo solo mayor y menor, para mas info, te recomeidno leer // - el manual del idnicador TheSmcIctIndicator //- is_exter_struct: Parametro que indica si el bos_choch es externo o interno (esto unicamente varia el texto de los swings, si este parametro es true, entones el texto // - de los swings aparecera como SwingHigh y SwingLow, de lo contario iSwingHigh y iSwingLow) //- rango: Rango de obtencion para los bos_choch, esto sirve para InitPrev.. //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ inline void CBosChoch::Init(int16_t lenth_, color swing_low_clr, color swing_high_clr, string font_swing, int8_t font_size_swing, bool show_swings, int max_espera_bos_choch_, MODE_BUSQUEDA_SWING swing_strict_, bool is_exter_struct, int rango) { ICTBosChoch_Init(handle, lenth_, swing_low_clr, swing_high_clr, font_swing, font_size_swing, show_swings, max_espera_bos_choch_, swing_strict_, is_exter_struct, rango); } //+------------------------------------------------------------------+ inline bool CBosChoch::ShowAll() { return ICTBosChoch_ShowAll(handle); } //+------------------------------------------------------------------+ inline bool CBosChoch::HideAll() { return ICTBosChoch_HideAll(handle); } //+------------------------------------------------------------------+ inline bool CBosChoch::DeleteAll() { return ICTBosChoch_DeleteAll(handle); } //+------------------------------------------------------------------+ inline void CBosChoch::SetFlagMostrarObjetos(bool mostrar) { ICTBosChoch_SetFlagMostrarObjetos(handle, mostrar); } //+------------------------------------------------------------------+ inline void CBosChoch::ForzeToActulizeCurrentTick() { ICTBosChoch_ForzeToActulizeCurrentTick(handle); } //+------------------------------------------------------------------+ inline bool CBosChoch::NuevaRopturaAlAlza() { return ICTBosChoch_NuevaRopturaAlAlza(handle); } //+------------------------------------------------------------------+ inline bool CBosChoch::NuevaRopturaAlaBaja() { return ICTBosChoch_NuevaRopturaAlaBaja(handle); } //+------------------------------------------------------------------+ inline ENUM_TYPE_CHOCH_BOS_TREND CBosChoch::CurrentTrend() { return ICTBosChoch_GetCurrentTrend(handle); } //+------------------------------------------------------------------+ //:::: Esta funcion obtiene todos los bos y choch en un rango de velas definido en Init, al momento de llamar a esta fucnoin automaticamente (internamente) se llama a DeleteAll, // Esto para limipar el historial de bos y choch, para el nuevo historial que se obtendra. //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ inline void CBosChoch::InitPrevSimepl() { ICTBosChoch_InitPrevSimepl(handle); } //+------------------------------------------------------------------+ inline void CBosChoch::OnNewBarSimple() { ICTBosChoch_OnNewBarSimple(handle); } //+------------------------------------------------------------------+ inline int CBosChoch::ContadorAlcista() { return ICTBosChoch_ContadorAlcista(handle); } //+------------------------------------------------------------------+ inline int CBosChoch::ContadorBajista() { return ICTBosChoch_ContadorBajista(handle); } //+------------------------------------------------------------------+ inline void CBosChoch::ResetContadores() { ICTBosChoch_ResetContadores(handle); } //+------------------------------------------------------------------+ inline void CBosChoch::GetBullStruct(MarketStruct &out[]) { ICTBosChoch_GetBullStruct(handle, out); } //+------------------------------------------------------------------+ inline void CBosChoch::GetBearStruct(MarketStruct &out[]) { ICTBosChoch_GetBearStruct(handle, out); } //+------------------------------------------------------------------+ inline void CBosChoch::AddLogFlag(uint8_t log_flag) { ICTBosChoch_AddLogFlag(handle, log_flag); } //+------------------------------------------------------------------+ inline void CBosChoch::RemoveLogFlag(uint8_t log_flag) { ICTBosChoch_RemoveLogFlag(handle, log_flag); } //+------------------------------------------------------------------+ void CBosChoch::Destroy() { if(handle != INVALID_HANDLE) { ICTBosChoch_Delete(handle, handle_swing); handle_swing = INVALID_HANDLE; handle = INVALID_HANDLE; symbol = NULL; timeframe = WRONG_VALUE; chart_id = 0; subwin = 0; show_concept = false; } } #endif // ICTLIBRARYEASY_SRC_CONCEPTS_BOS_CHOCH_MQH //+------------------------------------------------------------------+