ICTLibraryExamples/Base/Extra/SmtDivergence/Main.mqh
83 lines
5.9 KiB
MQL5
//+------------------------------------------------------------------+
//| Main.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
#include "..\\..\\..\\DefGlobal.mqh"
//+------------------------------------------------------------------+
//| Intérprete personalizado de SMT |
//+------------------------------------------------------------------+
class CSmtInterprete : public ISmtInterprete
{
private:
bool m_use_default;
public:
CSmtInterprete(bool use_def) : m_use_default(use_def) {}
~CSmtInterprete() {}
//---
bool AnalizeCurrentDivergence(
const int total_symbols,
const SmtDivergenceInfo& data[],
int &out_idx_diverge[],
int& out_res,
string& txt[]
) override
{
if(total_symbols != 2)
{
LogFatalError("Solo se permiten Dos simbolos", FUNCION_ACTUAL);
Remover();
return false;
}
//---
if(data[0].divergence_type != data[1].divergence_type) // Diverge
{
//--- Determinamos la señal
// Maximos
if((data[0].divergence_type == SMT_TYPE_DIVERGENCE_HH && data[1].divergence_type == SMT_TYPE_DIVERGENCE_HL)
|| (data[1].divergence_type == SMT_TYPE_DIVERGENCE_HH && data[0].divergence_type == SMT_TYPE_DIVERGENCE_HL))
{
//--- Marcamos para que se dibuje (se pone un valor mayor o igual a 0, por ejemplo aqui pondre 1)
out_idx_diverge[0] = 1;
out_idx_diverge[1] = 1;
if(!m_use_default)
{
txt[0] = data[0].symbol + " Diverge";
txt[1] = data[1].symbol + " Diverge";
}
//---
out_res = 1; // Venta
return true; // Divergencia
}
// Minimos
else
if((data[0].divergence_type == SMT_TYPE_DIVERGENCE_LL && data[1].divergence_type == SMT_TYPE_DIVERGENCE_LH)
|| (data[1].divergence_type == SMT_TYPE_DIVERGENCE_LH && data[0].divergence_type == SMT_TYPE_DIVERGENCE_LL))
{
//--- Marcamos para que se dibuje (se pone un valor mayor o igual a 0, por ejemplo aqui pondre 1)
out_idx_diverge[0] = 1;
out_idx_diverge[1] = 1;
if(!m_use_default)
{
txt[0] = data[0].symbol + " Diverge";
txt[1] = data[1].symbol + " Diverge";
}
//---
out_res = 2; // Compra
return true; // Divergencia
}
}
//---
return false;
}
};
//+------------------------------------------------------------------+