English Русский Español Deutsch 日本語 Português
preview
如何使用 MetaTrader 和 Google Sheets 创建交易日志

如何使用 MetaTrader 和 Google Sheets 创建交易日志

MetaTrader 5示例 |
274 13
Sara Sabaghi
Sara Sabaghi

目录

概念

当今,在交易世界中,减少错误和提高获胜率非常重要。每个交易者都需要一个交易日志来提高他的策略表现。但这项工作需要大量的时间和精确度。想象一下,这是自动完成的。


概述

Google Sheets 日志系统是各级交易者不可或缺的资源,有助于有组织地跟踪他们的交易活动。如果您想成为一名日内交易者,记录交易日志至关重要。你无法改进那些你没有衡量过的东西。它使用户能够保持结构化的交易方法,提供对绩效评估和提升至关重要的见解。Google Sheets 的协作功能增强了该系统的可访问性和易用性,允许交易者分享他们的日记或寻求同行的反馈。通过使用这个系统,交易者可以培养纪律,跟踪他们的心理因素,最终增加他们在金融市场上的成功机会。

在这篇文章中,我们为交易者设计了一个个性化平台,系统地记录和跟踪他们的交易。它包括用于反映策略和结果的可定制字段,以及用于自动化计算、减少错误和节省时间的内置功能。 

我们将介绍如何通过 HTTP POST 协议自动将自定义数据发送到 Google Sheet。我们还将学习如何在 MetaTrader 上通过 HTTP 请求读取或检索它们。



可用的解决方案

为了实现交易日记账,我们需要将交易数据传输到数据库中以供将来分析。 另一方面,我们需要访问该数据库,下载信息并加以利用。数据库可以是任何形式,例如 Excel 文件、CSV 格式文件、 MySQLMicrosoft SQL Server JSON 文件,甚至是任何逐行存储所需数据的简单文本文件。根据数据库的类型,您的系统设计和开发是不同的。

我们有几种解决方案类型。

  1. Google Sheets: 使用 Google Sheets 可以让交易日志变得简单。这是一个易于使用的界面,用于监控交易、进出场点、盈亏和交易批注等重要指标。通过使用公共 Google Sheet 交易日志,交易者可以组织他们的交易并收集统计数据,以学习他们的经验。此外,Google Sheets 允许定制,因此交易者可以定制日记账以适应他们的特定策略。
  2. 使用 Python 和 API 记录交易日志: 对于寻求更复杂解决方案的交易者来说,使用 Python 和 Google Sheets API 自动化他们的交易日志可以显著简化数据输入和分析。这种自动化允许实时更新,并减少人为错误的可能性。通过从交易平台提取数据并自动填充 Google Sheet,交易者可以更专注于分析,而不是手动输入数据。对于那些经常交易并需要准确及时的绩效分析的人来说,这种解决方案特别有效。
  3. 在线交易日志: 各种在线交易日志将 web 应用程序的易用性和可访问性与允许交易者记录交易而无需手动管理电子表格的功能相结合,但它们需要订阅费。这些平台通常配有内置的分析工具,可以帮助交易者识别其交易行为的模式,从而有可能做出更明智的决策。

我们选择 Google Sheets 作为基于 Excel 的数据库有两个主要原因:首先,它简单易懂。其次,Google Sheets 本质上是一个在线数据库,只需一个链接,就可以在任何地方和任何计算机上访问。无需设置额外的基础设施来在线访问数据。


什么是 Google SpreadSheets

Google SpreadSheets 是 Google 提供的免费基于网络的 Excel,允许用户创建、编辑和管理电子表格。与 Microsoft Excel 类似,它使用户能够在单元格和表格中组织数据,并使用数百个条形图和图表分析类型执行数学、统计和分析操作。

使用 Google Sheets 的主要功能和好处是:

  • 文件会自动保存在 Google Drive 中,可以从任何有互联网连接的设备访问。
  • 多个用户可以同时处理同一个文件,并立即看到彼此的更改。
  • 无需安装软件;它只需要一个浏览器和一个 Google 帐户。
  • 用户可以导入和导出 Excel、CSV 和 PDF 等格式的数据。
  • 它支持广泛的数据分析功能,类似于 Excel。
  • Google Sheets、支持脚本、自动化功能也可以通过 API 解决方案访问。

Google Sheets 非常适合在线协作,可以从任何地方轻松访问或共享数据。因此,它对于交易日志来说非常有用。


Google SpreadSheets API

Google Sheets API 是一个 RESTful 接口,可以让您读取和修改电子表格的数据。此 API 最常见的用途包括以下任务:

  • 创建电子表格
  • 读取和写入电子表格单元格值
  • 更新电子表格格式
  • 管理关联的工作表

使用 Google Sheets 的 API 需要复杂的步骤和一个收费 300 美元的 Google 开发者帐户。

但我们并不止于此,我们为您提供一个简单且免费的解决方案。让我们一步步深入:


创建新的 Google Sheet

  1. 首先,打开 Google Sheets 并创建一个新的空白电子表格。如果您还没有 Google 帐户,则需要注册一个新帐户才能访问此服务。此电子表格将作为我们将使用的所有数据的主要存储位置,使我们能够无缝发送和检索交易日记的信息。
  2. 打开电子表格后,您需要通过添加与我们将使用的关键数据点相对应的标题来设置第一行。在第一行中,输入以下标题,每列一个:

    • ticket:编号,这将存储每笔交易的唯一标识符。
    • order:订单,此列将跟踪交易是买入订单还是卖出订单。
    • symbol: 交易品种,我们将记录交易工具,例如 EURUSD 或 GBPJPY 等货币对。
    • openprice:这将存储交易开始时的价格。
    • sl: 为交易设置的止损值
    • tp:为交易设置的止盈值
    • close:此栏将显示交易是否已关闭。
    • lot:在这里,您将记录手数,即交易量。
    • opentime:此列将记录交易开始的准确时间。

请注意:在我们的项目代码中,列名区分大小写。因此,如果您想根据自己的风格更改它们(列名),请确保您理解它。

电子表格启动


创建 Google Apps 脚本

要向 Google Sheet 添加功能,下一步是创建 Google Apps 脚本。Google Apps 脚本允许您编写自定义代码来自动执行任务并连接 Google 服务,使其成为将您的电子表格与外部平台链接的完美工具。

要做到这一点:

  • 在您的 Google 表格中,点击顶部的 “Extensions”(扩展)菜单。
  • 从下拉菜单中选择 “Apps Script” 此操作将打开一个新选项卡,带您进入 Google Apps Script 界面,您可以在其中编写和编辑代码以自动执行与工作表的交互。
  • 打开 Apps 脚本编辑器后,您将看到一个空白的脚本编辑器。给你的项目起一个有意义的名字是个好主意,这样将来很容易识别。
  • 你可以把它命名为“我的第一本日志”或“我的交易清单功能”,无论你喜欢什么。
  • 打开 Google Apps 脚本编辑器并命名项目后,下一步是通过删除出现的默认代码来修改脚本。 默认情况下,Google Apps 脚本包含一个名为 “myFunction” 的简单函数模板,但我们的项目不需要它。

App Script

因此,删除默认函数,然后复制并粘贴下面的函数,并用下面的自定义脚本替换默认函数:

// 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();
  }}

感谢 Jamie Wilson ,因为我们在项目中使用了他的代码(form-to-google-sheets)

现在,在我们进入下一步之前,请保存项目。文件 > 保存图标

此功能是 Google Apps Script 的一部分,它将 Google Form 或外部HTTP POST 请求连接到 Google Sheet,从而允许将数据动态存储在工作表中。

以下是功能组件的细分:

sheetName:是一个全局变量,用于引用我们之前创建的新电子表格。默认工作表名称为 “sheet1”。

scriptProp:这用于通过 Google Apps Script 中的 PropertiesService 存储特定于脚本的属性,从而实现电子表格 ID 等值的持久存储。

initialSetup:通过此函数,我们使用 SpreadsheetApp.getActiveSpreadsheet() 检索当前活动的 Google Spreadsheet,然后使用 scriptProp.setProperty('key', activeSpreadsheet.getId()) 将电子表格的唯一 ID 存储在脚本属性中。这使得脚本的其他部分稍后可以通过 ID 访问电子表格。

doPost 是我们的主要函数,它通过将接收到的数据映射到 Google Sheet 来处理传入的 HTTP POST 请求。它首先获取一个锁以防止并发写入问题,然后通过存储的 ID 检索目标电子表格并识别正确的工作表。该函数从第一行读取标题,将传入的数据映射到适当的列,将数据附加到下一个可用行,并通过自动插入当前日期来处理 “Date” 标题。如果操作完成,则返回 JSON 格式的成功消息;如果出现任何问题,则返回错误消息,最后释放锁。



运行设置功能

由于此脚本尚未经过 Google 审核,因此它会在您继续之前生成警告。 这是未经验证的脚本的标准程序。

要执行该功能并正确配置您的 Google Apps 脚本:

  1. 单击“保存”图标旁边的“运行”图标。
  2. 将出现一个模式窗口,显示“需要授权”。单击 “审核权限” 进入下一个屏幕,您需要授权脚本访问您的 Google 帐户。
  3. 选择您想要与此脚本一起使用的 Google 帐户。这是将授予必要权限的帐户。
  4. 在下一个屏幕上,您可能会看到一条消息,指出“Google 尚未验证此应用”。 对于尚未经过 Google 验证过程的脚本来说,这是一个常见的警告。要继续,请单击“高级”。
  5. 单击“高级”后,您将看到“转到未命名项目(不安全)”选项。此消息表示,虽然脚本未经验证,但您仍允许它访问您的 Google 帐户。单击此链接继续。
  6. 最后,系统将提示您授予脚本权限。查看请求的权限,然后单击“允许”以授权脚本与您的 Google Sheet 和其他 Google 服务进行交互。

在为脚本授予必要的权限后,您将在脚本编辑器控制台中看到一个执行日志,指示脚本已被授权运行。此时,脚本已经准备就绪,但要通过 HTTP POST 请求自动执行,您需要设置一个触发器。


要做到这一点:

  1. 在Google Apps Script编辑器页面,左侧边栏点击 “触发器”,打开触发器的管理界面。此部分允许您配置脚本的执行时间和方式。
  2. 在触发器页面中,单击“添加触发器”按钮。此按钮通常由加号 (+) 图标表示或明确标记为“添加触发器”。
  3. 将出现一个新对话框,您可以在其中配置触发器的详细信息。您需要设置触发器来响应 HTTP POST 请求来激活您的函数(doPost)。
  4. 对于事件源,选择“来自网络应用程序”或“网络应用程序”(具体选项可能会根据 Google Apps Script 界面的更新而有所不同)。
  5. 从下拉菜单中选择您想要触发的函数。在本例中,选择 doPost
  6. 选择应该运行的部署:  Head
  7. 选择事件源:  来自电子表格
  8. 将事件类型设置为“On form submit”(表单提交时)。此配置允许您的脚本响应发送到 Web 应用程序 URL 的 HTTP POST 请求而运行。

然后单击“保存”。如果需要许可,您必须通过您的 Google 帐户接受。


将项目发布为 Web 应用

现在我们必须通过单击应用程序页面上的蓝色部署按钮并从下拉菜单中单击新部署来发布项目。

然后点击“选择类型”图标并选择 Web 应用程序。

在出现的表单中,选择以下选项:

  • 描述: 这可以是任何你想要的东西。只需使其具有描述性即可。
  • Web 应用程序 → 执行方式:  我
  • Web 应用程序 → 谁有访问权限:  任何人

然后单击部署。

重要: 在下一个出现的页面中,复制 Web 应用程序 URL,我们在我们的项目中使用该链接。您的链接将是这样的:

项目链接: https://script.google.com/macros/s/AfycbxWxYnDPsdvsvsdvdv236545OfgVnadvkvsASDCV6541scsSDHNfnqPeVkyH5A-r5eDhg/exec


如何将数据发布(写入)到 Google Spreadsheets

HTTP POST 是 HTTP 协议用来从客户端向服务器发送数据的方法。它通常用于在网站上提交表单数据。您会在网络上看到很多这样的表单,就像 MQL 网站中的登录表单一样。

数据在请求的主体中传输,这与 GET 方法在 URL 中传递数据不同。通过使用 post 方法,数据在 URL 中不可见,因此它更安全,并且发送的数据大小不受限制,并且允许提交大文件或数据。

为了测试我们的工作表脚本功能,我们创建了一个简单的 HTML 表单用于收集测试数据并将其发送到服务器进行处理。表单发送方式必须设置为 POST。

下面的基本 HTML 表单包含:

Action:必须通过您的项目链接进行设置(来自前面的发布步骤)

Method:是表单发布方法,可以是 GET 或 POST 方法。

当我们使用 post 方法在 Google 表格上编写我们的应用程序脚本时,我们使用 post 将数据发送到 Google。

input:包括我们想要发送的所有类型的数据。

这是我们最终的 HTML 表单:

<!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>

将此文本复制并粘贴到本地文本文件,然后将文件格式重命名为 HTML 文件。像这样 “newfile.html”

还将表单 action 地址替换为您的电子表格项目链接地址。

现在我们可以轻松地将我们想要的数据发送到 Google 表格。

填写表单输入,点击发布并等待更新您的 Google 电子表格。


Html 表单到 Google 表格

如果您成功完成此步骤,我们将进入下一步,否则,请仔细阅读上述步骤。仔细检查您的电子表格列并将它们与您的 html 表单输入名称进行比较。

上面使用的表单只是通过 HTML POST 发送数据的测试,否则,在本文的其余部分,我们将使用 WebRequest MetaTrader 函数自动发送交易数据。


如何通过 HTTP 读取和访问 Google Spreadsheets

要使用 HTTP 方法从电子表格读取数据,您必须在工作表上设置读取权限。

打开 Google Sheet,找到您之前创建的工作表并打开它。

在工作表页面的右上角,单击共享,并将常规访问权限设置为任何有链接的人,并将角色设置为查看者。

然后单击复制链接将其用作工作表访问链接。访问链接是这样的:

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

粗体文本是您的表格 ID

我们需要该 ID 来读取 JSON 类型表格。

访问链接: https://docs.google.com/spreadsheets/d/{YOUR_SHEET_ID}/gviz/tq?tqx=out:json&tq&gid='+gid

{YOUR_SHEET_ID} 是您的电子表格 ID,可以在您的工作表网址中找到。

从工作表 URL 复制 ID 并替换访问链接上的 {YOUR_SHEET_ID},访问链接将如下所示:

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

当您在浏览器上使用此链接时,您的工作表的完整详细信息将以 JSON 文件格式下载。

结果如下:

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
    }
});

它包含所有列名、数字和值。以上所有数据仅为 2 行的仓位详情。

我们使用这个 JSON 文件来读取我们的 EA 交易中的工作表。

让我们来看看这个故事最有趣的部分,我们在 Metatrader 平台中所说的一切都是自动实现的


实现和更新我们用于 MetaTrader 交易日志的工具

要使用 MetaTrader 实现 Google Sheet 交易日志,该过程涉及主要步骤。

首先,我们需要创建一个 Google Sheet 来保存和管理交易详情,包括持仓详情或持仓注释。我们以前也这么做过。

接下来,使用 Google Apps Script 使 Sheet 能够通过 HTTP 请求与外部系统交互。我们以前也这样做过。

现在在 MetaTrader 中,我们将编写一个自定义 EA 交易,使用 WebRequest 函数和 HTTP POST 协议将交易数据(例如符号、交易量和订单类型)发送到 Google Sheet。该表充当云数据库,允许我们在不同账户和地点实时监控、存储和共享交易。


创建 EA 交易来发布数据

我们需要一个 EA 交易将仓位和订单详细信息发送到 Google Sheet。

因此我们的代码中需要两个主要部分。

  1. 具有此任务的函数,检查 MetaTrader 中账户的未平仓头寸和挂单。我们称之为 “ OrderList ”。
  2. 该函数的任务是通过 WebRequest 函数将OrderList 数据发送到我们的 Google Sheet。我们称之为 “ UpdateDatabase


获取正在运行的订单和持仓列表

我们的 “ OrderList ” 函数可以具有这样的结构:

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);
   }
} 

对于 MQL4,代码可能如下所示:

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);
      }
   }
}

此函数代码包含一个从 0 开始到未结订单总数 OrdersTotal() 或 PositionsTotal() 的循环。

每个循环从 MetaTrader 订单列表中选择一个仓位或订单,然后通过 OrderSelect 函数选择它。

然后我们通过 PositionGetString、PositionGetDouble 和 PositionGetInteger 读取所需信息。

您可以在此处找到所需的其他数据详细信息: MQL4 交易函数MQL5 交易函数


将订单列表数据发送到 Google Sheet

从预览函数 “OrderList” 获取所有订单详细信息后,现在我们需要另一个名为 “ UpdateDatabase” 的函数将 OrderList 数据发布到我们的工作表中。

将仓位详细信息(例如交易品种、订单类型、交易量、开仓价、止损、止盈和编号)作为函数输入参数,并将它们准备成格式化的字符串。然后通过 WebRequest() 函数使用 HTTP POST 请求发送该数据。如果请求成功,则确认交易数据已发送;如果不成功,则打印错误消息。

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);
}

在这个函数中,我们从 “ OrderList ” 函数中获取订单或仓位数据,然后将它们准备到标准的 post 方法中。

该 URL 是我们的表单公共 URL。

然后我们创建一个具有 GET 方法格式的字符串变量 “datastring ” 。

使用 StringToCharArray 函数,我们将字符串存储到具有此名称的数组中,即 data

下一行启动的 WebRequest 函数使用 POST 方法,“ url ”,我们的 “data 数组和响应字符串存储在“ result ”变量中。

然后我们将响应数组转换为字符串 “ responcestring ”,以便在 MetaTrader Expert 选项卡日志中打印。


对我们的交易列表进行简单分析

每次开启一个订单时,您的工作表都会更新,您可以使用 Google 工作表分析图表分析所有数据。

计算买入仓位总数、卖出仓位总数、订单总手数、盈利或亏损仓位总数、平均盈利、平均亏损或您能想到的一切。

我们为您的日记创建了一个模板,您可以通过此链接访问它。检查列公式以了解我们如何从原始仓位列表中计算和分析详细信息。

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


结论

在本文中,我们介绍了使用 Google Sheets 创建交易日志并链接到 MetaTrader 进行自动数据跟踪的过程。我们介绍了如何设置 Google Sheet、如何添加标题以及如何使用 Google Apps Script 通过 HTTP POST 请求发送交易数据。该系统节省了时间并减少了错误,使实时跟踪交易变得更加容易。

我们还学习了如何在 MetaTrader 中创建 EA 交易,将交易详情直接发送到 Google 表格,实现实时分析。通过这个简单的设置,您现在可以通过一种有效的方式来组织和提高您的交易绩效,而无需复杂的工具。

我们为您准备了 MetaTrader 4 和 5 两个版本所需的代码。

如果你有任何问题或想法,请随时发表评论。 

本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/15811

最近评论 | 前往讨论 (13)
heremita
heremita | 9 10月 2024 在 13:12

您好,我对这些都没有经验,所以在此先向您道歉。

我似乎无法正常工作。

以下是我采取的步骤。

- 我在谷歌表单中复制了你的日志。

- 我下载并启动了你提供的 mt5 脚本。

- 我在脚本中复制粘贴了谷歌工作表日志的链接。

我的日志上没有出现任何交易。

我做错了什么?

谢谢!

Sara Sabaghi
Sara Sabaghi | 11 10月 2024 在 10:31
heremita #:

您好,我对这些都很没有经验,所以在此先向您道歉。

我似乎无法正常工作。

以下是我所采取的步骤。

- 我在谷歌表单中复制了你的日志。

- 我下载并启动了你提供的 mt5 脚本。

- 我在脚本中复制粘贴了谷歌工作表日志的链接。

我的日志上没有出现任何交易。

我做错了什么?

谢谢!

Google Sheet 和 Metatrader 中的程序代码对最小的变化都很敏感。必须尊重所有大小写字母。

在前面的注释中,放置了与应用程序脚本相关的代码。请谨慎使用。

该代码:https://github.com/jamiewilson/form-to-google-sheets

再次执行 "创建新的谷歌电子表格 "到 "如何向谷歌电子表格发布(写入)数据 "的步骤。如果这些步骤不成功,则无法进入下一步。

所有代码和 MY JOURAN 都是示例,您必须自己完成这些步骤。

heremita
heremita | 10 4月 2025 在 08:52
Sara Sabaghi #:

Google Sheet 和 Metatrader 中的程序代码对细微变化都很敏感。所有大小写字母都必须遵守。

在前面的注释中,放置了与应用程序脚本相关的代码。请谨慎使用。

该代码: https://github.com/jamiewilson/form-to-google-sheets

再次执行 "创建新的 Google 电子表格 "到 "如何向 google 电子表格发布(写入)数据 "的步骤。如果这些步骤未成功完成,则无法进入下一步。

所有代码和 MY JOURAN 都是示例,您必须自己完成这些步骤。

你好,萨拉、

我终于有时间研究这个问题了。

我已经多次尝试让它工作,非常仔细地按照说明进行操作,但我仍然无法从 MT5 数据在 Google 表单上记录交易。

当我手动输入数据时,应用程序 Scritp 可以正常工作。MT5代码(我从这里下载的)既没有错误,也没有警告--我小心翼翼地将我的网络应用程序URL插入其中。

Chatgpt 建议在智能交易系统"允许对列出的 URL 进行 WebRequest"中添加我的应用程序脚本 URL。但这无济于事。


我注意到问题在于,当我将 EA 应用于图表时,它在右上角看起来是激活的,但如果我在底部窗口查看 "智能交易系统",它并没有显示 "智能交易系统已初始化"(其他 EA 通常会这样显示)。


我还可以尝试其他方法吗?我真的很想用它。

非常感谢

heremita
heremita | 11 4月 2025 在 05:24

编辑:

经过大量调整人工智能和添加其他参数,我终于成功了!是的!我爱死它了。谢谢你们

Sara Sabaghi
Sara Sabaghi | 14 5月 2025 在 17:14
heremita #:

编辑:

经过大量调整人工智能和添加其他参数,我终于成功了!是的!我爱死它了。谢谢你们

我很高兴这篇文章对您有用。

您的努力值得称赞。因为这部作品中确实有很多细节和微妙之处。

祝你好运

构建K线趋势约束模型(第九部分):多策略EA(2) 构建K线趋势约束模型(第九部分):多策略EA(2)
理论上,可以集成至EA中的策略数量没有上限。然而,每新增一种策略都会提升算法复杂度。通过融合多策略架构,EA能够更灵活地适应不同市场环境,从而可能提升整体盈利能力。今天,我们将探讨如何通过MQL5实现理查德·唐奇安(Richard Donchian)的经典通道突破策略,以此进一步拓展我们的趋势约束型EA功能体系。
基于主成分的特征选择与降维 基于主成分的特征选择与降维
本文深入探讨了改进型前向选择成分分析(Forward Selection Component Analysis,FSCA)算法的实现,该算法灵感源自Luca Puggini和Sean McLoone在《前向选择成分分析:算法与应用》一文中所提出的研究。
您应当知道的 MQL5 向导技术(第 44 部分):平均真实范围(ATR)技术指标 您应当知道的 MQL5 向导技术(第 44 部分):平均真实范围(ATR)技术指标
ATR 振荡指标是一款非常流行的指标,权当波动率代表,尤其是在交易量数据稀缺的外汇市场当中。我们以形态为基础来验证这一点,就如我们对先前指标所做那样,并分享策略和测试报告,致谢 MQL5 向导库的类和汇编。
交易中的神经网络:对比形态变换器(终章) 交易中的神经网络:对比形态变换器(终章)
在本系列的上一篇文章中,我们考察了“原子-基序对比变换器”(AMCT)框架,其用对比学习来发现各个级别的关键形态,从基本元素到复杂结构。在本文中,我们将继续利用 MQL5 实现 AMCT 方式。