English Русский Español Deutsch 日本語 Português
preview
在莫斯科交易所(MOEX)里使用限价订单进行自动网格交易

在莫斯科交易所(MOEX)里使用限价订单进行自动网格交易

MetaTrader 5交易 | 5 九月 2022, 10:31
1 640 1
Roman Shiredchenko
Roman Shiredchenko

概述

本文详细讲述了采用 MQL5 语言开发 网格交易策略 EA 的方法。 该 EA 采用网格策略,面向 MetaTrader 5 终端,并在 MOEX 上进行交易。 EA 包括了依据止损和止盈平仓,以及在某些市场条件下取消挂单。


1. 网格交易

本文将研究网格 EA 的应用,旨在 MOEX 上自动化交易期货合约。 该 EA 能够在特定价格范围内,按照指定间隔下订单。

在网格交易过程中,会在设定价格之上和之下分别放置订单,从而创建一张订单网格,其价格逐级升高和降低。

例如,您可以针对 VTB Bank (PJSC) — VTBR-6.22 (VBM 2) 的普通股期货合约,在低于市场价格 100 卢布价位处放置买入订单,,以及在每高于市场价格 100 卢布价位处放置一笔卖出订单。 如此,即可从各种条件下进行的交易里获益。

当价格在预定范围内波动时,网格交易非常适合这种波动和“横盘”行情。 这种交易方式能够在价格变化幅度不大的情况下盈利。 网格级别越频繁,从事的业务频率就越高。 不过,这会导致消耗更高的成本,因为每笔订单的利润变得更薄。

因此,有必要找到一个折衷方案,即在大量交易的同时赚取少量利润;亦或交易策略的订单较少,但利润较大。

您可以通过设置上/下边界和栅格频率来自定义网格设置。 创建网格后,EA 会自动遵照预先计算的价格放置买卖订单。

我们看看它是如何工作的。 假设您预计 VBM 2 期货合约价格在未来 7 天内在 1600 至 2800 卢布之间波动。 在这种情况下,您可以设置网格交易,以便在预测范围内进行交易。

在网格交易面板中,您可以设置策略参数,包括:

  • 价格范围的上限和下限;

  • 可在指定价格范围内放置订单数量;

  • 在每笔买卖限价订单之间的步长。


图例 1.  放置订单网格

在这种情况下,随着 VBM 2 期货价格下降至 1600 卢布,网格 EA 将以低于市场价格的价格累积持仓。 当价格开始回填时,EA 将以高于市场价格卖出。 该策略试图在价格方向逆转时扭亏为盈。


2. 金融市场上大多数资产价格走势类型均适合交易系统

交易策略的入场点与品种的行情走势息息相关。 这意味着您可在任意时刻扩展网格(执行入场成交)。 正如您可能知道的,大多数时候行情都会出现波动。 该 EA 是专门为这种行情条件创建的,遵循所谓的典范 — 低买高卖。

网格交易最优选横盘类型当价格局限在某个范围内移动,且没有明确定义的方向时。 突破边界,通常意味着横盘行情的结束和新趋势的开始。

当价格在强力支撑和阻力价位之间挤压时,形成了一个宽幅的横盘. 无论是多头还是空头都不足以获得绝对胜利,因此不会出现新的趋势。 所有这些定义针对每个品种都是严格独立的,且只在特定品种行情走势的背景下才予以考虑。

如果我们研究这种交易方式的一般情况,那么,若在 MOEX 上交易了大约一个月的 VBM 2 期货合约,即使存在从低边界 1600 到上边界 2800 的单向(一般最终)移动,以及存在价格波动(从主要走势回踩)的情况下,总盈利也超过了一般亏损,结果就是,订单全被激活,然后重置限价买卖订单。

所交易品种在价格水平间的波动(在范围内),能让我们在选定时间区间内,提升由该网格交易方式获得的利润。

网格 EA 在每笔订单中的交易手数均采用相同值,因此您需要基于这种交易方法规划您的资金管理。

从横盘的一侧边界回踩的交易,假设会持续到横盘的另一侧边界。 当运用这种交易方法时,重要的是要考虑到会不会遇到能够引发强劲走势的重要新闻。 此外,出于安全原因,在范围之外应设置止损。


3. 网格交易的特点和好处

设置网格后,EA 不会向其内添加新的外部订单,直到当前网格全部平仓,盈亏尤天。

基于交易系统的建议:选择的品种应具有足够的交易量和清晰走势。 此外,最好排除持仓滚动续期,这样其市场深度就不会是空的。 此外,避免由新闻引发的无回踩单边走势 。

该交易系统涉及采用平均摊薄层级交易(Nayman E. 交易大师:秘密资料, 134 页),当您以更好的价格如前执行相同的操作时(多头买入或空头卖出)。

平均摊薄的主要缺点是您事先不知道行情如何对您不利。 于此同时,平均摊薄需要投入额外的保证资金,从而增加您的持仓风险。 大多数新萌交易者都会犯一个常见的错误 — 为了追求高利润,他们令自己的账户处于“超负荷”状态,把杠杆比率提升到绝对惊人的程度,有时甚至会爆仓,耗尽所有可用资金(Nayman E. “大师交易:秘密资料”, 135 页)。

这种交易方式的主要特点是能够设置最小和最大价位的数值,从而确保在交易品种的指定价格范围内利用限价订单进行交易。

通过设置上下两个价位的止损,您可以限定交易账户的亏损。 

当触发止损时,终端通知价格突破预设价位,及其走势可能的突破朝向。 因此,可能需要重新分析价格层级,并在网格交易 EA 的外部参数中设置其值(见下文)。


4. 实现网格交易

4.1. 网格交易机制

网格交易阶段:

  1. 初始结构 - EA 在选定的交易品种上启动

  2. 当触发您在网格里放置的第一笔订时,开仓

  3. 当后续网格订单不断触发(增加或减少初始持仓)时,网格将更新

  4. 止损、止盈、当前持仓的交易时间限制、您可自行决定离场的盈利 %

  5. 通过网格 EA 控制交易 — 当前盈利的网格交易平仓的时段,若交易品种有新的相关高点和低点时将其重置

该网格策略开始时没有初始持仓。 初始持仓将在初始启动,行情移动超过最近的挂单价格时被激活。

例如

假设您在 2022 年 1 月 4 日设置策略参数如下:

  • 合约: 期货 VBM 2
  • 价格下限:1,600 卢布
  • 价格上限:2,800 卢布
  • 网格中的元素数:10
  • 模式: 等距

假设您已将策略参数设置如下:

初始中性网格买入订单将低于当前市场价格。 同期,卖出订单将高于当前市场价格。 触发最近的买入或卖出限价单后,将要发生的过程 — 我们称之为交易网格激活。 9 笔订单将在以后的交易中用到。

按订单类型,价格分布如下:

  • 限价买入: 1,600 卢布, 1,733 卢布, 1,866 卢布,1,999 卢布  
  • 限价卖出: 2,135 卢布, 2,268 卢布, 2,401 卢布, 2,534 卢布, 2,667 卢布, 2,800 卢布

(您还可以根据 D1 上的 ATR 指标百分比,根据经验考虑在网格中排列订单的最佳选项,从而以中等风险赚取获最佳利润)。

所有已执行订单的摘要。

每笔业务由相应的配对买卖订单组成,交易类型 – FILO (先进,后出). 利润可以根据每笔配对的买卖订单计算。

范围从下边界(LOW_PRICE_BuyLim)到上边界(HIGH_PRICE_SellLim),并依据指定的订单数量(Number_of_elements_in_the_grid)等间隔划分,。 建议独立查看,并选择网格中的订单范围和数量(从 3 开始),以便订单之间的总宽度高于品种的点差,且边界的价格值在当前价格范围之外。

此外,价格范围的上边界 HIGH_PRICE_SellLim 应超过范围的下边界 LOW_PRICE_BuyLim。

4.2. 更新网格

每次达到其中一个价格层级时,即限价订单被执行时,都应更新网格。 最后执行的订单始终为空,然后以设定价格执行买入和卖出限价订单,如下例所示。

例如,在这种情况下,当网格策略由第一笔卖出限价订单激活之后,随后 VBM2 期货合约走势上扬;及至激活下一笔卖出限价订单之后,网格的下半部分(买入限价订单数量)增加 1 笔买入限价订单 - 相较于网格的上一笔买入限价订单高出 1 个步长(更接近价格)。

特别是,在激活第一笔卖出限价单后,网格交易被激活,价格走势上扬;鉴于网格已被激活,网格每层级的限价如下:

价格, 卢布 订单/持仓方向和类型
2,534 由限价订单而来的卖出
2,401 由限价订单而来的卖出
2201.5 持仓为最初两笔卖出限价订的交易量
2,132 由限价订单而来的买入
1,999 由限价订单而来的买入
1,866 由限价订单而来的买入
1,733 由限价订单而来的买入
1,600 由限价订单而来的买入

这显示在下图中:


图例 2. 网格被激活,并触发下一笔限价订单后,更新订单网格

因此,继续更新网格订单。

网格参数:

//+------------------------------------------------------------------+
//|                          EXTERNAL GRID VARIABLES
//+------------------------------------------------------------------+
input int Volume = 1;                          //Contract/lot volume
input double HIGH_PRICE_SellLim = 2800.00;     //HIGH_PRICE_SellLim (the upper price of the last SellLim grid order)
input double LOW_PRICE_BuyLim  = 1600.00;      //LOW_PRICE_BuyLim   (the lower price of the last BuyLim grid order) for BuyLim
input double HIGH_PRICE_SL  = 100.00;          // HIGH_PRICE_SL: SL in points from HIGH_PRICE_SellLim (the upper stop loss price) for SellLim
input double LOW_PRICE_SL = 100.00;            // LOW_PRICE_SL:  SL in points from LOW_PRICE_BuyLim (lower stop loss price)  for BuyLim
input int Pending_order_period  = 12;          // Pending_order_period: limit order setting time in months
input int Number_of_elements_in_the_grid = 10; // Number of elements in the grid (number of limit orders)
input double TakeProfit  = 0;                  // TakeProfit from the setting price in order pips
input double Profit_percentage = 0;            // Profit_percentage - grid closure % in profit
                                               // works if > "0"
input  bool Continued_trading = false;         // Continued_trading - whether to continue trading after exiting by the grid closure % with profit   

input int    Time_to_restrict_trade  = 0;      // Time_to_restrict_trade - setting the expiration time (in days) for a position with profit
                                               // (exiting the market upon the period end in days)                                              

input int Magic       = 10;                    // Magic Number

外部变量的名称及其解码已尽详尽精,因此不需要额外的注释。

此外,我们设置变量

HIGH_PRICE_SellLim 

不低于上边界

LOW_PRICE_BuyLim  

不低于 MOEX 定义(设置)值的下限值: 

https://www.moex.com/en/contract.aspx?code=VTBR-6.22

所有必要的数据显示在 MOEX 品种参数之中(图例 3)


图例. 3. 品种参数 - VTB 银行(PJSC)VTBR-6.22 普通股期货合约

交易方式如图例 4.2 所示。

结果就是,在启动此处所述的网格交易 EA 后,您应获得关于机器人所处交易品种的详细信息(图例 4.1 和 4.2):


图例 4.1. 针对 VTBR-6.22 启动网格 EA 


如果止损和止盈的数值不为零,则除了激活买入和卖出限价订单值外,它们的价位也将显示在交易终端中:


图例 4.2. 在 VTBR-6.22 上使用网格 EA,止损和止盈值均非零

结果就是,我们拥有一个限价订单网格,当最低和最高价格范围内全部激活后,重新设置。

只要所交易品种的价格还位于价格范围内,网格 EA 就在交易账户上不断累积利润。 即便我们考虑到这种网格交易的一个明显缺陷,即,若遇到任何方向上的强劲走势,都不会有回滚,由此也不会出现按预期在一定价格范围内的移动,我可以如下这般说:

  • 首先,这种走势并不“频繁”,
  • 第二,当价格离开正确选择的范围和订单数量时,账户上已经赚取了足够的利润,可弥补当前的亏损,
  • 第三,只有价格不断在价格范围的最大值和最小值之间波动(移动),买卖频繁成交,交易账户就会盈利。

结束语

与整个基于网格的交易方法一样,这里研究的网格 EA 需要把价格控制在指定范围内。 当价格接近其边界时,有可能限价订单停止网格交易,并在新的范围内,以新的交易量重新开始。

可以创建网格从趋势(该选项将在本文的下一部分介绍)或范围(在本文中描述)中获利。 基于网格的交易研究的是依靠 EA 进行交易,并要不断重置限价订单,即,只要价格继续横盘波动,就要执行买卖双向订单。 

通过设置限价单的止损价位来控制单边价格走势的风险。 结果就是,这里提供的 EA 允许我们避免突然的市场暴跌(暴涨),因为通常随后就是调整性价格走势。 换言之,如果我们选择价格范围、合约价值、网格订单数量,以及正确计算止盈和止损,我们就能够避免回撤,无需不断监控市场。

注意e:

此处讨论的网格策略不应被视为财务或投资建议。 根据您的判断和风险使用网格交易,这意味着您自己要依据财务能力量力而行,控制并合理地运用交易方法。

参考:

Nayman, E., (2002). 交易大师: 秘密资料。 莫斯科, Alpina 出版发行 (俄语)。

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/10672

附加的文件 |
GRID_TRADING_v.01.mq5 (112.73 KB)
最近评论 | 前往讨论 (1)
BENXIN
BENXIN | 1 2月 2024 在 14:16
真不错,很好的学习参考
DoEasy. 控件 (第 8 部分): 基准 WinForms 对象类别,GroupBox 和 CheckBox 控件 DoEasy. 控件 (第 8 部分): 基准 WinForms 对象类别,GroupBox 和 CheckBox 控件
本文研究创建 “GroupBox” 和 “CheckBox” WinForms 对象,以及开发 WinForms 对象类别的基准对象。 所有已创建对象仍然是静态的,即,它们无法与鼠标交互。
神经网络变得轻松(第十七部分):降低维度 神经网络变得轻松(第十七部分):降低维度
在本部分中,我们将继续讨论人工智能模型。 即,我们研究无监督学习算法。 我们已经讨论了众多聚类算法之一。 在本文中,我将分享一种解决与降维相关问题的方法。
神经网络实验(第 1 部分):重温几何学 神经网络实验(第 1 部分):重温几何学
在本文中,我将利用实验和非标准方法开发一个可盈利的交易系统,并验证神经网络是否对交易者有任何帮助。
学习如何基于 MFI 设计交易系统 学习如何基于 MFI 设计交易系统
这篇新文章出自我们的系列文章,是有关基于最流行的技术指标设计交易系统,它研究了一个新的技术指标 — 资金流动性指数(MFI)。 我们将详细学习它,利用 MQL5 开发一个简单的交易系统,并在 MetaTrader 5 中执行它。