Problema con Red Neuronal en el Archivos de Predicciones

 

 Reciban un cordial saludo,

Tengo problema con el codigo de mi asesor experto con Red Neuronal, porque lo diseñe para que lea las predicciones de los simbolos  "Boom 1000 Index", "Crash 500 Index", "Crash 1000 Index", "Volatility 75 Index", "Step Index" y solo toma el archivo de prediccion del Step Index que esta en formato .CVS, todos los archivos estan en la misma carpeta, a continuacion les muestro los errores que me indica la pestaña de expert en MT5. Agradeceria mucho su ayuda y soporte.

//+------------------------------------------------------------------+
//|                                             LunariaRNNPrueba.mq5 |
//|                                                      Sarahi Vera |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Sarahi Vera"
#property version   "1.00"

#include <Trade\Trade.mqh>

// Definición de la función ShellExecuteA desde la API de Windows
#import "shell32.dll"
int ShellExecuteA(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
#import

// Definir los símbolos y rutas como constantes
const string symbolsToTrade[] = {"Boom 500 Index", "Boom 1000 Index", "Crash 500 Index", "Crash 1000 Index", "Volatility 75 Index", "Step Index"};
const string model_paths[] = {
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Boom 500 Index_LunariaRNN_model.h5",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Boom 1000 Index_LunariaRNN_model.h5",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Crash 500 Index_LunariaRNN_model.h5",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Crash 1000 Index_LunariaRNN_model.h5",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Volatility 75 Index_LunariaRNN_model.h5",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Step Index_LunariaRNN_model.h5"
};
const string scaler_paths[] = {
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Boom 500 Index_LunariaRNN_scaler.npy",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Boom 1000 Index_LunariaRNN_scaler.npy",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Crash 500 Index_LunariaRNN_scaler.npy",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Crash 1000 Index_LunariaRNN_scaler.npy",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Volatility 75 Index_LunariaRNN_scaler.npy",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Step Index_LunariaRNN_scaler.npy"
};
const string data_paths[] = {
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Boom 500 Index.csv",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Boom 1000 Index.csv",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Crash 500 Index.csv",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Crash 1000 Index.csv",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Volatility 75 Index.csv",
    "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\Step Index.csv"
};
const string prediction_paths[] = {
    "C:\\Users\\Sarah\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\1\\Boom 500 Index_predictions.csv",
    "C:\\Users\\Sarah\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\1\\Boom 1000 Index_predictions.csv",
    "C:\\Users\\Sarah\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\1\\Crash 500 Index_predictions.csv",
    "C:\\Users\\Sarah\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\1\\Crash 1000 Index_predictions.csv",
    "C:\\Users\\Sarah\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\1\\Volatility 75 Index_predictions.csv",
    "C:\\Users\\Sarah\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\1\\Step Index_predictions.csv"
};

const string flag_paths[] = {
    "C:\\Users\\Sarah\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\2\\Boom 500 Index_run_flag.txt",
    "C:\\Users\\Sarah\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\2\\Boom 1000 Index_run_flag.txt",
    "C:\\Users\\Sarah\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\2\\Crash 500 Index_run_flag.txt",
    "C:\\Users\\Sarah\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\2\\Crash 1000 Index_run_flag.txt",
    "C:\\Users\\Sarah\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\2\\Volatility 75 Index_run_flag.txt",
    "C:\\Users\\Sarah\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common\\Files\\2\\Step Index_run_flag.txt"
};

input ENUM_TIMEFRAMES timeframe = PERIOD_H1; // Período de tiempo para datos
input string python_path = "C:\\Users\\Sarah\\AppData\\Local\\Programs\\Python\\Python310\\python.exe"; // Ruta al ejecutable de Python
input string predict_script = "C:\\Users\\Sarah\\Documents\\Red Neuronal Precios\\predict.py"; // Ruta al script de predicción
input double lot_size = 0.1; // Tamaño del lote
input double sl_pips = 50;   // Stop loss en pips
input double tp_pips = 100;  // Take profit en pips
input int prediction_interval_seconds = 3600; // Intervalo de tiempo para predicciones en segundos

// Objeto para manejar operaciones de trading
CTrade trade;

datetime lastPredictionTime = 0;

//+------------------------------------------------------------------+
//| Función auxiliar para crear directorios                          |
//+------------------------------------------------------------------+
bool CreateDirectoryIfNotExist(string directory)
{
    ResetLastError();
    int handle = FileOpen(directory + "\\dummy.txt", FILE_WRITE|FILE_TXT|FILE_COMMON);
    if(handle != INVALID_HANDLE)
    {
        FileClose(handle);
        FileDelete(directory + "\\dummy.txt");
        Print("Directorio verificado/creado exitosamente: ", directory);
        return true;
    }
    else
    {
        int errorCode = GetLastError();
        if (errorCode == 5004) // ERR_FILE_NOT_FOUND
        {
            Print("Directorio ya existe: ", directory);
            return true;
        }
        Print("Error al crear el directorio: ", errorCode);
        return false;
    }
}

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
    // Agregar lógica de inicialización si es necesario
    return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    // Agregar lógica de limpieza si es necesario
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
    string base_predictions_directory = "1";
    string flag_directory = "2";
    
    for(int symIdx = 0; symIdx < ArraySize(symbolsToTrade); symIdx++)
    {
        string symbolToTrade = symbolsToTrade[symIdx];
        string predictions_file_path = base_predictions_directory + "\\" + symbolToTrade + "_predictions.csv";
        string flag_path = flag_directory + "\\" + symbolToTrade + "_run_flag.txt";
        
        Print("Procesando símbolo: ", symbolToTrade);
        Print("Ruta del archivo de predicciones: ", predictions_file_path);
        
        // Verificar si el archivo de predicciones existe antes de abrirlo
        if (!FileIsExist(predictions_file_path))
        {
            Print("El archivo de predicciones no existe para: ", symbolToTrade, ". Ruta: ", predictions_file_path);
            continue;
        }

        // Leer las predicciones desde el archivo correspondiente
        double prediction = 0.0;
        Print("Intentando abrir el archivo de predicciones: ", predictions_file_path);
        int prediction_handle = FileOpen(predictions_file_path, FILE_READ|FILE_CSV|FILE_COMMON|FILE_ANSI,CP_UTF8);
        if(prediction_handle != INVALID_HANDLE)
        {
            FileSeek(prediction_handle, 0, SEEK_SET);
            string header = FileReadString(prediction_handle); 
            Print("Cabecera del archivo: ", header);
            bool data_read = false;
            
            while (FileIsEnding(prediction_handle) == false)
            {
                string line = FileReadString(prediction_handle);
                Print("Línea de datos: ", line);
                if (StringLen(line) > 0)
                {
                    string values[];
                    int split_count = StringSplit(line, ',', values);
                    if (split_count > 4)
                    {
                        prediction = StringToDouble(values[3]); 
                        Print("Predicción obtenida: ", prediction);
                        data_read = true;
                        break;
                    }
                    else
                    {
                        Print("Error al dividir la línea: ", line);
                    }
                }
                else
                {
                    Print("Línea vacía leída.");
                }
            }
            
            if (!data_read)
            {
                Print("No se pudieron leer datos de predicción.");
            }
            
            FileClose(prediction_handle);
        }
        else
        {
            Print("Error al abrir el archivo de predicciones para: ", symbolToTrade, ". Ruta: ", predictions_file_path, ". Error: ", GetLastError());
            continue;
        }

        if(prediction > 0)
        {
            Print("Ejecutando operación de compra para: ", symbolToTrade);
            Buy(symbolToTrade);
        }
        else if(prediction < 0)
        {
            Print("Ejecutando operación de venta para: ", symbolToTrade);
            Sell(symbolToTrade);
        }
    }
}


void Buy(string symbol)
{
    double price = SymbolInfoDouble(symbol, SYMBOL_ASK);
    double sl = price - (sl_pips * _Point);
    double tp = price + (tp_pips * _Point);
    trade.Buy(lot_size, symbol, price, sl, tp);
}

void Sell(string symbol)
{
    double price = SymbolInfoDouble(symbol, SYMBOL_BID);
    double sl = price + (sl_pips * _Point);
    double tp = price - (tp_pips * _Point);
    trade.Sell(lot_size, symbol, price, sl, tp);
}
 

Sara, si llevas todos los archivos a la única ruta de Files perteneciente al "Data folder" estándar de la terminal instalada debería funcionar. Te van a quedar todos los archivos en el mismo nivel bajo la misma ruta Files, sin separación de carpetas sin una clasificación aparente, pero todos tus archivos tienen nombres diferentes y con base en los símbolos de Deriv, así que tu EA va air a esa carpeta a abrir los archivos sin inconvenientes.

Pregunta de curiosidad pura: por favor, de dónde sacas esas predicciones? quién o qué programa construye esas predicciones para los símbolos Boom y Crash? Qué contienen esos archivos

Saludos.