$ £ ¥
¥ £ $

MT5 版智能交易系统模板

内容

在交易生涯的某个节点,交易者可能会认为将交易自动化是一种明智的做法。而这正是智能交易系统派上用场的时候。

与手动交易相比,自动交易具备一定的优势:

  • 无需持续监控图表。
  • 无情绪影响。
  • 可全天 24 小时交易。
  • 意外错误(如果编码正确)。
  • 能同时用多种策略交易。

然而,即使交易策略非常简单,要编写自己的交易机器人(智能交易系统)也不是一件易事。对于复杂的交易系统而言,这项操作是极具挑战性的。您需要以清晰的条件及指令来制定所有内容,并考虑许多边缘案例以涵盖所有可能的情况。

如果您的目标是编写自己的机器人,您需要先具备一些基础的知识。

本文中展示的的 MT5 版智能交易系统模板可以作为您开发交易机器人的起点。

它包含智能交易系统的基本工作流程及功能,但包含任何特定的入场及离场信号。如果您要从策略中向它添加入场及离场信号,这不难操作。

源代码将大幅减少您用于开发智能交易系统所花费的时间。

MT5 版智能交易系统模板


什么是 MT5 版智能交易系统模板

MT5 智能交易系统模板是一套包含 700 多行带有注释的源代码,可支持用户构建自己的智能交易系统。

作为一款基础模板,它的代码数量似乎过于多,但它的操作其实不难,因为许多行都是用于帮您更好地理解代码逻辑的注释行。

您可以对代码中指示的部分进行自定义,以实现您的入场及离场策略,并拥有自己的专属智能交易系统。


MT5 版智能交易系统模板包含什么内容

  • 每项函数都配有注释,可以更好地理解逻辑
  • 精心编写的代码
  • 模块化的结构
  • 通过自动化的头寸规模计算器进行风险管理
  • 可选择固定或自动止损位
  • 可选择固定或自动止盈位
  • 交易时间过滤器
  • 部分平仓功能
  • 可自定义测试参数

MT5 版机器人模板输入参数


MT5 版智能交易系统模板不包含什么

MT5 版智能交易系统模板不是一项完全自动化的策略。

为了用模板进行交易,您需要将自己的入场及离场信号代码添加至该模板中。


什么要使用 MT5 版智能交易系统模板

  • 节省时间 - 通过这些现成的函数,您可以节省许多学习及编程时间。
  • 错误处理 - 模板可以检查它的所有函数中常见的运行时错误。
  • 风险管理 - 固定及基于风险的头寸数量计算,可进行灵活的风险管理。
  • 易于编辑 - 只需添加及修改几行代码即可得到一款基于您意向指标的有效的智能交易系统。

智能交易系统的逻辑是什么

MT5 版智能交易系统的逻辑

一款基础的智能交易系统包含三项主要的函数:

  1. OnInit() 为智能交易系统的初始化。它是当您在图表上加载智能交易系统时首个执行的函数。它只运行一次。
  2. OnTick() 在每当 MT5 接收到当前交易工具的新报价时运行。
  3. OnDeinit() 在您从图表中移除智能交易系统后运行一次。

MT5 版智能交易系统模板中包含的模块

MT5 版智能交易系统模板以模块化的方式编写,使每项操作与其他部分在逻辑上分离成独立的函数。这样做可以让源代码更容易阅读和理解,同时也简化了代码的自定义化。

您可以在本文中看到函数是如何在运行流程中被分隔开的:

OnInit 函数

MT5 版智能交易系统模板的“初始化”函数

OnTick 函数

MT5 版智能交易系统模板的“每一个跳动点”函数

这款智能交易系统模板的 DeInit 函数的内容为空——它只有一个占位符。你可以轻松地向其中添加自己的代码,但大多数情况下,您可能始终无需添加任何内容。


使用 MT5 版智能交易系统模板的要求

如果使用得当,MT5 版智能交易系统模板可以成为一项强大的工具,但它不一定适用于所有人。如果满足以下条件,则可以考虑使用这款智能交易系统模板。

有关 MQL5 编程的基础知识

尽管大部分代码是现成的,并且添加了清晰的注释,但您仍需添加自己的代码以设置入场及离场信号或完成进一步的自定义(例如追踪止损)。

查看其他智能交易系统的源代码可能有助于您解决这个问题。

MT5 平台

您下载的智能交易系统文件适用于 MetaTrader 5 平台。它们无法在 MetaTrader 4 上运行。

了解该如何编译

建议您先熟悉编译过程。这项模板实际上是源代码,可以在 MetaEditor 中编辑并编译成一款可用的智能交易系统。

愿意尝试

需要注意的是,它不是一项完全无需手动的交易策略。您需要自己制定入场、离场信号以及策略。在找到有价值的方式之前,您可能需要进行多次回测并多次更改代码。

来自源代码

您可以查阅一部分从代码中提取出的内容。这是帮您了解该产品是否适合您的好方法。

如果您认为这些内容有用,那么这项智能交易系统模板应该适合您。

如果这些内容对您毫无意义,但您想查看智能交易系统是如何编程的,那么它也能帮助您。

如果您不喜欢编程,并且对这些内容毫无兴趣,那么它可能不适合您。

智能交易系统属性

//-PROPERTIES-// 
// 属性有助于提升软件在您将它加载至 MT5 中时的外观。
// 它们会提供更多信息及细节
// 这是当您将智能交易系统添附加至图表时,您在“关于”选项卡中看到的内容。
#property link          "https://www.earnforex.com/cn/MetaTrader自动交易工具/mt5-ea-template/"
#property version       "1.00"
#property copyright     "EarnForex.com - 2024"
#property description   "A basic expert advisor template for MT5."
#property description   ""
#property description   "WARNING: There is no guarantee that this expert advisor will work as intended. Use at your own risk."
#property description   ""
#property description   "Find more on www.EarnForex.com"
#property icon          "\\Files\\EF-Icon-64x64px.ico"
 

输入参数

// 智能交易系统的参数
input string Comment_0 = "==========";          // 针对智能交易系统的参数
// !! 在此处声明您智能交易系统的特定参数。
// 例如移动平均线、RSI 水平或您的智能交易系统在实施策略时需要了解的任何其他指标。
// 所有输入参数均以关键词'input'开头。
// input int example = 10; // 这是一个输入参数示例

input string Comment_1 = "==========";  // 设置交易时间
input bool UseTradingHours = false;     // 限制交易时间
input ENUM_HOUR TradingHourStart = h07; // 交易开始时的小时(经纪商服务器的小时)
input ENUM_HOUR TradingHourEnd = h19;   // 交易结束时的小时(经纪商服务器的小时)

input string Comment_2 = "==========";  // ATR 设置
input int ATRPeriod = 100;              // ATR 时段
input ENUM_TIMEFRAMES ATRTimeFrame = PERIOD_CURRENT; // ATR 时间周期
input double ATRMultiplierSL = 2;       // 止损位的 ATR 倍数
input double ATRMultiplierTP = 3;       // 止盈位的 ATR 倍数

// 常规输入参数
input string Comment_a = "==========";                             // 风险管理设置
input ENUM_RISK_DEFAULT_SIZE RiskDefaultSize = RISK_DEFAULT_FIXED; // 头寸规模模式
input double DefaultLotSize = 0.01;                                // 头寸规模(如果为固定数量或未定义止损位)
input ENUM_RISK_BASE RiskBase = RISK_BASE_BALANCE;                 // 风险基准
input int MaxRiskPerTrade = 2;                                     // 每笔交易中可承担风险的资金比例
input double MinLotSize = 0.01;                                    // 允许的最小头寸规模
input double MaxLotSize = 100;                                     // 允许的最大头寸规模
input int MaxPositions = 1;                                        // 这款智能交易系统的最大头寸数量

input string Comment_b = "==========";                             // 止损位及止盈位设置
input ENUM_MODE_SL StopLossMode = SL_FIXED;                        // 止损模式
input int DefaultStopLoss = 0;                                     // 默认的以点数计的止损位(0 表示无止损)
input int MinStopLoss = 0;                                         // 允许的最小止损位(以点数计)
input int MaxStopLoss = 5000;                                      // 允许的最大止损位(以点数计)
input ENUM_MODE_TP TakeProfitMode = TP_FIXED;                      // 止盈模式
input int DefaultTakeProfit = 0;                                   // 默认的以点数计的止盈位(0 表示无止盈)
input int MinTakeProfit = 0;                                       // 允许的最小止盈位(以点数计)
input int MaxTakeProfit = 5000;                                    // 允许的最大止盈位(以点数计)

input string Comment_c = "==========";                             // 部分平仓设置
input bool UsePartialClose = false;                                // 使用部分平仓
input double PartialClosePerc = 50;                                // 部分平仓的百分比
input double ATRMultiplierPC = 1;                                  // 部分平仓的 ATR 倍数

input string Comment_d = "==========";                             // 其他设置
input int MagicNumber = 0;                                         // 幻数
input string OrderNote = "";                                       // 订单注释
input int Slippage = 5;                                            // 滑点(以点数计)
input int MaxSpread = 50;                                          // 允许交易的最大点差(以点数计)
 

跳动点的处理

// 入场位及离场位的处理
void ProcessTick()
{
    if (!GetIndicatorsData()) return;
    
    if (CountPositions())
    {
        // 尚有未结头寸。管理止损位、止盈位或在需要时平仓。
        if (UsePartialClose) PartialCloseAll();
        CheckExitSignal();
    }

    // 一段代码,只允许在图表上出现新的条形图时才执行后续代码。
    // 这意味着每根条形图只会检查两次入场信号。
    /* static datetime current_bar_time = WRONG_VALUE;
    datetime previous_bar_time = current_bar_time;
    current_bar_time = iTime(Symbol(), Period(), 0);
    static int ticks_of_new_bar = 0; // 每根新条形图处理两个跳动点,用于指标的缓冲及刷新。
    if (current_bar_time == previous_bar_time)
    {
        ticks_of_new_bar++;
        if (ticks_of_new_bar > 1) return; // 经过两个跳动点后跳过。
    } 
    else ticks_of_new_bar = 0; */

    // 首次调用后重新计算数字,因为有些交易可能已经平仓。
    if (CountPositions() < MaxPositions) CheckEntrySignal(); // 仅在现有头寸数量不太多时才检查入场信号。
}
 

入场信号检查模板

// 入场信号
void CheckEntrySignal()
{
    if ((UseTradingHours) && (!IsCurrentTimeInInterval(TradingHourStart, TradingHourEnd))) return; // 入场交易时间限制。

    bool BuySignal = false;
    bool SellSignal = false;

    // 买入信号的条件

    // 您应该在此处为您的“买入”订单插入入场信号。
    // 包含一个用于开立买单的条件,该条件须将“BuySignal”设为 true 或 false。
   
    //!! 对该买单入场信号的检查行取消注释或进行修改:
    //if ((Indicator_current > iClose(Symbol(), Period(), 1)) && (Indicator_previous <= iClose(Symbol(), Period(), 2))) BuySignal = true; // 检查指标值是否从下方穿过"收盘"价位。

    if (BuySignal)
    {
        OpenBuy();
    }

    // 卖出信号的条件

    // 您应该在此处为您的“卖出”订单插入入场信号。
    // 包含一个用于开立卖单的条件,该条件须将“SellSignal”设为 true 或 false。
    
    //!! 对该卖单入场信号检查行取消注释或进行修改:
    //if ((Indicator_current < iClose(Symbol(), Period(), 1)) && (Indicator_previous >= iClose(Symbol(), Period(), 2))) SellSignal = true; // 检查指标值是否从上方穿过“收盘”价位。

    if (SellSignal)
    {
        OpenSell();
    }
}
 

下载

 

您可以在任何 MT5 外汇经纪商处开立交易账户,然后您可以安装此处展示的 MetaTrader 5 智能交易系统。

如何安装 MT5 版智能交易系统模板

  1. 下载智能交易系统存档文件。
  2. 打开 MetaTrader 5 的数据文件夹(通过文件→打开数据文件夹Ctrl+Shift+D)。
  3. 打开 MQL5 文件夹。
  4. 将存档中的所有文件夹直接复制到 MQL5 文件夹。
  5. 重启 MetaTrader 5 或用右键点击平台上的导航子窗口并选择刷新,以刷新智能交易系统列表。

如何使用它

如果代码中有的部分需要修改或插入您自己的代码片段,则这些部分将用双感叹号标记(!!)。为了创建一个有效的智能交易系统,您需要自定义以下函数:

  • GetIndicatorsData() 包含可读取指标值的代码,这些数值将进一步用在其他函数中。如果您计划让智能交易系统在交易策略中使用指标,则您需要修改此函数。
  • EvaluateEntry() 包含可触发入场信号的代码。为了让智能交易系统开立新头寸,此处须添加一些内容。这项函数的注释中提供了入场代码示例。
  • EvaluateExit() 包含可触发离场信号的代码。如果您打算使用固定的止损及止盈位,您可以让它保持不变。否则,您可以通过这项函数定义基于指标的离场信号。
 

如果您对智能交易系统模板感兴趣,您可能也会想要了解我们的 MT4 版智能交易系统模板

探讨

您对这款智能交易系统有什么建议或问题吗?您随时可以去我们的论坛上与其他外汇交易者及 MQL5 程序员讨论关于 MT5 版智能交易系统模板的问题。