AiDataGenByLeo/GenericData/Base/Base.mqh
2026-07-04 11:58:29 -05:00

198 lines
15 KiB
MQL5

//+------------------------------------------------------------------+
//| Base.mqh |
//| Copyright 2025, Niquel Mendoza. |
//| https://www.mql5.com/es/users/nique_372 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, Niquel Mendoza."
#property link "https://www.mql5.com/es/users/nique_372"
#property strict
#ifndef AIDATAGENBYLEO_GENERIC_DATA_BASE_BASE_MQH
#define AIDATAGENBYLEO_GENERIC_DATA_BASE_BASE_MQH
//+------------------------------------------------------------------+
//| Include |
//+------------------------------------------------------------------+
// Enum reg primero
#include "Def.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
// Nota importante por defecto se heredara de CAllClassEventsBasic, teniendo como eventos los basicos
// Si por alguna razon se requirere otros eventos como noticias etc.. entonces usetd puede definir AIDATA_LEO_FEATURE_FIRST
// Y como valor ponerle la clase "intermedia" para eventos de noticias (todas deberan de herad siempre de CAllClassEventsBasic)
// #define AIDATA_LEO_FEATURE_FIRST
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
namespace TSN
{
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#ifdef AIDATA_LEO_FEATURE_FIRST
class CAiDataLeoFeature : public AIDATA_LEO_FEATURE_FIRST
#else
class CAiDataLeoFeature : public CAllClassEventsBasic
#endif
{
public:
const string m_name; // Nombre del feature
const bool m_support_idx; // Soporta Idx?
const bool m_use_on_new_bar_m1; // Use OnNewBarM1
protected:
//--- Del modelo
string m_prefix; // Prefijo (solo para el csv... de ahi no tiene mas utilidad.. en caso de repeticiones)
bool m_init; // Bandera de inicialzacion
int m_idx_arr_size; // Tamaño de indices a generar
int m_idx_arr[]; // Array con los indices a generar
int m_idx_max; // Maximo valor idx
vector m_extra_v; // Vector de tamaño extra
public:
vector m_v; // Vector cache
private:
//--- Especificos para matrix
ulong m_start_col;
ulong m_start_row;
ulong m_end_row;
protected:
//---
virtual bool OnInitEvent(CYmlNode& params) = 0;
public:
//---
CAiDataLeoFeature(const string& name, const bool support_idx, const bool use_m1);
~CAiDataLeoFeature() {}
//--- Incializacion
bool Initialize(CYmlNode& parameters, int& idx_arr[]);
bool Initialize(CYmlNode& parameters, const int idx);
//--- Extra
void SetExtra(ulong start_col, ulong start_row, ulong end_row);
__forceinline ulong MtxStartCol() const { return m_start_col; }
__forceinline ulong MtxStartRow() const { return m_start_row; }
__forceinline ulong MtxEndRow() const { return m_end_row; }
//---
// Antencion amabas funciones tienen la misma firma esto debido a que se quiere aprovechar dos cossas
// Por un lado en OnNewBar para concpetos ICT, y por otro lado GetValue para indicadores...
virtual void OnNewBarM1(const datetime curr_time, const double bid, const double ask) {}
//--- Funcion principal
virtual void CalcValue(const datetime curr_time, const double bid, const double ask) { } // Obtener vector
//--- Prefix
void Prefix(const string& new_value) { m_prefix = new_value; }
//---
string Summary() const;
//--- Getters
// Names
__forceinline string FullName() const { return (m_name + m_prefix); }
__forceinline string Prefix() const { return m_prefix; }
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CAiDataLeoFeature::CAiDataLeoFeature(const string& name, const bool support_idx, const bool use_m1)
: m_init(false), m_name(name), m_support_idx(support_idx), m_prefix(NULL), m_use_on_new_bar_m1(use_m1)
{
m_idx_arr_size = ArrayResize(m_idx_arr, 0);
}
//+------------------------------------------------------------------+
bool CAiDataLeoFeature::Initialize(CYmlNode& parameters, int& idx_arr[])
{
//---
if(m_init)
{
LogWarning("Clase ya inciada", FUNCION_ACTUAL);
return false;
}
//---
m_idx_arr_size = ArrayCopy(m_idx_arr, idx_arr);
m_v.Resize(ulong(m_idx_arr_size)); // El tamaño de idx arr
m_idx_max = m_idx_arr[ArrayMaximum(m_idx_arr)];
//---
return OnInitEvent(parameters);
}
//+------------------------------------------------------------------+
bool CAiDataLeoFeature::Initialize(CYmlNode& parameters, const int idx)
{
//---
if(m_init)
{
LogWarning("Clase ya inciada", FUNCION_ACTUAL);
return false;
}
//---
m_idx_arr[ArrayResize(m_idx_arr, (m_idx_arr_size = 1)) - 1] = idx;
m_v.Resize(ulong(m_idx_arr_size)); // El tamaño de idx arr
m_idx_max = m_idx_arr[0];
//---
return OnInitEvent(parameters);
}
//+------------------------------------------------------------------+
void CAiDataLeoFeature::SetExtra(ulong start_col, ulong start_row, ulong end_row)
{
m_start_col = start_col;
m_start_row = start_row;
m_end_row = end_row;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string CAiDataLeoFeature::Summary(void) const
{
//---
string str = "";
for(int i = 0; i < m_idx_arr_size; i++)
{
str += string(m_idx_arr[i]) + ", ";
}
StringSetLength(str, str.Length() - 2);
//---
return StringFormat("[%s][%s](..)\n[Col=%I64u][Rows: %I64u -> %I64u] Indexes:\n[%s]", m_name, m_prefix, m_start_col, m_start_row, m_end_row, str);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//#define AIDATAGENBYELO_FEATURES_ENABLE_DESC
//+------------------------------------------------------------------+
class CAiDataFeatureCreator
{
public:
CAiDataFeatureCreator(void) {}
~CAiDataFeatureCreator(void) {}
virtual CAiDataLeoFeature* Create() = 0;
#ifdef AIDATAGENBYELO_FEATURES_ENABLE_DESC
virtual string Desc() = 0;
virtual string Params() = 0;
virtual string Type() = 0;
virtual string ClassNameCreado() = 0;
#endif // AIDATAGENBYELO_FEATURES_ENABLE_DESC
};
}
//+------------------------------------------------------------------+
#endif // AIDATAGENBYLEO_GENERIC_DATA_BASE_BASE_MQH