English Русский Deutsch 日本語
preview
Cómo crear un diario de operaciones con MetaTrader y Google Sheets

Cómo crear un diario de operaciones con MetaTrader y Google Sheets

MetaTrader 5Ejemplos | 26 mayo 2025, 11:38
196 0
Sara Sabaghi
Sara Sabaghi

Tabla de contenido

Concepto

Hoy en día, en el mundo del trading, reducir el error y aumentar la tasa de ganancias es muy importante. Todo trader necesita un diario de trading para mejorar el rendimiento de su estrategia. Pero este trabajo requiere mucho tiempo y precisión. Imagínese que esto se hace automáticamente.


Introducción

El sistema de diario de operaciones de Google Sheets sirve como un recurso indispensable para operadores de todos los niveles, facilitando el seguimiento organizado de sus actividades comerciales. Mantener un diario de operaciones es esencial si desea progresar como day trader. No se puede mejorar lo que no se mide. Permite a los usuarios mantener un enfoque estructurado de sus operaciones, ofreciendo información que es crucial para la evaluación y mejora del rendimiento. La accesibilidad y facilidad de uso de este sistema se ven mejoradas por las funciones colaborativas de Google Sheets, que permiten a los operadores compartir sus diarios o buscar comentarios de sus pares. Al emplear este sistema, los traders pueden cultivar la disciplina, realizar un seguimiento de sus factores psicológicos y, en última instancia, aumentar sus posibilidades de éxito en los mercados financieros.

En este artículo, diseñamos una plataforma personalizada para que los traders documenten y rastreen sus operaciones sistemáticamente. Incluye campos personalizables para reflexionar sobre estrategias y resultados, y funciones integradas para automatizar cálculos, reducir errores y ahorrar tiempo. 

Analizaremos cómo enviar datos personalizados automáticamente a través del protocolo HTTP POST a una hoja de cálculo de Google. También aprenderemos cómo leerlos o recuperarlos mediante solicitud HTTP en MetaTrader.



Soluciones disponibles

Para implementar un diario de operaciones, necesitamos transferir nuestros datos a una base de datos para su posterior análisis. Además, necesitamos acceder a dicha base de datos, descargar la información y utilizarla. La base de datos podría estar en cualquier forma, como un archivo Excel, un archivo en formato CSV, un MySQL o Microsoft SQL server, un archivo JSON o incluso cualquier archivo de texto simple donde los datos deseados se almacenan línea por línea. Dependiendo del tipo de base de datos que tenga, el diseño y desarrollo de su sistema son diferentes.

Tenemos varios tipos de soluciones.

  1. Hojas de Google: Llevar un diario de operaciones puede simplificarse utilizando un Google Sheets. Es una interfaz fácil de usar para monitorear métricas importantes como operaciones, puntos de entrada y salida, ganancias y pérdidas, y notas comerciales. Al utilizar un diario comercial público de Google Sheet, los comerciantes pueden organizar sus operaciones y recopilar estadísticas para aprender de sus experiencias. Además, Google Sheets permite la personalización, por lo que los traders pueden adaptar el diario para que se ajuste a sus estrategias específicas.
  2. Diarios de operaciones con Python y API: Para los operadores que buscan una solución más sofisticada, la automatización de su diario de operaciones mediante Python y la API de Google Sheets puede agilizar considerablemente la introducción y el análisis de datos. Esta automatización permite actualizaciones en tiempo real y reduce las posibilidades de error humano. Al extraer datos de las plataformas comerciales y completar automáticamente la hoja de cálculo de Google, los operadores pueden centrarse más en el análisis que en el ingreso manual de datos. Esta solución es particularmente efectiva para aquellos que operan con frecuencia y requieren un análisis de rendimiento preciso y oportuno.
  3. Diarios de negociación en línea: Varias revistas de trading online combinan la facilidad de uso y accesibilidad de las aplicaciones web con características que permiten a los traders registrar sus operaciones sin necesidad de gestionar manualmente una hoja de cálculo Pero necesitan cuota de suscripción. Estas plataformas a menudo vienen con herramientas analíticas integradas que pueden ayudar a los traders a identificar patrones en su comportamiento comercial, lo que potencialmente conduce a una toma de decisiones más informada.

Elegimos Google Sheets como nuestra base de datos basada en Excel por dos razones clave: primero, es simple y fácil de entender. En segundo lugar, Google Sheets es inherentemente una base de datos en línea a la que se puede acceder desde cualquier lugar y en cualquier computadora con solo un enlace. No es necesario configurar infraestructura adicional para que los datos sean accesibles en línea.


¿Qué es una hoja de cálculo de Google?

La hoja de cálculo de Google es un Excel gratuito basado en web de Google que permite a los usuarios crear, editar y gestionar hojas de cálculo. Similar a Microsoft Excel, permite a los usuarios organizar datos en celdas y tablas y realizar operaciones matemáticas, estadísticas y analíticas con cientos de tipos de análisis de barras y gráficos.

Las características principales y los beneficios de utilizar Hojas de cálculo de Google son:

  • Los archivos se guardan automáticamente en Google Drive, lo que los hace accesibles desde cualquier dispositivo con conexión a Internet.
  • Varios usuarios pueden trabajar en el mismo archivo simultáneamente y ver los cambios de los demás al instante.
  • No es necesaria ninguna instalación de software; sólo requiere un navegador y una cuenta de Google.
  • Los usuarios pueden importar y exportar datos en formatos como Excel, CSV y PDF.
  • Admite una amplia gama de funciones para el análisis de datos, similar a Excel.
  • Hojas de cálculo de Google, scripts de soporte, función de automatización también accesible mediante soluciones API.

Google Sheets es una excelente opción para colaborar en línea y acceder o compartir datos fácilmente desde cualquier lugar. Por eso puede ser una excelente opción para diarios comerciales.


API de hojas de cálculo de Google

La API de Hojas de cálculo de Google es una interfaz RESTful que le permite leer y modificar los datos de una hoja de cálculo. Los usos más comunes de esta API incluyen las siguientes tareas:

  • Crear hojas de cálculo
  • Leer y escribir valores de celdas de una hoja de cálculo
  • Actualizar el formato de la hoja de cálculo
  • Administrar hojas conectadas

Para usar la API de Hojas de cálculo de Google se necesitan pasos complejos y una cuenta de desarrollador de Google con una tarifa de $300.

Pero no acabamos aquí, te ofrecemos una solución sencilla y gratuita. Vamos a profundizar paso a paso:


Crear una nueva hoja de cálculo de Google

  1. Para empezar, abre Google Sheets y crea una nueva hoja de cálculo en blanco. Si aún no tiene una cuenta de Google, deberá registrarse para obtener una nueva para acceder a este servicio. Esta hoja de cálculo servirá como ubicación de almacenamiento principal para todos los datos con los que trabajaremos, lo que nos permitirá enviar y recuperar información sin problemas para nuestro diario de operaciones.
  2. Una vez abierta la hoja de cálculo, deberá configurar la primera fila agregando encabezados que correspondan a los puntos de datos clave que usaremos. En la primera fila, ingrese los siguientes encabezados, uno por columna:

    • ticket: Ticket, Almacenará el identificador único de cada operación.
    • order: Ordee, Esta columna indicará si la operación es una orden de compra o de venta.
    • symbol: Symbol, registraremos el instrumento de negociación, por ejemplo pares de divisas como EURUSD o GBPJPY.
    • openprice: Esto almacenará el precio al que se abrió la operación.
    • sl: Es el valor de stop loss fijado para la operación
    • tp:Es para el valor de toma de beneficios establecido para la operación
    • close: Esta columna indicará si la operación se ha cerrado o no.
    • lot: Aquí registrarás el tamaño del lote, que es el volumen de la operación.
    • opentime: Esta columna registrará la hora exacta en que se abrió la operación.

note: distinguen entre mayúsculas y minúsculas en el código de nuestro proyecto. Así que asegúrese de entenderlo si desea cambiarlos (nombre de la columna) con su estilo.

Hoja de cálculo - iniciar


Crear un script de Google Apps

Para agregar funcionalidad a su hoja de cálculo de Google, el siguiente paso es crear un Google Apps Script. Google Apps Script te permite escribir código personalizado que automatiza tareas y conecta servicios de Google, lo que lo convierte en una herramienta perfecta para vincular tu hoja de cálculo con plataformas externas.

Para hacer esto:

  • En Hojas de cálculo de Google, haga clic en el menú “Extensiones” en la parte superior.
  • En el menú desplegable, seleccione “Apps Script”. Esta acción abrirá una nueva pestaña que lo llevará a la interfaz de Google Apps Script, donde podrá escribir y editar código para automatizar las interacciones con su hoja.
  • Una vez que se abra el editor de Apps Script, verá un editor de script en blanco. Es una buena idea darle a tu proyecto un nombre significativo para facilitar su identificación en el futuro.
  • Puedes nombrarlo como algo así como “mi primer diario” o “mi función de lista de operaciones”, lo que prefieras.
  • Una vez abierto el editor de Google Apps Script y asignado un nombre a tu proyecto, el siguiente paso es modificar el script eliminando el código predeterminado que aparece. Por defecto, Google Apps Script incluye una plantilla de función simple llamada "myFunction", que no necesitaremos para nuestro proyecto.

Script de aplicación

Entonces, elimine esa función predeterminada, luego copie y pegue la siguiente función y reemplace la función predeterminada con su propio script personalizado a continuación:

// Original code from https://github.com/jamiewilson/form-to-google-sheets
const sheetName = 'Sheet1'
const scriptProp = PropertiesService.getScriptProperties();

function initialSetup() {  
const activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
scriptProp.setProperty('key', activeSpreadsheet.getId());
}

function doPost (e) {  
  const lock = LockService.getScriptLock();
  lock.tryLock(10000);
  
  try {    
    const doc = SpreadsheetApp.openById(scriptProp.getProperty('key'));    
    const sheet = doc.getSheetByName(sheetName);
    const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    const nextRow = sheet.getLastRow() + 1;
    const newRow = headers.map(function(header) {      
      return header === 'Date' ? newDate() : e.parameter[header];
    })
 
    sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]);

    return ContentService      
      .createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
      .setMimeType(ContentService.MimeType.JSON);
  }
  catch (e) {
    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
      .setMimeType(ContentService.MimeType.JSON);
  }
  finally {
    lock.releaseLock();
  }}

Gracias a Jamie Wilson, ya que utilizamos su código (form-to-google-sheets) para nuestro proyecto

Ahora, guarde el proyecto antes de pasar al siguiente paso. Archivo > Icono Guardar

Esta función forma parte de un script de Google Apps que conecta un formulario de Google o una solicitud externa HTTP POST a una hoja de Google, lo que permite almacenar datos de forma dinámica en la hoja.

A continuación se muestra un desglose de los componentes de la función:

sheetName: es una variable global para referirnos a nuestra nueva hoja de cálculo creada anteriormente. el nombre por defecto de la hoja es «sheet1» .

scriptProp: Se utiliza para almacenar propiedades específicas del script a través de PropertiesService en Google Apps Script, lo que permite el almacenamiento persistente de valores como el ID de la hoja de cálculo.

initialSetup: Mediante esta función recuperamos la hoja de cálculo de Google activa en ese momento utilizando SpreadsheetApp.getActiveSpreadsheet() y luego almacenamos el ID único de la hoja de cálculo en las propiedades del script utilizando scriptProp.setProperty('key', activeSpreadsheet.getId()). Esto permite que otras partes del script accedan a la hoja de cálculo por ID más tarde.

doPost, es nuestra función principal que procesa las solicitudes HTTP POST entrantes asignando los datos recibidos a una hoja de cálculo de Google. Primero adquiere un bloqueo para evitar problemas de escritura simultánea, luego recupera la hoja de cálculo de destino por su ID almacenada e identifica la hoja correcta. La función lee los encabezados de la primera fila para asignar los datos entrantes a las columnas apropiadas, agrega los datos a la siguiente fila disponible y maneja el encabezado “Date” insertando automáticamente la fecha actual. Devuelve un mensaje de éxito en formato JSON si la operación se completa, o un mensaje de error si ocurre algún problema y finalmente libera el bloqueo.



Ejecute la función de configuración

Dado que este script no ha sido revisado por Google, generará una advertencia antes de que puedas continuar. Este es un procedimiento estándar para scripts no verificados.

Para ejecutar la función y configurar correctamente tu Google Apps Script:

  1. Haga clic en el icono Ejecutar situado junto al icono Guardar.
  2. Aparecerá una ventana modal indicando que «Se requiere autorización». Haz clic en «Revisar permisos» para pasar a la siguiente pantalla, en la que deberás autorizar al script a acceder a tu cuenta de Google.
  3. Seleccione la cuenta de Google que desea utilizar con este script. Esta es la cuenta que otorgará los permisos necesarios.
  4. En la siguiente pantalla, es posible que aparezca un mensaje que dice «Google no ha verificado esta aplicación». Esta es una advertencia común para las secuencias de comandos que no han pasado por el proceso de verificación de Google. Para continuar, haga clic en «Avanzado».
  5. Después de hacer clic en Avanzado, verá una opción para «Ir a proyecto sin título (inseguro)». Este mensaje indica que, si bien el script no está verificado, aún le estás permitiendo acceder a tu cuenta de Google. Haga clic en este enlace para continuar.
  6. Finalmente, se le pedirá que otorgue permisos al script. Revisa los permisos solicitados y haz clic en «Permitir» para autorizar al script a interactuar con Google Sheet y otros servicios de Google.

Tras conceder los permisos necesarios al script, verá un registro de ejecución en la consola del editor de scripts que indica que se ha autorizado la ejecución del script. En este punto, el script está listo, pero para automatizar su ejecución a través de peticiones HTTP POST, necesita configurar un disparador.


Para hacer esto:

  1. En la página del editor de Google Apps Script, en la barra lateral izquierda, haz clic en «Activadores» para abrir la interfaz de gestión del activador. Esta sección le permite configurar cuándo y cómo debe ejecutarse su script.
  2. En la página de activadores, haga clic en el botón «Añadir activador». Este botón suele estar representado por un icono de signo más (+) o etiquetado explícitamente como «Añadir activador».
  3. Aparecerá un nuevo cuadro de diálogo en el que podrá configurar los detalles de su activador. Necesita configurar el disparador para activar su función (doPost) en respuesta a una petición HTTP POST.
  4. Para el origen del evento, selecciona «Desde la aplicación web» o «Aplicación web» (la opción exacta puede variar en función de las actualizaciones de la interfaz de Google Apps Script).
  5. Elija la función que desea activar en el menú desplegable. En este caso, seleccione doPost.
  6. Elige qué despliegue debe ejecutarse: Cabecera
  7. Selecciona la fuente del evento: Desde hoja de cálculo
  8. Establezca el tipo de evento como «Al enviar formulario». Esta configuración permite que su script se ejecute en respuesta a una solicitud HTTP POST enviada a la URL de la aplicación web.

A continuación, haga clic en GUARDAR. si necesita permisos, tiene que aceptarlo mediante su cuenta de Google.


Publicar el proyecto como una aplicación web

Ahora tenemos que publicar el proyecto haciendo clic en el botón azul "Desplegar" en la página de la aplicación, y luego seleccionar "Nuevo Despliegue" en el menú desplegable.

Luego haga clic en el ícono “Seleccionar tipo” y seleccione Aplicación web.

En el formulario que aparece, seleccione las siguientes opciones:

  • Descripción:Esto puede ser cualquier cosa que quieras. Simplemente hazlo descriptivo.
  • Aplicación web → Ejecutar como: Yo
  • Aplicación web → Quién tiene acceso: Cualquiera

Luego haga clic en Implementar.

Importante: En la siguiente página que aparece, copie la URL de la aplicación web, usamos ese enlace en nuestro proyecto. Tu enlace será algo como esto:

Project link: https://script.google.com/macros/s/AfycbxWxYnDPsdvsvsdvdv236545OfgVnadvkvsASDCV6541scsSDHNfnqPeVkyH5A-r5eDhg/exec


Cómo publicar (escribir) datos en hojas de cálculo de Google

HTTP POST es un método utilizado por el protocolo HTTP para enviar datos del cliente al servidor. Generalmente se utiliza al enviar datos de formularios en sitios web. Ves muchos de ellos en la web, exactamente como el formulario de inicio de sesión en el sitio web MQL.

Los datos se transmiten en el cuerpo de la solicitud, a diferencia del método GET, donde los datos se pasan en la URL. Al utilizar el método de publicación, los datos no son visibles en la URL, por lo que es un poco más seguro y el tamaño de los datos enviados no está limitado, lo que permite el envío de archivos o datos de gran tamaño.

Sólo para probar nuestra función de script de hoja, creamos un simple formulario HTML se utiliza para recoger los datos de prueba y enviarlos al servidor para su procesamiento. El método de envío de formularios debe configurarse como POST.

El formulario HTML básico que se muestra a continuación contiene:

Action: debe establecerse por su Enlace del proyecto (De los pasos anteriores de Publicar)

Method: Es el método post del formulario, puede ser en método GET o POST.

Como escribimos nuestro script App en la hoja de Google con el método post, utilizamos post para enviar datos al Google.

entrada: incluye todo tipo de datos que queremos enviar.

Este es nuestro formulario HTML final:

<!DOCTYPE html>
<htmllang="en">
<head>
<metacharset="UTF-8">
</head>
<body>
<form method="post" action="https://script.google.com/macros/s/AfycbxWxYnDPsdvsvsdvdv236545OfgVnadvkvsASDCV6541scsSDHNfnqPeVkyH5A-r5eDhg/exec">
<input type="number" size="20" name="ticket" placeholder="ticket">
<input type="text" size="20" name="order" placeholder="order">
<input type="text" size="20" name="symbol" placeholder="symbol"><br>
<input type="number" step="0.00001" size="20" name="openprice" placeholder="openprice">
<input type="number" step="0.00001" size="20" name="sl" placeholder="stoploss">
<input type="number" step="0.00001" size="20" name="tp" placeholder="takeprofit"><br>
<input type="number" step="0.00001" size="20" name="close" placeholder="close price">
        <input type="number" step="0.01" size="20" name="lot" placeholder="volume">
        <input type="datetime-local" size="20" name="opentime" placeholder="opentime">
<input type="submit" value="post">
</form>
</body>
</html>

Copie y pegue este texto en un archivo de texto local y cambie el formato del archivo a un archivo HTML. Como este «newfile.html»

Sustituya también la dirección de la acción del formulario por la dirección del enlace de su proyecto de hoja de cálculo.

Ahora hemos conseguido enviar fácilmente los datos que queremos a una hoja de Google.

Rellena las entradas del formulario, haz clic en publicar y espera a que se actualice tu hoja de cálculo de Google.


Formulario html a Google Sheets

Si ha tenido éxito en este paso, pasaremos al siguiente, de lo contrario, lea los pasos anteriores con más atención. Compruebe las columnas de la hoja de cálculo y compárelas con el nombre de las entradas del formulario html.

El formulario utilizado anteriormente es sólo una prueba de envío de datos por HTML POST, de lo contrario, en el resto de este artículo, enviaremos automáticamente los datos de la transacción utilizando la función WebRequest MetaTrader.


Cómo leer y acceder a hojas de cálculo de Google mediante HTTP

Para leer datos de una hoja de cálculo utilizando el método HTTP, debe establecer el permiso de lectura en su hoja.

Abre la hoja de Google, busca la hoja que has creado antes y ábrela.

En la página de la hoja, en la esquina superior derecha, haga clic en compartir, y establezca el acceso General a Cualquiera con el enlace y establezca el rol a espectador.

A continuación, haga clic en Copiar enlace para utilizarlo como enlace de acceso a la hoja. El enlace de acceso es así:

https://docs.google.com/spreadsheets/d/1rYNuscaYWtRu_65W-fPnascNTYHwcU-3fWiNQ4asTBHQo/edit

El texto en negrita es su identificador de hoja.

Necesitamos ese ID para leer la hoja en tipo JSON.

Access Link: https://docs.google.com/spreadsheets/d/{YOUR_SHEET_ID}/gviz/tq?tqx=out:json&tq&gid='+gid

{YOUR_SHEET_ID} es el ID de tu hoja de cálculo que se encuentra en la URL de tu hoja.

Copie el ID de la URL de la hoja y reemplace {YOUR_SHEET_ID} en el enlace de acceso y el enlace de acceso será así:

https://docs.google.com/spreadsheets/d/1rYNuscaYWtRu_65W-fPnascNTYHwcU-3fWiNQ4asTBHQo/gviz/tq?tqx=out:json&tq&gid='+gid

Cuando utilice este enlace en su navegador, descargará todos los detalles de su hoja en un archivo con formato JSON.

El resultado es así:

google.visualization.Query.setResponse(
{
    "version": "0.6",
    "reqId": "0",
    "status": "ok",
    "sig": "529900317",
    "table":
    {
        "cols": [
        {
            "id": "A",
            "label": "ticket",
            "type": "number",
            "pattern": "General"
        },
        {
            "id": "B",
            "label": "order",
            "type": "string"
        },
        {
            "id": "C",
            "label": "symbol",
            "type": "string"
        },
        {
            "id": "D",
            "label": "openprice",
            "type": "number",
            "pattern": "General"
        }],
        "rows": [
        {
            "c": [
            {
                "v": 5.64123564E8,
                "f": "564123564"
            },
            {
                "v": "buy"
            },
            {
                "v": "EURUSD"
            },
            {
                "v": 1.2215,
                "f": "1.2215"
            },
            {
                "v": 1.21,
                "f": "1.21"
            },
            {
                "v": 1.23,
                "f": "1.23"
            },
            {
                "v": 0.0,
                "f": "0"
            },
            {
                "v": 0.01,
                "f": "0.01"
            },
            {
                "v": "Date(2024,8,11,18,27,0)",
                "f": "2024-09-11 18:27"
            }, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
            {
                "v": null
            }]
        },
        {
            "c": [
            {
                "v": 123123.0,
                "f": "123123"
            },
            {
                "v": "sell"
            },
            {
                "v": "USDJPY"
            },
            {
                "v": 147.22,
                "f": "147.22"
            },
            {
                "v": 147.44,
                "f": "147.44"
            },
            {
                "v": 146.0,
                "f": "146"
            },
            {
                "v": 0.0,
                "f": "0"
            },
            {
                "v": 0.02,
                "f": "0.02"
            },
            {
                "v": "Date(2024,8,4,20,43,0)",
                "f": "2024-09-04 20:43"
            }, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
            {
                "v": null
            }]
        }],
        "parsedNumHeaders": 1
    }
});

Contiene todos los nombres, números y valores de las columnas. Todos los datos anteriores son sólo para 2 filas de detalles de posición.

Utilizamos este archivo JSON para leer la hoja en nuestro Asesor Experto.

Vayamos a la parte más interesante de la historia, la implementación automática de todo lo que hemos dicho en la plataforma Metatrader


Implementación y actualización de herramientas para nuestro Diario de operaciones utilizando MetaTrader

Para implementar un Diario de operaciones de Google Sheet utilizando MetaTrader, el proceso implica pasos principales.

En primer lugar, tenemos que crear una hoja de Google para guardar y gestionar los detalles de las operaciones, incluidos los detalles de posición o los comentarios de posición. Ya lo hicimos antes.

A continuación, utilice Google Apps Script para permitir que la hoja interactúe con sistemas externos a través de solicitudes HTTP. También lo hicimos antes.

Ahora en MetaTrader, vamos a escribir un Asesor Experto personalizado que envía los datos comerciales (como el símbolo, el volumen y el tipo de orden) a la Hoja de Google utilizando la función WebRequest y el protocolo HTTP POST. La hoja actúa como una base de datos en la nube y nos permite monitorear, almacenar y compartir operaciones en tiempo real entre diferentes cuentas y ubicaciones.


Crear un asesor experto para publicar datos

Necesitamos un asesor experto para enviar detalles de posiciones y pedidos a la hoja de Google.

Entonces necesitamos la parte principal en nuestro código.

  1. Una función con esta tarea, verificar posiciones abiertas y órdenes pendientes en una cuenta en MetaTrader. Lo llamamos «OrderList».
  2. Una función con la tarea de enviar «OrderList»datos a nuestra hoja de Google a través de la función WebRequest. A esto lo llamamos «UpdateDatabase».


Obtenga la lista de órdenes de ejecución y posiciones

Nuestra función «OrderList» puede tener una estructura de este tipo:

void OrderList {
   for(int conter = PositionsTotal() - 1; conter >= 0; conter -= 1)
   {
      const ulong ticket = PositionGetTicket(conter);
      if(ticket == 0 || !PositionSelectByTicket(ticket)) continue;
      string   symbol      =  PositionGetString(POSITION_SYMBOL);
      int      order_type  =  PositionGetInteger(POSITION_TYPE);
      double   volume      =  PositionGetDouble(POSITION_VOLUME);
      double   open_price  =  PositionGetDouble(POSITION_PRICE_OPEN);
      datetime open_time   =  PositionGetInteger(POSITION_TIME);
      double   stop_loss   =  PositionGetDouble(POSITION_SL);
      double   take_profit =  PositionGetDouble(POSITION_TP);      
      // Send trade details via WebRequest
      UpdateDatabase(symbol, order_type, volume, open_price, stop_loss, take_profit, ticket, open_time);
   }
} 

Y para MQL4, el código podría ser así:

void OrderList {
   // Loop through all open trades
   for(int conter = OrdersTotal() - 1; conter >= 0; conter -= 1) {
      if(OrderSelect(conter, SELECT_BY_POS, MODE_TRADES)) {
         // Collect trade data
         int      ticket      =  OrderTicket();
         string   symbol      =  OrderSymbol();
         int      order_type  =  OrderType();
         double   volume      =  OrderLots();
         double   open_price  =  OrderOpenPrice();
         datetime open_time   =  OrderOpenTime();
         double   stop_loss   =  OrderStopLoss();
         double   take_profit =  OrderTakeProfit();
         // Send trade details via WebRequest
         UpdateDatabase(symbol, order_type, volume, open_price, stop_loss, take_profit, ticket, opentime);
      }
   }
}

Este código de función contiene un bucle que comienza desde 0 hasta el número total de órdenes abiertas OrdersTotal() o PositionsTotal().

Cada bucle selecciona una posición u órdenes de la lista de órdenes de MetaTrader y luego las selecciona mediante la función OrderSelect.

Luego leemos la información deseada mediante PositionGetString, PositionGetDouble y PositionGetInteger.

Todo lo que necesita en detalles para otros datos se puede encontrar aquí para Funciones comerciales de MQL4 y Funciones comerciales de MQL5.


Envío de datos de la lista de pedidos a Google Sheet

Después de obtener todos los detalles de los pedidos de la función de vista previa «OrderList», ahora necesitamos otra función llamada «UpdateDatabase» para publicar los datos de OrderList en nuestra hoja.

Coloque detalles de la posición, como el símbolo, el tipo de orden, el volumen, el precio de apertura, el stop loss, el take profit y el número de ticket como entradas de función y prepárelos en una cadena formateada. A continuación, estos datos se envían mediante una solicitud HTTP POST a través de la función WebRequest(). Si la solicitud es exitosa, confirma que se enviaron los datos comerciales; si no, imprime un mensaje de error.

void SendTradeData(string orderSymbol, int orderType, double orderVolume, double openPrice, double stopLoss, double takeProfit, ulong orderTicket, datetime openTime)
{ 
   // Database url. Replace with your own url
   string url  = "https://script.google.com/macros/s/AfycbxWxYnDPsdvsvsdvdv236545OfgVnadvkvsASDCV6541scsSDHNfnqPeVkyH5A-r5eDhg/exec";
   int   digit = (int)SymbolInfoInteger(orderSymbol,SYMBOL_DIGITS);
   string datastring = "?
                  +"&ticket="+string(orderTicket)
                  +"&order="+string(orderType)
                  +"&symbol="+string(orderSymbol)
  +"&openprice="+DoubleToString(openPrice,digit)
                  +"&sl="+DoubleToString(stopLoss,digit)
                  +"&tp="+DoubleToString(takeProfit,digit)
                  +"&close=0"
  +"&lot="+DoubleToString(orderVolume,2)
  +"&opentime="+(string)openTime;   

   int   res;     // To receive the operation execution result
   char  data[];  // Data array to send POST requests  
   char  result[];
   //--- Create the body of the POST request for authorization
   ArrayResize(data,StringToCharArray(datastring,data,0,WHOLE_ARRAY,CP_UTF8)-1);
   ResetLastError();
   res=WebRequest("POST", url, NULL, 0, data, result, str);
   string responsestring   = CharArrayToString(result, 0, 0, CP_UTF8);
   Print(responsestring);
   if(res == -1)
      Print("Error in WebRequest: ", GetLastError());
   else
      Print("Trade data sent: ", data);
}

En esta función, obtenemos los datos de órdenes o posiciones de la función «OrderList» y luego los preparamos para un método post estándar.

La URL es la URL pública de nuestra hoja.

A continuación creamos una variable de cadena «datastring»con formato método GET.

Con la función StringToCharArray, almacenamos la cadena en un array con este nombre, data.

La función WebRequest se inicia en la siguiente línea con el método POST , «url», nuestra matriz «data» y la cadena de respuesta almacenada en la variable «result».

Luego convertimos el array de respuesta en una cadena “responsestring” para imprimirla en los registros de la pestaña Expert de MetaTrader.


Análisis simple de nuestra lista de operaciones

Cada vez que abras y hagas un pedido, tu hoja se actualizará y podrás analizar todos los datos con el gráfico de análisis de hojas de Google.

Calcula el número total de posiciones de compra, total de ventas, total de lotes de órdenes, total de posiciones ganadoras o perdedoras, ganancia promedio, pérdida promedio o todo lo que puedas tener en mente.

Hemos creado una plantilla para tu diario, a la que puedes acceder a través de este enlace. Consulte la fórmula de las columnas para descubrir cómo calculamos y analizamos los detalles de la lista de posiciones sin procesar.

https://docs.google.com/spreadsheets/d/1rYcRJKzVWtRu_65W-fPnQgODSzTU-3fWiNQHZz3P2Qo/edit?usp=sharing


Conclusión

En este artículo, recorrimos el proceso de creación de un diario comercial utilizando Hojas de cálculo de Google y vinculado a MetaTrader para el seguimiento automático de datos. Cubrimos la configuración de Google Sheet, la adición de encabezados y el uso de Google Apps Script para enviar datos comerciales a través de solicitudes HTTP POST. Este sistema ahorra tiempo y reduce errores, facilitando el seguimiento de las operaciones en tiempo real.

También aprendimos cómo crear un Asesor Experto en MetaTrader para enviar detalles comerciales directamente a Google Sheets, lo que permite un análisis en tiempo real. Con esta sencilla configuración, ahora tiene una forma eficiente de organizar y mejorar su rendimiento comercial sin necesidad de herramientas complejas.

Hemos preparado para usted los códigos necesarios para dos versiones de MetaTrader 4 y 5.

Si tienes alguna pregunta o idea no dudes en dejar un comentario. 

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

Análisis del impacto del clima en las divisas de los países agrícolas usando Python Análisis del impacto del clima en las divisas de los países agrícolas usando Python
¿Cómo se relacionan el clima y el mercado de divisas? La teoría económica clásica no ha reconocido durante mucho tiempo la influencia de estos factores en el comportamiento del mercado. Pero ahora las cosas han cambiado. Hoy intentaremos encontrar conexiones entre el estado del tiempo y la posición de las divisas agrarias en el mercado.
Redes neuronales en el trading: Modelos de difusión direccional (DDM) Redes neuronales en el trading: Modelos de difusión direccional (DDM)
Hoy proponemos al lector familiarizarse con los modelos de difusión direccional que explotan el ruido anisotrópico y direccional dependiente de los datos durante la difusión directa para capturar representaciones gráficas significativas.
Entrenamos un perceptrón multicapa usando el algoritmo de Levenberg-Marquardt Entrenamos un perceptrón multicapa usando el algoritmo de Levenberg-Marquardt
Este artículo le presentaremos una implementación del algoritmo Levenberg-Marquardt para el entrenamiento de redes neuronales de propagación directa. Asimismo, realizaremos un análisis comparativo del rendimiento usando algoritmos de la biblioteca scikit-learn Python. También discutiremos preliminarmente los métodos de aprendizaje más sencillos como el descenso de gradiente, el descenso de gradiente con impulso y el descenso de gradiente estocástico.
Características del Wizard MQL5 que debe conocer (Parte 41): Aprendizaje por refuerzo con redes neuronales (Deep-Q-Networks, DQN) Características del Wizard MQL5 que debe conocer (Parte 41): Aprendizaje por refuerzo con redes neuronales (Deep-Q-Networks, DQN)
Deep-Q-Network es un algoritmo de aprendizaje de refuerzo que involucra redes neuronales para proyectar el próximo valor Q y la acción ideal durante el proceso de entrenamiento de un módulo de aprendizaje automático. Ya hemos considerado un algoritmo de aprendizaje de refuerzo alternativo, Q-Learning. Por lo tanto, este artículo presenta otro ejemplo de cómo un MLP entrenado con aprendizaje de refuerzo se puede utilizar dentro de una clase de señal personalizada.