欢迎来到我们的 MetaTrader4 智能交易系统课程的第二部分!错过了第一部分?现在就去阅读 MT4 EA 课程介绍,我等着!

[包含文件=”wp-content/post-includes/expertadvisorvault.php”]

在这一部分中,我们将学习如何使用 MetaEditor(MetaTrader4 的集成开发环境或 IDE)来开发那些出色的智能交易系统!我会带你参观编辑器,我们甚至会创建我们的第一个专家顾问。我们称该 EA 为 Forex Wall-E

EA,自动化程序。

阅读本文后,您将对 MetaEditor 感到满意,知道如何创建新的智能交易系统。这几乎是使用我们的自动化策略赚取这些点子的一半!

MT4 EA课程:我们的第一个外汇EA系统

这些是您进入新世界的第一步——具有巨大的潜在回报。

前言

在我们开始之前,请确保从现在开始,您运行的所有内容都在模拟账户上!我不希望看到您因为编码错误而清除帐户。我们将使用模拟账户和测试策略来确保一切都经过良好测试,不需要真实账户。

您还应该对 MetaTrader 有所熟悉。如果没有,  MetaTrader 4 就是我们将要使用的交易软件。如果您还没有设置,请找一个经纪人(ATFX很可靠,但任何受监管的大牌经纪人都应该没问题)并按照经纪商的指示进行安装。

 

MetaTrader 策略测试器

此屏幕截图中的工具栏对您来说应该很熟悉。这些是每个 MetaTrader 应用程序或多或少都应具有的默认控件。如果您没有看到它们,请查看 View – Toolbars以启用正确的工具栏。

MetaTrader 工具栏

 

单击策略测试器按钮(左圆圈),您应该在窗口底部看到以下内容:

MT4策略测试器

 

这就是我们要运行我们的专家顾问的地方!您将能够配置要测试的货币对和时间范围,以及我们稍后会回到的其他一些设置。这也是您可以对您的策略进行回测的地方。您可以将其视为您未来专家顾问的控制中心

 

元编辑器

但首先,让我们回到工具栏并单击 MetaQuotes 语言编辑器(右圆圈)。这应该会打开我之前提到的编辑器。将打开一个新窗口,该窗口应如下所示:

MetaQuotes 语言编辑器

 

这就是魔法发生的地方。对于我们 EA 开发人员来说,这就像迪士尼乐园。

 

MQL 向导

在这里,您将能够创建新的 EA 交易、编写使它们运行的​​代码、编译和调试您的策略。让我们从创建一个新的 EA 交易开始,好吗?

 

单击左上角的“新建”按钮后,应出现此窗口:

MQL4 向导

 

您已经可以看到,您可以使用 MQL4 做更多的事情,而不仅仅是创建 EA 交易!您还可以创建自己的指标、创建脚本(这只是在客户端中只运行一次的一段代码的另一个名称)和创建库(可以由多个智能交易系统使用的功能集)。

 

哇,一口气不要太多!确保选择“专家顾问(模板)”,然后单击下一步。

MQL 向导 - 步骤 2

 

给智能交易系统起一个醒目的名称,例如 ForexWall-E。保持所有其他设置不变,然后单击下一步。

屏幕截图 2016-07-18 在 19.45.01

屏幕截图 2016-07-18 在 19.44.49

 

关于事件的说明

向导中接下来的 2 个屏幕将显示一些与事件相关的选项。事件是智能交易系统执行的时刻,我们将能够通过运行一些自定义代码来“连接”智能交易系统。让我们快速浏览一下我们可以使用的不同类型的事件:

  • OnTimer:使用计时器时执行的事件。我们可以自己设置以秒为单位的频率。如果您想每 X 秒运行或检查一次,这很有用。
  • OnChartEvent:处理与图表操作相关的事件集合(单击鼠标、图表更改、创建的对象、在图表上拖动某些东西时)。如果您想在 EA 运行时拦截用户操作,这很有用。
  • OnTester:仅在测试 EA 时调用此事件,就在测试完成之前。您可以在此处向 EA 请求测试数据,例如利润、余额、您的 EA 进行的交易数量等。

 

现在,不要太担心这些事件。将所有内容保留为默认设置,然后单击下一步并完成。

MQL 代码

 

您刚刚创建了您的第一个EA。

运行 EA 交易

您刚刚创建的是一个功能齐全的智能交易系统。不相信我?您可以通过单击“编译”大按钮对其进行测试(编译意味着 MetaEditor 会将我们的人类可读代码转换为适合作为 EA 实际运行的机器指令)。在 MetaEditor 的底部,您应该看到如下内容:

MT4 EA 编译完成

 

现在回到 MetaTrader 4。您应该仍然在窗口底部有策略测试器。在第一个下拉列表中,您现在应该能够找到您的新 EA:

您的新 EA

当您使用相同的 Strategy Tester 设置时(From 和 To 日期还不太重要),您可以单击 Start 来测试您新创建的策略。给它一点时间来计算,您应该会在底部看到一个绿色条,表示您的 EA 运行完成。

注意底部出现的新标签:

策略测试器选项卡

浏览它们。目前,Results 和 Graph 将为空(因为尚未进行任何交易),但 Report 和 Journal 选项卡将分别显示有关智能交易系统测试运行的信息和一些日志信息:

运行您的专家顾问的结果

很不错吧?报告选项卡是您将花费大量时间分析您的专家顾问进行的交易的地方。但是,当然,这位专家顾问实际上并没有做太多事情。现在让我们改变它。

我们的第一个 EA – ForexWall-E

现在事情可能会变得有点技术性,我们将使用实际代码。但我保证,它很容易消化,我们可能会轻而易举地通过它。

首先,让我们再次打开 MetaEditor 并编辑 void OnTick() 方法,使其看起来像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void OnTick()
{
    if (OrdersTotal() > 0) {
        return;
    }
    
    double lots = 0.01;
    int stopLoss = 500;
    int takeProfit = 500;
    double ema = iMA(NULL, 0, 300, 0, MODE_EMA, PRICE_CLOSE, 0);
    
    if (Ask + 500 * Point < ema) {
        if (OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Ask - stopLoss * Point, Ask + takeProfit * Point, "my forex wall-e order", 12345, 0, Red)) {
            Print("Buy order succeeded!");
        }
    }
}

更新代码后,点击“编译”按钮以确保没有错误。它应该没有问题(有困难吗?在评论中告诉我,我可以帮助你!)。

代码可能看起来有点复杂,所以让我们逐行查看。但首先:什么是蜱?

 

关于外汇报价

外汇交易中的刻度是指货币对可以产生的最小价格上涨或下跌。因此,每次您看到价格以最小的方式上涨或下跌时,这就是一个滴答声。这也是 调用OnTick 事件的时间。

 

代码演练

 

1
void OnTick()

这是我们的函数声明。我们指出这个函数的可用性,所以它可以被调用。

 

3
4
5
if (OrdersTotal() > 0) {
    return;
}

这个 if 语句确保如果已经有一个未结订单,我们不会打开另一个。OrdersTotal() 是 MQL4 语言中的内置函数,返回当前打开的订单数量。

 

7
8
9
double lots = 0.01;
int stopLoss = 500;
int takeProfit = 500;

在这里,我们定义了一些变量:

  • 手数为 0.01
  • 止损为 500 点,相当于使用 5 位数的经纪商的 50 点,因为在这种情况下,1 点 = 1/10 点。如果现在这让您感到困惑,请不要担心,只需假设我们使用 50 点的止损。
  • 止盈也将是 50 点(出于与上述相同的原因)。

 

10
double ema = iMA(NULL, 0, 300, 0, MODE_EMA, PRICE_CLOSE, 0);

这条线意味着我们获取 300 指数移动平均线 (或 EMA)的值。我们将使用这个移动平均值来确定我们是否应该进行交易。现在,这个 EMA 使用了很多参数!这就是他们的意思:

1
2
3
4
5
6
7
8
9
double iMA(
 string symbol, // symbol
 int timeframe, // timeframe
 int ma_period, // MA averaging period
 int ma_shift, // MA shift
 int ma_method, // averaging method
 int applied_price, // applied price
 int shift // shift
);

这是我们第一次使用指标的值!MQL4 中有更多内置指标,例如iStochasticiRSI。在本系列的后续部分中,我们将介绍这些以及更多内容。

 

12
if (Ask + 500 * Point < ema) {

这里发生的情况是,只有当卖价 + 50 点仍低于 EMA 值时,我们才会进行交易。换句话说:如果价格在 300 EMA 线下方超过 50 点,我们应该买入

 

13
14
15
if (OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Ask - stopLoss * Point, Ask + takeProfit * Point, "my forex wall-e order", 12345, 0, Red)) {
    Print("Buy order succeeded!");
}

最后,我们可以下订单了!OrderSend()函数是另一个内置函数,它允许我们以编程方式创建订单。在这种情况下,我们创建一个 0.01 手的买单,止损和止盈是我们之前定义的。

而已!

再次单击编译按钮,然后返回 MetaTrader。在策略测试器中启动智能交易系统测试。

现在,结果、图表和报告选项卡不再那么无聊了:

EA结果

EA 结果图

EA 报告选项卡

 

正如您所看到的,我们的第一个专家顾问似乎甚至获得了微薄的利润(毫无疑问,很大程度上是靠运气。您的结果可能会因货币对、选择的时间框架和经纪商而有所不同)。

但这仍然是一个令人鼓舞的结果!每个人都喜欢上升的图表,对吧?

结论

我们的 MT4 专家顾问课程的第二部分包含了很多信息!

您已经学习了如何使用策略测试器。

您已经熟悉了 MetaEditor 并创建了一个新的专家顾问。

您已经构建了您的第一个 EA 并同时使用 MQL4 迈出了第一步。

这次就是这样。我鼓励您与新创建的智能交易系统一起玩,更改我们定义的一些参数,看看它们如何影响在策略测试器中运行您的 EA 的结果。

下一次,我们将继续使用我们的专家顾问,并逐步改进它,使其更加稳固。如果您有任何疑问,请在评论中告诉我。

 

发表回复

后才能评论