//+------------------------------------------------------------------+ //| 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