forked from nique_372/AiDataGenByLeo
198 lines
15 KiB
MQL5
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
|