English Русский 中文 Deutsch 日本語 Português
preview
Desarrollo de un kit de herramientas para el análisis de la acción del precio (Parte 9): Flujo externo

Desarrollo de un kit de herramientas para el análisis de la acción del precio (Parte 9): Flujo externo

MetaTrader 5Sistemas comerciales |
193 0
Christian Benjamin
Christian Benjamin

Introducción

Los mercados financieros pueden ser complejos, lo que a menudo plantea retos a los operadores y analistas a la hora de procesar e interpretar los datos con precisión. Para superar estos retos, se han desarrollado diversas bibliotecas que simplifican el análisis de mercado, cada una de ellas diseñada para gestionar los datos de forma que se ajusten a objetivos específicos. Aunque las bibliotecas MQL5 se utilizan habitualmente para crear estrategias e indicadores de trading, las bibliotecas externas, como las herramientas de análisis de datos de Python, proporcionan recursos adicionales para realizar análisis más avanzados y profundos.

En artículos anteriores, me centré en la acción del precio y el análisis de datos, explorando principalmente la generación de señales a través de cálculos y métricas procesadas por los Asesores Expertos (Expert Advisor, EA) de MQL5. Sin embargo, estos artículos se limitaban al análisis basado en MQL5. Este artículo marca un cambio al introducir la integración de librerías externas diseñadas específicamente para el análisis avanzado de datos. Al aprovechar la librería Python, Pandas, podemos explorar nuevas vías para los operadores, proporcionando una gama más amplia de opciones analíticas para satisfacer diversas necesidades.

Este método no sustituye a MQL5, sino que lo posiciona como el núcleo de este sistema. Este EA MQL5 sirve como puente, permitiendo la interacción con librerías y servidores externos para construir un marco analítico más robusto y flexible. Me gustaría destacar que este artículo es solo el comienzo de la exploración del análisis avanzado, y espero poder presentar ideas y técnicas más completas en futuros debates.

Veamos cómo abordaremos esta tarea:



Descripción general de la estrategia

El objetivo principal de este sistema es generar una señal comercial utilizando la biblioteca Pandas de Python, aprovechando sus funciones de interpretación de datos. En esta sección, analizaremos más de cerca cómo el sistema ejecuta la lógica central. El intercambio general ocurre entre el Asesor Experto (EA) MQL5 y Python, y varios procesos ocurren en el medio antes de que la señal finalmente se muestre en el gráfico. Sigamos los pasos que se describen a continuación para comprender cómo funciona el sistema.

1. MQL5 a Python:

  • El asesor experto MQL5 recopila los máximos, mínimos, aperturas, cierres y volúmenes del día anterior de 10 días. 
  • Envía datos al servidor Python. 
  • Formatee los datos en una cadena CSV y envíelos mediante una solicitud HTTP POST al servidor Python.

2. Python:

  • Python recibe datos y procesa los datos recibidos utilizando bibliotecas como Pandas. 
  • Analice los datos para generar una señal comercial, un precio promedio y un volumen, luego cree una explicación.

3. De Python al EA:

  • Python envía la señal generada, el precio promedio, el volumen y la explicación al EA MQL5 a través de una respuesta HTTP.

4. Asesor experto de MQL5:

  • El EA MQL5 recibe y analiza la respuesta, extrae la señal, el precio promedio, el volumen promedio y una explicación de la respuesta. 
  • Si la señal es diferente, actualice el gráfico con la nueva señal y muéstrelo.

Para obtener más información, consulte el siguiente diagrama.


Flujo de integración

Figura 1. Diagrama de la lógica



Python

Python es un lenguaje de programación versátil reconocido por su simplicidad y amplia gama de aplicaciones. Se utiliza comúnmente para análisis de datos, aprendizaje automático, desarrollo web y automatización, entre otras tareas. En este sistema, Python es crucial para realizar análisis de datos avanzados, particularmente a través de bibliotecas como Pandas, que proporcionan herramientas eficientes para manipular y analizar datos. Python también crea un servidor para la interacción entre MQL5 y sus bibliotecas. Al utilizar Python para procesar conjuntos de datos complejos, el sistema genera señales comerciales basadas en datos históricos del mercado, que luego se pasan al Asesor Experto (EA) MQL5 para ayudar en la toma de decisiones comerciales en vivo. 

Te guiaré a través del proceso de instalación de Python, creación de un script y ejecución paso a paso.

Importante: Asegúrese de marcar la casilla que dice "Add Python to PATH" (Agregar Python a PATH) antes de hacer clic en Instalar. Esto hace que sea más fácil ejecutar Python desde la línea de comandos.

  •  Completar la instalación

El instalador comenzará el proceso de instalación. Espera a que termine. Una vez completada la instalación, haga clic en Cerrar.

  •  Verificar la instalación

Abra el símbolo del sistema (presione Windows + R, escriba cmd y presione Entrar). Escriba python --version y pulse Entrar. Si Python está instalado correctamente, debería aparecer la versión de Python (por ejemplo, Python 3.x.x).

Tras instalar correctamente Python, ahora considere instalar Flask y Pandas. Flask es un marco web ligero para Python que se utiliza para crear aplicaciones web. Está diseñado para ser sencillo, flexible y fácil de usar. Flask se utiliza para configurar un servidor web sencillo que permite la comunicación entre el Asesor Experto (EA) MQL5 y las herramientas de análisis de datos de Python. El EA envía datos a Flask (a través de solicitudes HTTP), que procesa los datos utilizando bibliotecas de Python, en este caso Pandas, y devuelve una señal de trading al EA.

Para instalar Flask y Pandas utilizando el símbolo del sistema, siga estos pasos:

Abrir el Símbolo del sistema

  • Presione Windows + R, escriba cmd y presione Entrar.

Asegúrese de que pip (instalador de paquetes de Python) esté instalado.

  • Primero, verifique si pip (el administrador de paquetes de Python) está instalado ejecutando:

pip --version

  • Si pip está instalado, verá el número de versión. Si no está instalado, puedes seguir los pasos a continuación para instalarlo. PIP (Python Package Installer) suele instalarse automáticamente con Python. Si PIP no está instalado, descargue get-pip.py y ejecútelo con el comando python get-pip.py.

Instalar Flask

  • Para instalar Flask, ejecute el siguiente comando en el Símbolo del sistema:

pip install Flask

  • Espere a que se complete la instalación. Flask se instalará y estará listo para usar.

Instalar Pandas

  • Para instalar Pandas, ejecute este comando:

pip install pandas

  • Del mismo modo, espere a que se complete la instalación.

Verificar la instalación

  • Después de instalar ambos paquetes, puede verificar la instalación ejecutando estos comandos:

python -c "import flask; print(flask.__version__)"

python -c "import pandas; print(pandas.__version__)"

  • Esto debería imprimir las versiones instaladas de Flask y Pandas, confirmando que se han instalado correctamente.

Ahora puedes proceder a crear un script de Python. Personalmente, prefiero usar Notepad++ para esta tarea. Para crear el script, abra Notepad++, inicie un nuevo archivo y configure el idioma en Python seleccionándolo en el menú Idioma. Una vez que haya escrito su script, guárdelo en un directorio que sea fácil de localizar. Asegúrese de guardar el archivo con una extensión .py, que lo identifica como un script de Python.

Script de Python

import pandas as pd
import flask
from flask import request, jsonify

app = flask.Flask(__name__)
app.config["DEBUG"] = True

@app.route('/analyze', methods=['POST'])
def analyze_csv():
    try:
        # Read CSV data from the POST request
        csv_data = request.data.decode('utf-8')

        # Write the CSV data to a file (optional, for debugging)
        with open('received_data.csv', 'w') as file:
            file.write(csv_data)

        # Load the CSV data into a DataFrame
        from io import StringIO
        data = StringIO(csv_data)
        df = pd.read_csv(data)

        # Ensure the CSV has the correct columns
        required_columns = ['date', 'prev_high', 'prev_low', 'prev_open', 'prev_close', 'prev_volume']
        for column in required_columns:
            if column not in df.columns:
                return jsonify({"error": f"Missing column: {column}"}), 400

        # Print the received metrics for debugging
        print("Received metrics:")
        print(df)

        # Perform analysis (Example: Calculate average price and volume)
        df['average_price'] = (df['prev_high'] + df['prev_low'] + df['prev_open'] + df['prev_close']) / 4
        average_price = df['average_price'].mean()  # Average of all the average prices
        average_volume = df['prev_volume'].mean()  # Average volume

        # Print the computed averages
        print(f"Average Price: {average_price}")
        print(f"Average Volume: {average_volume}")

        # Create a trading signal based on a simple rule
        last_close = df['prev_close'].iloc[-1]
        if last_close > average_price:
            signal = "BUY"
            signal_explanation = f"The last close price ({last_close}) is higher than the average price ({average_price})."
        else:
            signal = "SELL"
            signal_explanation = f"The last close price ({last_close}) is lower than the average price ({average_price})."

        # Print the signal and explanation
        print(f"Generated Signal: {signal}")
        print(f"Signal Explanation: {signal_explanation}")

        # Return the signal as JSON
        return jsonify({
            "signal": signal,
            "average_price": average_price,
            "average_volume": average_volume,
            "signal_explanation": signal_explanation
        })

    except Exception as e:
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    app.run(host='189.7.6.8', port=5877)

Para ejecutar el script, abra el Símbolo del sistema en su computadora.

Ejecute el comando:

cd C:\Users\pathway to your python script folder

Seguido de un comando:

python filename.py

Utilice el nombre exacto que asignó a su script al ejecutarlo. Una vez que se ejecuta el script, indicará que el puerto está escuchando activamente.

 Running on http://189.7.6.8:5877


Funciones principales

Initialization (OnInit)

Esta función se ejecuta cuando el EA se inicializa por primera vez en la plataforma MetaTrader. Se utiliza para configurar cualquier recurso o configuración que necesite el EA. En este caso, simplemente imprime un mensaje en el registro que indica que el EA está listo para comenzar a interactuar con el servidor Python.

int OnInit()
{
   Print("Expert initialized. Ready to send data to Python.");
   return(INIT_SUCCEEDED);
}

El valor de retorno INIT_SUCCEEDED significa que la inicialización se ha realizado correctamente.

Deinitialization (OnDeinit)

Esta función se activa cuando se elimina el EA o se cierra la plataforma MetaTrader. Generalmente se utiliza para operaciones de limpieza, como liberar recursos o cerrar archivos abiertos. Aquí, simplemente imprime un mensaje indicando que el EA ha sido desinicializado y ya no está activo.

void OnDeinit(const int reason)
{
   Print("Expert deinitialized.");
}

OnTick (Core Functionality)

Esta es la función principal del EA que se ejecuta cada vez que cambian las condiciones del mercado (en cada nuevo tick).

void OnTick()
{
   // Check if enough time has passed since the last signal update
   if(TimeCurrent() - lastSignalTime < signalInterval)
   {
      return;  // Skip if it's too soon to update
   }

   // Collect data and prepare CSV for Python
   string csvData = "date,prev_high,prev_low,prev_open,prev_close,prev_volume\n";

   // Get the previous trend data for the last `trendDays`
   for(int i = 1; i <= 10; i++)  // You can adjust the trendDays here
   {
      datetime prevDate = iTime(Symbol(), PERIOD_D1, i);
      double prevHigh = iHigh(Symbol(), PERIOD_D1, i);
      double prevLow = iLow(Symbol(), PERIOD_D1, i);
      double prevOpen = iOpen(Symbol(), PERIOD_D1, i);
      double prevClose = iClose(Symbol(), PERIOD_D1, i);
      long prevVolume = iVolume(Symbol(), PERIOD_D1, i);

      csvData += StringFormat("%s,%.5f,%.5f,%.5f,%.5f,%ld\n",
                              TimeToString(prevDate, TIME_DATE | TIME_MINUTES),
                              prevHigh, prevLow, prevOpen, prevClose, prevVolume);
   }

   // Save data to CSV file
   string fileName = StringFormat("%s_analytics.csv", Symbol());
   int fileHandle = FileOpen(fileName, FILE_WRITE | FILE_CSV | FILE_ANSI);
   if(fileHandle != INVALID_HANDLE)
   {
      FileWriteString(fileHandle, csvData);
      FileClose(fileHandle);
      Print("CSV file created: ", fileName);
   }
}

También ejecuta las siguientes operaciones:

  • Comprobación del intervalo de señal: El EA comprueba primero si ha transcurrido suficiente tiempo desde la última actualización de la señal utilizando TimeCurrent(). Si no es así, se omite el procesamiento.
  • Recopilación de datos: El EA recopila datos del mercado de los últimos 10 días (o más, si cambia el valor en el bucle), incluyendo: Máximo, mínimo, apertura, cierre y volumen del día anterior.
  • Formato de datos: A continuación, formatea estos datos en formato CSV para facilitar su transmisión al servidor Python. 
  • Guardado de archivos CSV: Los datos se guardan en el disco como un archivo .csv con el nombre <símbolo>_analytics.csv. Si la creación y escritura del archivo se realizan correctamente, se muestra un mensaje de éxito.

Solicitud HTTP al servidor Python (WebRequest)

string headers = "Content-Type: application/json\r\n";
char result[];
string resultHeaders;
int responseCode = WebRequest(
    "POST",                  // HTTP method
    pythonUrl,               // URL
    headers,                 // Custom headers
    timeout,                 // Timeout in milliseconds
    data,                    // Data to send
    result,                  // Response content
    resultHeaders            // Response headers
);

if(responseCode == 200)
{
    string response = CharArrayToString(result);
    Print("Received response: ", response);
}
else
{
    Print("Error: HTTP request failed with code ", responseCode);
}

Después de preparar los datos en formato CSV, el EA envía estos datos a un servidor Python a través de HTTP POST.

  • Encabezados: El encabezado Content-Type se establece en application/json, lo que indica al servidor que los datos que se envían están en formato JSON.
  • WebRequest: La función WebRequest se utiliza para enviar la solicitud HTTP POST al servidor Python. La función devuelve:

1) responseCode: El código de respuesta HTTP (por ejemplo, 200 para indicar éxito).

2) result: El contenido de la respuesta del servidor (que suele ser el resultado del análisis).

WebRequest

Figura 2. Diagrama de flujo de WebRequest

  • Si la solicitud tiene éxito (responseCode == 200), el contenido de la respuesta se convierte de una matriz de caracteres a una cadena y se imprime un mensaje de éxito. Si la solicitud falla, se muestra un mensaje de error.

Análisis y visualización de la respuesta

if(responseCode == 200)
{
    string signal = "";
    string avgPrice = "";
    string avgVolume = "";
    string explanation = "";

    // Extract signal, avgPrice, avgVolume, and explanation from the response
    int signalStart = StringFind(response, "\"signal\":");
    int signalEnd = StringFind(response, "\"average_price\":");
    int explanationStart = StringFind(response, "\"signal_explanation\":");
    int avgPriceStart = StringFind(response, "\"average_price\":");
    int avgVolumeStart = StringFind(response, "\"average_volume\":");

    if(signalStart != -1 && signalEnd != -1)
    {
        signal = StringSubstr(response, signalStart + 10, signalEnd - signalStart - 12);
    }

    if(explanationStart != -1)
    {
        explanation = StringSubstr(response, explanationStart + 23, StringFind(response, "\"", explanationStart + 23) - (explanationStart + 23));
    }

    if(avgPriceStart != -1)
    {
        avgPrice = StringSubstr(response, avgPriceStart + 16, StringFind(response, "\"", avgPriceStart + 16) - (avgPriceStart + 16));
    }

    if(avgVolumeStart != -1)
    {
        avgVolume = StringSubstr(response, avgVolumeStart + 18, StringFind(response, "\"", avgVolumeStart + 18) - (avgVolumeStart + 18));
    }

    // Update the chart if the signal has changed
    if(signal != lastSignal)
    {
        lastSignal = signal;
        lastSignalTime = TimeCurrent();  // Update last signal time
        string receivedSummary = "Signal: " + signal + "\n" +
                                 "Avg Price: " + avgPrice + "\n" +
                                 "Avg Volume: " + avgVolume + "\n" +
                                 "Explanation: " + explanation;
        Print("Received metrics and signal: ", receivedSummary);
        Comment(receivedSummary);  // Display it on the chart
    }
}

 Después de recibir la respuesta del servidor Python, el EA analiza la respuesta para extraer datos clave, tales como:

  • Signal: La señal de negociación (por ejemplo, «comprar» o «vender»).
  • Avg Price: El precio medio derivado del análisis.
  • Avg Volume: El volumen medio de operaciones.
  • Explanation: Una explicación de por qué se generó la señal.

La función utiliza StringFind y StringSubstr para extraer estos valores de la cadena de respuesta.

Si la señal ha cambiado desde la última actualización (signal != lastSignal), entonces:

1) Actualiza las variables lastSignal y lastSignalTime.

2) Muestra la nueva señal, el precio medio, el volumen y la explicación como comentario en el gráfico utilizando la función Comment().

Actualización y visualización de señales

Esta parte está integrada en el paso anterior, donde la señal se actualiza y se muestra en el gráfico.

if(signal != lastSignal)
{
    lastSignal = signal;
    lastSignalTime = TimeCurrent();  // Update last signal time
    string receivedSummary = "Signal: " + signal + "\n" +
                             "Avg Price: " + avgPrice + "\n" +
                             "Avg Volume: " + avgVolume + "\n" +
                             "Explanation: " + explanation;
    Print("Received metrics and signal: ", receivedSummary);
    Comment(receivedSummary);  // Display it on the chart
}

 Si la señal ha cambiado (es decir, difiere de la anterior), del EA:

  • Actualiza las variables lastSignal y lastSignalTime.
  • Crea un resumen de cadena que contiene la señal, el precio medio, el volumen medio y la explicación.
  • Muestra el resumen en el gráfico como un comentario y lo imprime en el registro.

CharArrayToString (Función de utilidad)

string CharArrayToString(char &arr[])
{
    string result = "";
    for(int i = 0; i < ArraySize(arr); i++)
    {
        result += StringFormat("%c", arr[i]);
    }
    return(result);
}

Esta función de utilidad se utiliza para convertir una matriz de caracteres (recibida de la respuesta HTTP) en una cadena. Recorre cada elemento de la matriz de caracteres y añade el carácter correspondiente a la cadena de resultado.

Cada uno de estos pasos está diseñado para manejar una parte específica del proceso: recopilar datos, enviarlos al servidor Python, recibir el análisis y actualizar el gráfico con la señal comercial. El enfoque garantiza que el EA pueda operar de forma autónoma, recopilar datos relevantes del mercado y tomar decisiones basadas en análisis impulsados por Python.


Resultados

El primer paso es confirmar que su script de Python se esté ejecutando y escuchando activamente en el servidor requerido. Para obtener instrucciones detalladas sobre cómo configurar y ejecutar el script, consulte la sección de Python anterior. Si está escuchando activamente, debería escribir: 
Running on http://189.7.6.8:5877

Tenga en cuenta que la API y el host mencionados anteriormente no son los reales utilizados, sino que se generaron con fines educativos. A continuación, procedemos a iniciar el EA MQL5. Si la conexión entre MQL5 y el servidor Python se establece correctamente, verá mensajes de registro en la pestaña "Expertos" del gráfico. Además, el script de Python que se ejecuta en el símbolo del sistema mostrará las métricas recibidas.

El Símbolo del sistema mostrará lo siguiente:

189.7.6.8 - - [21/Jan/2025 10:53:44] "POST /analyze HTTP/1.1" 200 -
Received metrics:
                date  prev_high  prev_low  prev_open  prev_close  prev_volume
0   2025.01.20 00:00    868.761   811.734    826.389     863.078      83086.0
1   2025.01.19 00:00    856.104   763.531    785.527     826.394      82805.0
2   2025.01.18 00:00    807.400   752.820    795.523     785.531      82942.0
3   2025.01.17 00:00    886.055   790.732    868.390     795.546      83004.0
4   2025.01.16 00:00    941.334   864.202    932.870     868.393      83326.0
5   2025.01.15 00:00    943.354   870.546    890.620     932.876      83447.0
6   2025.01.14 00:00    902.248   848.496    875.473     890.622      83164.0
7   2025.01.13 00:00    941.634   838.520    932.868     875.473      82516.0
8   2025.01.12 00:00    951.350   868.223    896.455     932.883      83377.0
9   2025.01.11 00:00    920.043   857.814    879.103     896.466      83287.0
10               NaN        NaN       NaN        NaN         NaN          NaN

Pandas utilizará la información anterior para el análisis y la generación de señales. Los datos del décimo día muestran 'NaN' porque el día aún no ha cerrado, lo que significa que el análisis se basa principalmente en valores obtenidos de días anteriores. Sin embargo, también incorpora los niveles de precios actuales del décimo día, que están incompletos. A continuación, puede encontrar los resultados de registro y análisis que muestra pandas en el Símbolo del sistema (CMD).

Average Price: 865.884525
Average Volume: 83095.4
Generated Signal: SELL
Signal Explanation: The last close price (nan) is lower than the average price (865.884525).

MetaTrader 5 mostrará lo siguiente:

Comencemos comprobando el registro en la pestaña “Expertos”. Consulte a continuación para ver los resultados obtenidos.

2025.01.21 10:50:28.106 External Flow (Boom 300 Index,D1)       CSV file created: Boom 300 Index_analytics.csv
2025.01.21 10:50:28.161 External Flow (Boom 300 Index,D1)       Received response: {
2025.01.21 10:50:28.161 External Flow (Boom 300 Index,D1)         "average_price": 865.884525,
2025.01.21 10:50:28.161 External Flow (Boom 300 Index,D1)         "average_volume": 83095.4,
2025.01.21 10:50:28.161 External Flow (Boom 300 Index,D1)         "signal": "SELL",
2025.01.21 10:50:28.161 External Flow (Boom 300 Index,D1)         "signal_explanation": "The last close price (nan) is lower than the average price (865.884525)."

El resultado también se mostrará en el gráfico y el proceso se repetirá según la configuración de tiempo de espera especificada en los parámetros de entrada.

Visualización del gráfico

Figura 3. Resultado mostrado

A continuación se muestra un diagrama de una operación rentable que realicé en función de la señal generada y un análisis adicional. El comercio se muestra en el marco de tiempo M1 (1 minuto) para una mejor claridad.

Operación ganadora

Figura 4. Operación realizada



Conclusión

Tras describir los pasos para implementar análisis avanzados utilizando bibliotecas externas como pandas para este proyecto, creo que hemos sentado unas bases sólidas para desarrollar herramientas más avanzadas para el análisis de la evolución de los precios y del mercado. Animo a todos los traders a considerar esto como una guía general para comprender los movimientos anticipados del mercado. Sin embargo, para una ejecución comercial óptima, incorpore otras estrategias con las que esté familiarizado. Sus comentarios y sugerencias son muy bienvenidos a medida que continuamos trabajando para crear herramientas más profesionales para análisis de mercado avanzados.

FechaNombre de la herramienta DescripciónVersión Actualizaciones Notas
01/10/24Chart ProjectorScript para superponer la acción del precio del día anterior con efecto fantasma.1.0Lanzamiento inicialPrimera herramienta en Lynnchris Tool Chest
18/11/24Analytical CommentProporciona información del día anterior en formato tabular y anticipa la dirección futura del mercado.1.0Lanzamiento inicialSegunda herramienta en Lynnchris Tool Chest
27/11/24Analytics MasterActualización periódica de las métricas del mercado cada dos horas. 1.01Segundo lanzamientoTercera herramienta en Lynnchris Tool Chest
02/12/24Analytics Forecaster Actualización periódica de las métricas del mercado cada dos horas con integración de Telegram.1.1Tercera ediciónHerramienta número 4
09/12/24Volatility NavigatorEl EA analiza las condiciones del mercado utilizando los indicadores Bandas de Bollinger, RSI y ATR.1.0Lanzamiento inicialHerramienta número 5
19/12/24Mean Reversion Signal Reaper Analiza el mercado utilizando la estrategia de reversión a la media y proporciona señales. 1.0 Lanzamiento inicial Herramienta número 6 
09/01/25 Signal Pulse Analizador de múltiples marcos temporales.1.0 Lanzamiento inicial Herramienta número 7 
17/01/25 Metrics Board Panel con botón para análisis. 1.0 Lanzamiento inicialHerramienta número 8 
21/01/25External FlowAnálisis a través de bibliotecas externas.1.0 Lanzamiento inicialHerramienta número 9 

Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/16967

Archivos adjuntos |
External_Flow.mq5 (6.72 KB)
DeepANALYTICS.py (2.48 KB)
Simulación de mercado (Parte 08): Sockets (II) Simulación de mercado (Parte 08): Sockets (II)
¿Qué te parece si creamos algo práctico con sockets? Bien, en este artículo empezaremos a crear un minichat. Acompáñanos y descubre cómo se hace, porque será algo bastante interesante. Recuerda que el código que se mostrará aquí tiene un objetivo puramente didáctico. En realidad, no deberías utilizar este código con fines comerciales ni en una aplicación finalizada, ya que no cuenta con ningún tipo de seguridad en la transmisión de datos y es posible ver el contenido que se está transportando a través del socket.
Simulación de mercado (Parte 07): Sockets (I) Simulación de mercado (Parte 07): Sockets (I)
Sockets. ¿Sabes para qué sirven o cómo usarlos en MetaTrader 5? Si la respuesta es no, comencemos aprendiendo un poco sobre ellos. Este artículo trata de lo más básico. Pero, como existen diversas maneras de hacer lo mismo, y lo que realmente nos interesa es siempre el resultado, quiero mostrar que sí, existe una forma sencilla de pasar datos desde MetaTrader 5 hacia otros programas, como, por ejemplo, Excel. Sin embargo, la idea principal no es transferir datos de MetaTrader 5 a Excel, sino hacer lo contrario. Es decir, transferir datos desde Excel, o desde cualquier otro programa, hacia MetaTrader 5.
Redes neuronales en el trading: Modelos bidimensionales del espacio de enlaces (Final) Redes neuronales en el trading: Modelos bidimensionales del espacio de enlaces (Final)
Continuamos nuestra introducción al innovador framework Chimera, un modelo bidimensional de espacio de estados que utiliza tecnologías de redes neuronales para analizar series temporales multidimensionales. Este método proporciona una gran precisión de predicción con un bajo costo computacional.
Redes neuronales en el trading: Modelos bidimensionales del espacio de enlaces (Quimera) Redes neuronales en el trading: Modelos bidimensionales del espacio de enlaces (Quimera)
Descubra el innovador framework Chimera, un modelo bidimensional de espacio de estados que utiliza redes neuronales para analizar series temporales multivariantes. Este método ofrece una gran precisión con un bajo coste computacional, superando a los enfoques tradicionales y a las arquitecturas de Transformer.