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

在此,我们将了解交易量是什么,它测量什么。 我们将通过分享一些基于其主要概念的简单策略,来探索如何在交易中利用它,以及它如何为我们提供助力。 之后,我们将学习如何为每个提到的策略设计一个分布蓝图,来帮助我们进一步设计基于所提策略的交易系统。 这一步对于设计任何交易系统都非常重要。 然后,我们将进入最有趣的部分,即交易量交易系统,我们将学习如何利用 MQL5 把我们提到的所有内容,乃至于任何相关的有见地的思路转化为交易系统,从而根据这些策略自动生成我们所需的,来帮助我们简化、改进或增强交易过程。

如此,我们将用到内置于 MetaTrader 5 交易终端的 MQL5(MetaQuotes 语言)。 如果您想了解有关如何下载和使用它的更多信息,请阅读前一篇文章中主题。 此外,应用所学知识对您的学习非常有用,因为它能强化和加深您对主题的理解。 在任何学习过程中,实践都是一个非常重要的因素。

免责声明:所有信息“按原样”提供仅用于教学目的,并非出于交易目的或建议。 这些信息不能保证任何结果。 如果您选择在您的任何交易账户上使用这些材料,您将自行承担风险,您是唯一的责任人。

我们跳转到主题,学习一种对我们的交易有用的新工具。

交易量定义

外汇市场的交易量指标表明特定时间内的价格变化数量,即确定合约、货币、单位、等等的实际交易量。 成交量指标可以为我们提供供需的指示,或者是市场流动性的指示。 因此,如果成交量很大,这是走高时需求旺盛,或走低时供应充足的指示。 我们可以说,成交量非常有用,因为它是趋势的确认。 如果您想了解更多关于趋势的信息,可以阅读上一篇文章中的趋势定义主题。

交易量与趋势应保持一致。 这是一个非常有用的工具,可用于确认当前走势是否强劲、抑或疲软。 最好看到,在上升趋势中,成交量伴随上升而增加,伴随向下调整而降低。 在下跌趋势中,成交量伴随着下跌而增加,这将是一个重要的信号,但有时我们发现成交量不高的情况下也会下跌,这是因为即使没有高成交量,价格也可能下跌。 换言之,在下跌趋势中,下跌走势没必要看到高成交量。 如果在下跌趋势中出现看涨调整,交易量将降低。

交易量可作为我们的指示,如果出现背离,则当前趋势存在疲软。 背离意味着,我们发现交易量与价格方向相反,并未确认价格方向。

与我们之前提到的计算相同:

在外汇市场:

交易量 = 特定时间段内价格变化的数量

在股票市场:

交易量 = 交易量 * 价格

例如:如果我们的股票在 $10 价位交易了 1000 股。 因此,交易量将与以下相同:

交易量 = 1000 * $10 = $10,000

与股票市场不同,外汇市场更分散化。

我们不需要手工计算,因为我们可以在 MetaTrader 5 中找到它。 您要做的所有工作就是从可用指标中选择:

插入 --> 指标 --> 成交量 --> 成交量

选择与上图中步骤 4 相同的交易量指标后,将打开交易量指标窗口:

1. 上行交易量柱线颜色。

2. 下行交易量柱线颜色。

3. 所应用交易量 (跳价或实际)。

4. 主线宽度。 

判定之前的参数后,将其加载到图表上:

绿色表示当前柱线大于前一根,而红色表示当前柱线小于前一根。

交易量策略

在本部分中,我们将提到简单的交易量策略,从而了解如何运用交易量指标。 确实,您可以发现这些策略需要优化,这是正常的,因为它们的主要目标是了解如何根据其概念运用交易量指标,以及如何据其为基础来设计交易系统。 因此,在将这些策略用于实际帐户之前,您必须测试它们。

  • 策略一: Vol - 走势:

基于此策略,我们需要比较当前和前期的交易量数值,以便据此判定相应的信号。 如果当期大于前期,这将是交易量增加的信号。 如果当期小于前期,则是交易量减少信号。

简而言之,

当期交易量 > 前期交易量 --> 交易量增加。

当期交易量 < 前期交易量 --> 交易量降低。

  • 策略二: Vol - 强度:

基于这一策略,我们需要比较当期交易量值和前五期的平均值,以便判定该交易量指标的强度。 如果当期值高于平均值,则表示交易量强劲。 如果当期值低于平均值,则表示交易量弱势。

故此,

当期 > 平均 --> 交易量走强

当期 < 平均 --> 交易量走弱

  • 策略三: 价格 & 交易量 - 上行趋势:

根据这一策略,在上涨趋势期间,我们将比较当期和前期的高点,以及当期和前期的成交量,以此判定是否有买入信号或无信号。 如果当期高点高于前期,当期成交量高于前期,则为买入信号;但如果当期高点位于前期之上,当期成成交量低于前期成交量,则为无信号。

当期高点 > 前期高点 && 当期成交量 > 前期成交量 --> 上涨期间的买入信号

  • 策略四: 价格 & 交易量 - 下行趋势:

该策略将与前一策略相反,在下跌趋势期间,我们将比较当期和前期的低点,与当期和前期的成交量值,以此判定是否存在做空信号或无信号。 如果当期低点低于前期,当期成交量高于前期,则为做空信号;但如果当期低点位于前期之下,当期成成交量低于前期成交量,则为无信号。

当期低点 < 前期低点 && 当期成交量 > 前期成交量 --> 下跌期间的做空信号

  • 策略四: 均线 & 交易量策略:

根据这一策略,我们将比较两条移动平均线的长度,一条是短期的,另一条是长期的,以及当期和前期成交量的值,以此判定是否存在买入或做空信号。 如果短期均线小于长期均线,然后短期均线高于长期均线,同时当期成交量高于前期成交量,这将是买入信号。 如果短期均线高于长期均线,然后短期均线低于长期均线,同时当期成交量高于前期成交量,这将是做空信号。

短期均线 < 长期均线,然后短期均线 > 长期均线 && 当期交易量 > 前期交易量 --> 做多信号

短期均线 > 长期均线,然后短期均线 < 长期均线 && 当期交易量 > 前期交易量 --> 做空信号

交易量策略蓝图

在这一部分中,我们将为每个策略设计一个蓝图,设计蓝图的原因是帮助我们规化我们想要做的事情,从而创建一个交易系统。 这一步对于安排我们的思路非常重要且有必要,能够辨别我们每一步想要做什么。

首先,我们将创建一个简单交易系统的蓝图,该系统仅生成交易量指标的当期值,作为图表上的注释。 我们需要系统检查每次跳价中的交易量指标值,然后在图表上返回当期值作为注释。 以下是创建此交易系统的分布蓝图。



 

  • 策略一: Vol - 走势:

根据这一策略,我们需要创建一个简单的交易系统,该系统通过比较当期和前期的成交量指标的两个数值来生成信号,通知我们成交量的变化(如果成交量增加或减少)。 故此,我们需要系统在每次跳价检查这两个数值,然后如果当期交易量大于前期交易量,则通知交易量正在增加,如果当期交易量低于前期,则通知交易量正在减少。 以下是创建此交易系统的分布蓝图。



 

  • 策略二: Vol - 强度:

根据这一策略,我们需要创建一个简单的交易系统,根据当期交易量指标值与前五期交易量平均值之间的比较,生成信号,告知我们交易量的强度。 故此,我们需要让系统检查所有这些值,然后计算每次跳价的前五期交易量值的平均值。 在生成合适的信号之后,如果当期交易量值大于平均交易量值,则生成交易量强劲信号、当期交易量值、前五期交易量值,且所有数值都显示在图表注释的单独行中。 如果当期值小于平均值,则生成交易量弱势信号、当期交易量值、前五期交易量值和平均值。在图表上,每个值都单独显示在一行里。 以下是创建该交易系统的每一步蓝图:



 

  • 策略三: 价格 & 交易量 - 上行趋势:

根据这一策略,我们需要创建一个简单的交易系统,在上涨趋势期间,于每次跳价时检查当期和前期交易量高点,还有当期和前期交易量指标值,然后生成买入信号。 基于此策略,如果当期高点值大于前期值,且当期交易量大于前期值,我们需要它在图表注释上生成买入信号、当期高点、前期高点、当期成交量和前期成交量,分别在单独行中生成每个数值;或者如果当期高点值大于前期,且当期交易量值小于前期,则只生成前期的所有类型数值,且无任何买入信号。 以下是创建该交易系统的每一步蓝图:


 

  • 策略四: 价格 & 交易量 - 下行趋势:

这一策略将与前一策略相反。 我们需要创建一个简单的交易系统,在下跌趋势期间,不光检查当期和前期的成交量指标值,还需要检查当期和前期低点,然后生成一个做空信号。 然后,如果当期低点值小于前期值,且当期交易量大于前期值,我们需要系统生成一个做空信号、当期低点、前期低点、当期交易量和前其交易量,作为图表上的注释;;或者如果当前低值小于上一个值,同时当期交易量小于前期值,仅生成所有前期类型的数值,且无任何做空信号。 我们可以看到创建此交易系统的分步蓝图,如下所示:



 

  • 策略四: 均线 & 交易量策略:

根据这一策略,我们需要创建一个交易系统,可以逐次检查跳价的交易量和移动平均线两个指标,基于两条移动平均线之间的比较来决定是否存在做多或做空信号,其中一条均线是短期的,另一条是长期的,短期的大于长期的,然后短期小于长期,而此刻,当期成交量值大于前期,在这种情况下,我们需要系统生成做多信号。 第二种场景是短期的小于长期的均线,然后在短期的大于长期的均线同时,当期交易量大于前期,在这种情况下,我们需要系统生成做空信号。 以下是创建此类策略的分步蓝图:

交易量交易系统

我们来到了这篇文章中最有趣的部分,关于如何将之前的所有信息转换为交易系统,从而自动准确地向我们提供信号。 我们将为每个策略设计一个交易系统,但首先我们要设计一个生成交易量现值的交易系统,作为每个策略的基础。

  • 使用 “double” 数据类型创建交易量数组。
double VolArray[];
  • 调用 “ArraySetaSeries” 函数为数组设置排列顺序,返回布尔值( true 或 false):
ArraySetAsSeries(VolArray,true);
  • 在创建 VolDef 变量后,调用 iVolumes 定义交易量指标句柄。 iVolumes 函数返回交易量指标的句柄,其参数为(品种,周期,应用的交易量类型)。 我们采用(_Symbol)来指定当前品种,采用(_ period)来指定目前时间帧。
int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
  • 调用 CopyBuffer 函数从交易量指标获取数据来填充数组。
CopyBuffer(VolDef,0,0,3,VolArray);
  • 创建 VolValue 变量后,调用 NormalizeDouble 函数计算交易量值。 NormalizeDouble 函数返回双精度类型值。
int VolValue=NormalizeDouble(VolArray[0],5);
  • 调用 Comment 函数创建含有交易量指标值的注释。
Comment("Volumes Value is: ",VolValue);

以下是上述交易系统的完整代码:

//+------------------------------------------------------------------+
//|                                               Simple Volumes.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()
  {
//Create an array for Volume
   double VolArray[];

//sorting the array from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current vol value
   int VolValue=NormalizeDouble(VolArray[0],5);

//creating a comment with current vol value
   Comment("Volumes Value is: ",VolValue);
  }
//+------------------------------------------------------------------+

此代码编译后,即可在 MetaTrader 5 中执行,我们在导航窗口中可以找到它:

双击文件,或将其拖放到图表上,将出现 EA 窗口:

然后,我们能找加载到图表的 EA:

以下是测试生成的信号示例:

  • 策略一: Vol - 走势:

我们将编写如下代码,创建一个交易系统,根据当期交易量和前期交易量之间的比较,在图表上的评论里提醒我们交易量指标的走势:

//+------------------------------------------------------------------+
//|                                               Vol - Movement.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()
  {
//Create an array for Volume
   double VolArray[];

//sorting the array from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current vol value
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of vol movements
//Volume increasing
   if(VolCurrentValue>VolPrevValue)
     {
      Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

//Volume decreasing
   if(VolCurrentValue<VolPrevValue)
     {
      Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

代码中的区别:

计算当期和前期交易量值:

   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

策略条件:

交易量指标正在增加:

   if(VolCurrentValue>VolPrevValue)
     {
      Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

交易量指标正在降低:

   if(VolCurrentValue<VolPrevValue)
     {
      Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

编译此代码后,我们将在导航器窗口中找到 EA:

双击,窗口将出现:

勾选“下一步”允许算法交易,并按“确定”后,它将加载到图表:

以下是采用当期和前期数值的数据窗口生成 Vol 走势策略信号的示例:

交易量的增加:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值