学习如何基于动量设计交易系统

我上一篇文章中,我曾提到了判断价格走势的重要性。 重要的是,根据这个方向或趋势,我们可以制定相应的决策。 故此,我们可以说,判断行情方向将有助于我们提高交易决策和结果。 这就是为什么识别和分析趋势如此重要的原因。 

另一个可以强化我们决策的因素是,我们有能力判断这一确定的趋势是强或弱,或者换句话说,当前这个趋势能否会延续。 已有许多不同的工具可以做到这一点。 在本文中,我们将重点关注动量,它是能帮助我们了解更多趋势的最重要工具之一;因为我们将从本文中更详细地了解运用动量衡量价格或趋势的速度。

  • 动量定义
  • 动量策略
  • 动量交易系统蓝图
  • 动量交易系统

我们将在第一个主题“动量定义”中了解有关动量指标的更多信息 — 我们将了解动量指标是什么,以及它是如何计算的。 然后,我们将学习一个简单的策略,它可以增强我们对动量指标的理解,以及它如何为我们提供帮助。 然后,我们将基于上述动量交易策略设计一个交易系统蓝图,从而能帮助我们在 MQL5 中进行编码。 再后,我们将学习如何编码并执行,来获取此策略的信号。 

最简单的方法是先启动 MetaTrader 5,然后从键盘上按下 F4 按钮,然后就会打开 MetaQuotes 语言编辑器。

打开 MetaQuotes 语言编辑器的第二种方法是使用工具菜单:

将会打开以下窗口:

我还建议您尝试运用您学到的知识,因为这会加深您的理解,并会令您对相关或非相关主题有更多的见解和新思路。

请注意,在用它之前,您必须先测试您所学的一切,因为它可能适合我,但也许不适合您的交易风格。 因此,使用演示帐户来测试您学习的所有内容,验证它是否对您有用,这一点非常重要。 

免责声明:本文的所有内容仅用于教学目的,不涉其它。 故此,您应自行针对基于本文内容所采取的任何行动负责,本文内容并不保证任何结果。

现在,我们开始学习这个主题,依据我们的认知构建一个新的模块,并加以改进。

动量定义

在这部分中,我们将学习什么是动量,它的含义是什么,它对我们的交易有啥用处,什么是动量指标,以及我们如何计算它。 这也有助于我们理解它有何作用,以及我们如何使用它;因为当我们理解事物的核心时,我们就可以有效地处理它。

动量概念是关于测量物体的速度。 在此,它衡量的是价格变化的速度。 因此,它将当前价格与之前的价格进行比较,以衡量这两个值之间的变化速度。 这就是动量指标的作用 — 它衡量价格变化的速度,或趋势的加速度。

我们已经知道,首先判断趋势类型或行情方向非常重要,因为我们将根据它制定决策。 因此,我们需要判断趋势:是上行趋势、下行趋势、亦或是横盘。

  • 上行趋势:价格连创更高的低点和更高的高点。 价格上涨。 通常会说,市场上的主要推力是买方。
  • 下行趋势:价格连创更低的高点和更低的低点。 价格下跌。 主要推力是卖方。
  • 横盘:除了上行和下行趋势,其它任何形成的价格走势。 没有任何明确的上下方向推进,它代表的是买卖双方之间处于平衡。

动量的概念非常重要,因为它能从另一个维度来展现趋势走势的强度。 故此,现在我们不仅能观察或判断趋势方向,还能通过分析动量来衡量趋势的强度。

动量指标是一个领先指标,因为它可能引领价格;或者换句话说,它在价格出现变化之前就发生变化了。

根据它的算法,它属于无界振荡器,其被认为是它的缺点之一。 另外的缺点是,根据动量指标的算法,动量指标会错失计算时刻之间的数据。

计算动量有两种不同的方法:

  • 使用减法运算
  • 使用除法运算

这两种方式都会根据您的首选周期选取当前价格和前一周期处的价格,默认值为 14。 那么,我们来看看这两种计算类型中所采用的公式,并举例说明。

  • 采用减法得到动量值

它的计算非常简单 — 它查找当前周期内与前一周期的收盘价之间的差额。

动量 = 当期收盘价 - 前 (n) 周期的收盘价

n = 14, 这是默认周期值

在计算动量指标后,依据计算值生成一条围绕零轴上下振荡的曲线。

我们来看看指标计算的示例。 假设我们有以下数据:

日索引收盘价
110
212
315
417
519
620
718
816
920
1022
1124
1220
1318
1417
1515

现在,如果我们要计算第 15 天的动量,它应如下所示:

动量 = 当期收盘价 - 前 (n) 周期的收盘价

n = 14 其为前个周期的第 1 天

动量 = 15 - 10 = 5

然后,我们在零轴之上相距差值 5 的位置绘制动量指标,故动量指标应在零轴上下振荡。 从这个算法中我们可以看到其缺点,就像我们前面提到的:当我们从当期减去14 个周期前的数值时,其实错失了许多中间数据。 另一个缺点是该指标是无界限的,即它没有上升或下降的极限。 

  • 采用除法获取动量值

计算动量指标的另一种方法是按照比率。 MetaTrader 5 中采用的正是此算法。 它包括以下步骤:

动量 = (当期收盘价 / 前 (n) 期的收盘价)*100

n = 14 其为前个周期的第 1 天

将此计算应用于上一个示例,我们得到的动量如下:

动量 = (15 / 10)*100 = 150

然后,该值将在 100 以上和 150 附近绘制,如图所示,动量指标将在 100 上下振荡。 在本文中,我们将采用这种计算方法,并策略也有基于此。

该指标已经内置在 MetaTrader 5 当中,因此我们只需选择它,它就会插入到图表之中,下面介绍如何做到这一点。

在 MetaTrader 5 中,单击插入开关,然后选择指标,再选择振荡器,最后选择动量,如下图所示:

选择动量后,会出现动量指标参数图:

前一个窗口包括动量指标的参数,在此,您可以根据自己的交易风格或交易计划设置合适的动量指标;因为这要根据交易员的偏好,每位交易员的动量指标可能不同;您会发现参数如下所示:

  1. 选择与当期价格进行比较的周期值,此处默认值为 14。
  2. 选择在动量计算中应用的价格类型(收盘价、开盘价、最高价、最低价、等等)。
  3. 为您的指标选择首选显示样式,如颜色、线型和线宽。

选择合适的参数并按 ok(确定)后,指标显示如下图所示:

动量策略

在这一部分中,我们将学习基于动量指标的简单策略。 有很多基于动量的有用的策略和方法,但为了教学起见,我们将选取一个较简单的策略,因为我们的目的是学习如何运用动量,并在学习了主题核心后,为可能出现的新思路打开大门。

我们的策略将在动量曲线和 100 价位之间寻找交叉点。 当动量线向上突破 100 价位时,这应视为买入信号。 而当动量线向下突破 100 价位时,这应视为一个做空信号。

  • 动量 > 100 = 做多
  • 动量 < 100 = 做空

该信号将根据趋势方向生成,且会针对生成的信号进行过滤。 动量指标能给出早期信号和锯齿,可用于过滤生成的信号。

因此,它将如下所示:

上行趋势期间:

  • 动量 > 100 = 做多
  • 您可以依据另一种工具获利了结以提高效率。

下图示意了在上行趋势期间动量交叉生成的信号示例:

下行趋势期间:

  • 动量 < 100 = 做空
  • 您可以依据另一种工具获利了结以提高效率。

下图示意当动量指标超过 100 价位时,下行趋势期间可能产生的信号示例:

  • 在横盘期间:截至目前,当我撰写本文时,我的观点如下:确有其它工具可在横盘期间提供比动量指标更佳的信号,因为动量所提供的早期信号和锯齿也许会导致假信号。 故此,我更倾向于运用其它工具从横盘走势中获益。
  • 关于我提及的另一种工具产生的获利了结信号。 例如,我们可以使用价格行为来获利了结,因为一旦逆转完成,您可以依据在上行趋势中连创更低的低点或在下行趋势中连创更高的高点来离场,这是许多其它可依据的价格行为技术之一。 另外选项,您可以利用使用任何其它工具以最大盈利离场,例如价格行为或指标。

动量交易系统蓝图

在这一部分,我将提出一个设计基于动量策略的交易系统蓝图。 所以这一步是有关未来编码的规划,旨在得到一个可由计算机运行的程序。

  • 在上行趋势期间,程序应检查每个即时报价,看看是否满足策略条件。 如此,如果动量向上突破 100 或动量值超过 100,我们需要该程序发出买入信号。 如果它没有向上突破 100 或动量值低于 100,程序应该不会发出信号,且什么也不做。 下图清楚地示意了这一点:

  • 在下行趋势期间,程序应在每次即时报价时检查策略条件。 如果动量向下突破 100 或动量值低于 100,程序应发出做空信号。 否则,如果它没有向下突破 100 或动量值超过 100,程序应该不发出信号,什么也不做。 此为示意图:

参照如上蓝图,我们将利用 MQL5 进行策略编程,从而得到自动发出信号的程序,无需手工检查动量信号。 这就是我们将在本文的下一部分中将要实现的内容。

动量交易系统

首先,为了更深入地理解动量指标是如何编码的,我们将学习如何设计一个简单的动量系统,该系统将在图表上提取动量值生成注释。 这可由以下代码来实现:

//+------------------------------------------------------------------+
//|                                       Simple Momentum System.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //Creating array for prices
   double PriceArray [];
   
   //Identifying Momentum properties
   int MomentumDef = iMomentum(_Symbol,_Period,14,PRICE_CLOSE);
   
   //Sorting price array
   ArraySetAsSeries(PriceArray,true);
   
   //Copying results
   CopyBuffer(MomentumDef,0,0,3,PriceArray);
   
   //Getting Momentum value of current price
   double MomentumValue = NormalizeDouble(PriceArray[0],2);
   
   //Commenting Momentum output on the chart
   if(MomentumValue>100) Comment("MOMENTUM VALUE IS: ",MomentumValue);
   
  }
//+------------------------------------------------------------------+

程然后从导航器中选择所需的文件。 导航器窗口通常在终端中打开。 如果尚未打开,请转到“视图”菜单,并选择“导航器”,

下图介绍如何在导航器中查找文件:

然后,通过双击或拖放该文件至打开的图表上。 之后,以下程序窗口将被打开:

启用“允许算法交易”选项,然后按确定。 程序将被加载到图表上,相应的注释亦将出现在图表上。 下面是一个正在运行的程序示例:

现在,我们需要用两种趋势类型来设计我们的策略 — 上行趋势和下行趋势。 那么,正如我们所定义的:

上行趋势期间:

  • 我们需要使用一种策略,当处于上行趋势期间在图表上注释“动量上行趋势策略 - 买入”,作为买入信号提醒我们。 当动量值超过 100 时,即应出现此信号。
    • 动量 > 100 = 做多
  • 如果动量值低于 100,程序应在图表上打印注释“动量上行趋势策略 - 无信号”
    • 动量 < 100 = 无信号

这可由以下代码来实现:

//+------------------------------------------------------------------+
//|                                    Momentum Uptrend Strategy.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //Creating array for prices
   double PriceArray [];
   
   //Identifying Momentum properties
   int MomentumDef = iMomentum(_Symbol,_Period,14,PRICE_CLOSE);
   
   //Sorting price array
   ArraySetAsSeries(PriceArray,true);
   
   //Copying results
   CopyBuffer(MomentumDef,0,0,3,PriceArray);
   
   //Getting Momentum value of current price
   double MomentumValue = NormalizeDouble(PriceArray[0],2);
   
   //Commenting Momentum output on the chart
   if(MomentumValue>100) Comment("MOMENTUM UPTREND STRATEGY - BUY");
   if(MomentumValue<100) Comment("MOMENTUM UPTREND STRATEGY - No SIGNAL");
  }
//+------------------------------------------------------------------+

代码编写完成后,在交易终端中执行它,它会在图表上生成所需的信号,就像我们在前面的程序中看到的那样。 进入导航器窗口并找到该程序,如下图所示:

然后双击或拖放文件至打开的图表上。 这将打开以下参数窗口:

启用“允许算法交易”选项,并单击确定。 该文件将被加载到图表上,如下所示:

程序将开始在图表上生成注释,并依据策略显示信号。

  • 买入信号:

  • 无信号

下行趋势期间:

  • 当动量值低于 100 时,该策略应在图表上显示注释“动量下行趋势策略 - 做空”,作为卖出信号提醒我们。
    • 动量 < 100 = 做空
  • 如果动量值高于 100,则显示注释“动量下行趋势策略 - 无信号”
    • 动量 > 100 = 无信号

以下代码示意如何设计一个程序来实现这一切:

//+------------------------------------------------------------------+
//|                                  Momentum Downtrend Strategy.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OnTick()
  {
   //Creating array for prices
   double PriceArray [];
   
   //Identifying Momentum properties
   int MomentumDef = iMomentum(_Symbol,_Period,14,PRICE_CLOSE);
   
   //Sorting price array
   ArraySetAsSeries(PriceArray,true);
   
   //Copying results
   CopyBuffer(MomentumDef,0,0,3,PriceArray);
   
   //Getting Momentum value of current price
   double MomentumValue = NormalizeDouble(PriceArray[0],2);
   
   //Commenting Momentum output on the chart
   if(MomentumValue<100) Comment("MOMENTUM DOWNTREND STRATEGY - SHORT");
   if(MomentumValue>100) Comment("MOMENTUM DOWNTREND STRATEGY - No SIGNAL");
  }
//+------------------------------------------------------------------+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值