186 lines
8.1 KiB
MQL5
186 lines
8.1 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| AiDataTaskRunnerByLeo.mq5 |
|
|
//| Copyright 2026, Niquel Mendoza. |
|
|
//| https://www.mql5.com/es/users/nique_372 |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2026, Niquel Mendoza."
|
|
#property link "https://www.mql5.com/es/users/nique_372"
|
|
#property version "1.00"
|
|
#property description "Automate data generation and AI model training through a simple, easy-to-use GUI."
|
|
|
|
//#define RELEASE_VERSION
|
|
#define AIDATATASKRUNER_API_DEBUG
|
|
//+------------------------------------------------------------------+
|
|
//| Include |
|
|
//+------------------------------------------------------------------+
|
|
#include "Global.mqh"
|
|
#include "Backend\\All.mqh"
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Inputs |
|
|
//+------------------------------------------------------------------+
|
|
//---
|
|
sinput group "-- Panel folder --"
|
|
input ENUM_VERBOSE_LOG_LEVEL InpLogLevelPanelFronted = VERBOSE_LOG_LEVEL_ALL; // Log levels:
|
|
input string InpGeneralBaseFolder = "AiDataTaskRunner\\"; // Folder for panel files
|
|
input bool InpGeneralCommonFolder = true; // In common folder ?
|
|
|
|
//---
|
|
sinput group "-- Generation --"
|
|
input ENUM_VERBOSE_LOG_LEVEL InpLogLevelPanelBackend = VERBOSE_LOG_LEVEL_ALL; // Log levels:
|
|
input bool InpBackendCommonIn = true; // Files EA input in common folder ?
|
|
input bool InpBackendCommonOut = true; // Files EA output in common folder ?
|
|
input ENUM_MTTESTER_MODELADO_MODE InpBackendModeladoType = MTTESTER_MODELADO_OCHLM1; // Modelling:
|
|
|
|
//---
|
|
sinput group "-- Telegram bot --"
|
|
input string InpTelegramBotPath = EXPERT_TELEGRAM_PATH; // Put the path of telegram (Full incluyed Experts\\)
|
|
|
|
//---
|
|
sinput group "-- Training (Py comunication files)--"
|
|
sinput group "- Files comuniction -"
|
|
input string InpComment1 = "The files located here are relative to the common folder if 'Files EA output in common folder ?' is true"; // -
|
|
input string InpComment2 = "Otherwise, they are relative to MQL5\\Files\\"; // -
|
|
input string InpTrainingPyComPathJson = "AiDataTaskRunner\\Comunication\\res.json"; // Put the path of json
|
|
input string InpTrainingPyComPathBin = "AiDataTaskRunner\\Comunication\\lock.bin"; // Put the path of bin file
|
|
|
|
sinput group "- Py interprete (only for execute .py) -"
|
|
input string InpTrainingPyInterpete = "python.exe"; // Path to python interpreter (e.g. python.exe or C:\Python311\python.exe)
|
|
input string InpTrainingPyPath = "C:\\Users\\USER\\AppData\\Roaming\\MetaQuotes\\Terminal\\D0E8209F77C8CF37AD8BF550E51FF075\\MQL5\\Shared Projects"; // PYTHONPATH separated by ;
|
|
|
|
sinput group "- EA Launcher -"
|
|
input string InpTrainingPyLauncherEa = "Shared Projects\\AiDataTaskRuner\\Backend\\Training\\TrainingLauncher.ex5"; // Put the path of EA launcher (Relative at Experts\\)
|
|
|
|
//---
|
|
sinput group "-- Workflows --"
|
|
input string InpWFEaRevPath = "Shared Projects\\AiDataTaskRuner\\Backend\\Workflows\\RunnerWF.ex5"; // Put the path of EA launcher (Relative at Experts\\)
|
|
|
|
//---
|
|
sinput group "-- MCP Server --"
|
|
input string InpMcpServerExpPathFull = "Experts\\Shared Projects\\AiDataTaskRuner\\Backend\\Mcp\\McpServ.ex5"; // Put the path of telegram (Full incluyed Experts\\)
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Global variables |
|
|
//+------------------------------------------------------------------+
|
|
// Fronted de la aplicacion
|
|
CProgram g_program;
|
|
|
|
//---
|
|
// Backend (Ejecucion del tester para la generacion de datos)
|
|
CExecutionTester g_backend_executor_tester;
|
|
// Comunicacion entre el Tab Ai y el telegram bot (Esto para modificar paraemtors del bot de telegram)
|
|
CChatTelegramAgentLLmBase* g_sender_to_telegram;
|
|
// Backend Tab config (Esto para ir comunicandose con el py, se hace un pool de un archivo)
|
|
CTrainingTabConfig* g_backend_trainer_config;
|
|
// Tab workflows (capturar eventos)
|
|
CTabWorkflows* g_tab_wf;
|
|
//--- Api
|
|
// Esta es la encarga de ir recibiendo cualquier evento que le manden al panel y lo procesa
|
|
CAiDataTaskRunnerApiReciber g_api;
|
|
//+------------------------------------------------------------------+
|
|
//| Expert initialization function |
|
|
//+------------------------------------------------------------------+
|
|
int OnInit()
|
|
{
|
|
//--- Configracion general del panel
|
|
g_aidatatask_runner_config_g.base_folder = InpGeneralBaseFolder;
|
|
g_aidatatask_runner_config_g.comon_flag = InpGeneralCommonFolder;
|
|
|
|
|
|
//--- Configraucion del backend
|
|
// Backend
|
|
g_backend_executor_tester.AddLogFlags(InpLogLevelPanelBackend);
|
|
g_backend_executor_tester.Set(g_program.GetSecTaskRunerAiDGenPtr(), InpBackendCommonIn, InpBackendCommonOut, InpBackendModeladoType);
|
|
|
|
// Fronted
|
|
g_program.GetSecTaskRunerAiDGenPtr().SetRunner(&g_backend_executor_tester);
|
|
|
|
// Api
|
|
if(!g_api.Init())
|
|
{
|
|
FastLog(FATAL_ERROR_TEXT, FUNCION_ACTUAL, "Fallo al inicar la api del panel");
|
|
return INIT_FAILED;
|
|
}
|
|
g_api.SetDataGeneration(&g_backend_executor_tester, g_program.GetSecTaskRunerAiDGenPtr());
|
|
|
|
// Tab ai
|
|
g_sender_to_telegram = new CChatTelegramAgentLLmBase();
|
|
g_program.GetSecAi().Initialize(g_aidatatask_runner_config_g.base_folder, AIDATATASK_RUNNER_COMON_FLAG, g_sender_to_telegram, InpMcpServerExpPathFull);
|
|
g_sender_to_telegram.RunEA(InpTelegramBotPath); // Corremos el EA (tlgm) esto es la comuncacion entre el panel que le dice que parameotrs cambiar a telegram bot
|
|
|
|
|
|
//---
|
|
// Tab wf
|
|
g_tab_wf = g_program.GetTabWF();
|
|
g_tab_wf.Init(InpWFEaRevPath);
|
|
if(!g_tab_wf.RunEA())
|
|
{
|
|
return INIT_FAILED;
|
|
}
|
|
|
|
// Config del training tab
|
|
TrainingTabConfig config;
|
|
config.config_py_path_json_file = InpTrainingPyComPathJson;
|
|
config.config_py_path_lock_bin_file = InpTrainingPyComPathBin;
|
|
config.proyect_common_flag = InpBackendCommonOut;
|
|
config.config_path_to_ea_launcher = InpTrainingPyLauncherEa;
|
|
config.config_path_interpete_py = InpTrainingPyInterpete;
|
|
config.config_path_py_env = InpTrainingPyPath;
|
|
g_backend_trainer_config = g_program.GetTrainingTab().Config();
|
|
|
|
//--- Creacion final de la GUI
|
|
g_program.CreateGUI(700, 500, InpLogLevelPanelFronted, config);
|
|
|
|
//---
|
|
return(INIT_SUCCEEDED);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Expert deinitialization function |
|
|
//+------------------------------------------------------------------+
|
|
void OnDeinit(const int reason)
|
|
{
|
|
//--- Matamos al timer
|
|
EventKillTimer();
|
|
|
|
//--- Deinit del panel
|
|
g_program.OnDeinitEvent(reason);
|
|
|
|
//--- Finalizamos la api
|
|
g_api.Deinit();
|
|
|
|
//--- Deinit final del DSL
|
|
CAutoCleaner::Deinit(reason); // lamamos para que elimine todo lo relaciion a las depndicas del dsl (esto del feature editor)
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Expert tick function |
|
|
//+------------------------------------------------------------------+
|
|
void OnTick()
|
|
{
|
|
//--- Nada aqui
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Timer function |
|
|
//+------------------------------------------------------------------+
|
|
void OnTimer()
|
|
{
|
|
//---
|
|
g_backend_trainer_config.OnTimerEvent();
|
|
g_program.OnTimerEvent();
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| ChartEvent function |
|
|
//+------------------------------------------------------------------+
|
|
void OnChartEvent(const int32_t id,
|
|
const long &lparam,
|
|
const double &dparam,
|
|
const string &sparam)
|
|
{
|
|
//---
|
|
g_api.ChartEvent(id, lparam, dparam, sparam); // Api tiene prioridad
|
|
g_backend_executor_tester.ChartEvent(id, lparam, dparam, sparam); // Luego los eventos del tester ()
|
|
g_tab_wf.ChartEvent(id, lparam, dparam, sparam); // Eventos de wf
|
|
g_program.ChartEvent(id, lparam, dparam, sparam); // Por ultimo el renderizado de la GUI
|
|
}
|
|
//+------------------------------------------------------------------+
|