322 lines
13 KiB
MQL5
322 lines
13 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| 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
|
|
//+------------------------------------------------------------------+
|