学习如何基于柴金(Chaikin)振荡器设计交易系统

柴金(Chaikin)振荡器定义

在这一部分中,我们将详细学习柴金振荡器指标,由此我们会学到指标背后的基本概念要怎样来理解。 柴金振荡器指标是一个动量指标,它由 Marc Chaikin 创建,很明显该指标的名称是冠以其创建者之名。 它利用移动平均收敛/离散(MACD) 公式衡量累积分布线的动量。 通过测量这种动量,我们就能深入了解累积分布线的方向变化。

如果我们打算手工计算柴金振荡器,来理解更多其背后的概念,我们可以经由以下步骤来做到:

  1. 计算资金流乘数 = ((收盘价 - 最低价) - (最高价 - 收盘价)) / (最高价 - 最低价)
  2. 计算资金流量 = 资金流乘数 * 交易量
  3. 计算累积分布线(ADL)= 前期 ADL + 当期资金流量
  4. 柴金振荡器 =(ADL 的 3 周期 EMA)-(ADL 的 10 周期 EMA)

如今,我们不需要手工计算指标,因为您可以简单地将其插入图表中,因为它已内置在 MetaTrader 5 之中。 您所有要做的只是从可用指标中选择它,但此处我们学习了如何做到这一点,并学习其背后的主要概念。

我们可以在 MetaTrader 5 里点击插入选项卡 --> 指标 --> 振荡器 --> 柴金振荡器,将其插入到图表之中。 下图显示了这些步骤:

选择柴金振荡器指标之后,我们会发现与以下内容相同的指标参数窗口:

1- 确定交易量的类型。

2- 确定快速移动平均线的周期。

3- 确定慢速移动平均线的周期。

4- 确定移动平均线的类型。

5- 确定指标线的颜色。

6- 确定指标线的样式。

7- 确定指标线宽度。

确定前面的参数并按“确定”后,我们会发现指标入到图表之中,如下所示:

柴金(Chaikin)振荡器策略

在本主题中, 我们将学习基于柴金振荡器指标的主要概念,并加以运用的简单策略。 当我们思考有关如何利用某种技术工具来强化和增强我们的决策时,这将是一种很好的方式,这也是运用技术分析的特征之一。 我还需要在此确认的是,您的真实账户上使用任何策略之前,一定要对其进行测试,从而确保它适合您,特别是如果您使用像本文这样以教学为目标的策略。

  • 策略一: 柴金振荡器交叉:

根据此策略,我们需要依据当前柴金指标值与零轴之间的交叉获得买入或卖出信号。 若当前柴金值高于零轴时,则这是一个买入信号。 在另一种情况下,若当前柴金值低于零轴时,则这是一个卖出信号。

简而言之,

当期柴金值 > 零轴 --> 买入信号。

当期柴金值 < 零轴 --> 卖出信号。

  • 策略二: 柴金振荡器走势:

根据此策略,我们需要依据柴金指标最后的两个值获得曲线走势的信号。 若当期柴金值大于前期值时,这将是上升走势的信号。 反之亦然,若当期柴金值低于前期值时,这将是下降走势的信号。

简单,

当期柴金值 > 前期柴金值 --> 上升走势。

当期柴金值 < 前期柴金值 --> 下降走势。

  • 策略三: 柴金振荡器 - 上行趋势:

基于此策略,在上升趋势期间,我们需要评估当期和前期的高值,以及当期和前期柴金值,并基于其结果来了解是否存在强劲的上升走势,或是看跌背离。 如果当期高点大于前期高点,并且当期柴金大于前期柴金值,则这是上升趋势期间强劲上升的信号。 如果当期高点大于前期高点,并且当期柴金低于前期柴金值,则这是看跌背离的信号。

当期高点 > 前期高点,且当期柴金 > 前期柴金 -->上升趋势中的强劲上升走势。

当期高点 > 前期高点,且当期柴金 < 前期柴金值 --> 看跌背离。

  • 策略四: 柴金振荡器 - 下行趋势:

基于此策略,在下跌趋势期间,我们需要评估当期和前期的低值,以及当期和前期柴金值,并基于其结果来了解是否存在强劲的下跌走势,或是看涨背离。 如果当期低点低于前期低点,并且当期柴金低于前期柴金值,则这是下跌趋势期间强劲下跌的信号。 如果当期低点低于前期低点,并且当期柴金高于前期柴金值,则这是看涨背离的信号。

当期低点 < 前期低点,且当期柴金 < 前期柴金 --> 下跌趋势中的强劲下跌走势。

当期低点 < 前期低点,且当期柴金 > 前期柴金值 --> 看涨背离。

柴金(Chaikin)振荡器策略蓝图

在本主题中,我们将设计一个分步蓝图,以此帮助我们为提到的每个策略创建交易系统,我相信这一步非常重要,因为它可以归纳我们的思路,并以这种实现我们的目标。 现在,我们开始照此执行。

  • 策略一: 柴金振荡器交叉:

根据此策略,我们需要创建一个交易系统,一旦满足特定条件,该系统就会在图表上返回特定注释。 我们要求交易系统在每次逐笔跳价时检查柴金振荡器值,当该值高于零轴时,我们要求交易系统在图表上显示含有买入信号的注释,和当前柴金值,每个值都在单独的一行中。 而在另一种情况下,当柴金值低于零轴时,我们要求交易系统返回含有卖出信号的注释,和当前柴金值,每个值都在单独的一行中。

以下是此蓝图的示意图。

  • 策略二: 柴金振荡器走势:

基于此策略,我们要求交易系统检查两个值,并在每次跳价时判断哪个值更大。 这两个值是当期和前期的柴金振荡器值。 若当期值大于前期值时,我们要求交易系统返回一条注释:柴金振荡器正在上升,当前柴金值,前期柴金值,它们都在单独的一行中。 若当期值低于前期值时,我们要求交易系统返回一条注释:柴金振荡器正在下降,当期柴金值,前期柴金值。

以下是该策略的蓝图示意图。

  • 策略三: 柴金振荡器 - 上行趋势:

根据此策略,我们要求交易系统在每次跳价中检查四个值,它们是当期高点、前期高点、当期柴金值和前期柴金值。 在检查这些数值后,我们要求交易系统来判断当期高点和前期高点之间,以及当期和前期柴金值之间哪一个更大。 若当期高点大于前期高点,且当期柴金值大于前期柴金值时,我们要求交易系统在上升趋势中返回含有强烈上升走势的注释,当期高值、前期高值、当期柴金值、和前期柴金值,每个值都在单独的一行中。 在另一种场景下,若当期高点大于前期高点,且当期柴金值低于前期柴金值时,我们要求交易系统在图表上返回一条注释,含有看跌背离、当期高值、前期高值、当期柴金值、前期柴金值,每个值都在单独的一行中。

以下是该策略蓝图的示意图。

  • 策略四: 柴金振荡器 - 下行趋势:

基于此策略,我们要创建一个交易系统,每次跳价连续检查四个数值,这些数值是当期低值、前期低值、当期柴金值和前期柴金值,然后判断当期低值是否低于前期低值,当期柴金值是否低于前期柴金值, 我们要求交易系统在图表上返回含有强烈下跌走势的注释,当期低值、前期低值、当期柴金值和前期柴金值,每个值都在单独的一行中。 在另一种场景下,若当期低点低于前期低点,且当期柴金值高于前期柴金值时,我们要求交易系统在图表上返回一条注释,含有看涨背离、当期低值、前期低值、当期柴金值、前期柴金值,每个值都在单独的一行中。

以下是此蓝图的示意图。

柴金振荡器正在上升

柴金(Chaikin)振荡器交易系统

在这一部分中,我们将学习如何以 MQL5 编程或编码将上述策略转换为交易系统,从而自动操作。 因此,现在我们就着手编写一个简单的交易系统,能自动将图表上的柴金振荡器当期值显示在注释里,我们还将利用此交易系统作为我们上述策略的基础。 如下创建此交易系统。

  • 以 “double” 函数创建柴金振荡器数组,其可表示小数值。 “double” 型是浮点型之一,也是数据类型之一。
double chaiArray[];
  • 调用 “ArraySetAsSeries” 函数为所创建数组设置排列顺序,即从当前数据开始,该函数完成后返回布尔值。 "ArraySetAsSeries" 参数是:
    • 一个数组[]
    • 标志
ArraySetAsSeries(chaiArray,true);
  • 创建一个 chaiDef 整数型变量,调用 “iChaikin” 函数定义柴金振荡器句柄。 此函数返回柴金振荡器指标的句柄。 该函数的参数是:
    • symbol, 设置交易品种名称,默认我们指定应用当前图表的 “_Symbol”。
    • period, 设置时间帧,默认我们指定应用当前时间帧的 “_Period”。
    • fast_ma_period, 设置快速移动的平均长度,我们将默认值设置为 3。
    • slow_ma_period,  设置慢速移动的平均长度,我们将默认值设置为 10。
    • ma_method, 设置移动平均线的类型,我们将使采用指数移动平均线(MODE_EMA)。
    • applied_volume, 设置交易量的类型,我们将采用跳价交易量 (VOLUME_TICK)。
int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);
  • 调用 “CopyBuffer” 函数将价格数据复制到 chaiArray 数组当中,该函数返回成功复制的数据计数,如果出现错误,则返回 -1。 该函数的参数是:
    • indicator_handle, 我们将指定指标定义 “chaiDef”。
    • buffer_num, 设置指标缓冲区编号,我们设置为 0。
    • start_pos, 设置起始位置,我们设置为 0。
    • count, 设置数据复制的数量,我们设置为 3。
    • buffer[], 设定要复制的目标数组,我们将确定 “chaiArray”。
CopyBuffer(chaiDef,0,0,3,chaiArray);
  • 创建 “chaiVal” 双精度型变量后,调用 “NormalizeDouble” 函数获取柴金振荡器值。 "Normalizedouble" 的参数是:
    • value, 确定常规化数字,我们将指定 “chaiArray[0]”,我们将使用 0 作为当前值返回
    • digits, 确定小数点后的保留位数,我们确定为 6。
int chaiVal = NormalizeDouble(chaiArray[0],6);
  • 调用 Comment 函数将当前柴金振荡器值输出到图表上的注释。
Comment("Chaikin Oscillator Value is ",chaiVal);

以下是创建这个简单交易系统的完整代码。

//+------------------------------------------------------------------+
//|                                    Simple Chaikin Oscillator.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()
  {
   double chaiArray[];

   ArraySetAsSeries(chaiArray,true);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiVal = NormalizeDouble(chaiArray[0],6);

   Comment("Chaikin Oscillator Value is ",chaiVal);

  }
//+------------------------------------------------------------------+

这段代码编译完成之后,我们可在智能系统文件夹的导航器窗口中找到该程序的文件,如下所示。

当我们需要执行此智能系统时,我们将其拖放到图表上,然后将出现与以下内容相同的程序参数窗口。

正如我们在上一张图表的右上角看到的,智能系统被加载到图表上。 然后,我们可以找到生成的信号,如下所示。

正如我们在前面的测试示例中所看到的,在图表的左上角,我们得到一条含有当前期柴金振荡器值的注释。 如果我们想确保生成的值与 MetaTrader5 中内置指标生成的值相同,我们可以在加载智能系统以后,再插入一个参数相同的内置指标,如此我们就能对比两者的值,如下所示。

正如我们在图表的右上角看到的,智能系统加载到图表上,在左上角,我们能找到智能系统生成的数值,该值与下面窗口中插入的指标的值相同。

  • 策略一: 柴金振荡器交叉:

以下是基于此策略所创建交易系统的完整代码。

//+------------------------------------------------------------------+
//|                                 Chaikin Oscillator Crossover.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()
  {
   double chaiArray[];

   ArraySetAsSeries(chaiArray,true);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiVal = NormalizeDouble(chaiArray[0],6);
   
   if(chaiVal>0)
   {
   Comment("Buy signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

   if(chaiVal<0)
   {
   Comment("Sell signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

  }
//+------------------------------------------------------------------+

此代码中的区别:

柴金振荡器交叉的条件:

若为买入信号的情况,

   if(chaiVal>0)
   {
   Comment("Buy signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

若为卖出信号的情况,

   if(chaiVal<0)
   {
   Comment("Sell signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

编译此代码后,我们将在导航器窗口中找到与以下内容相同的智能系统文件。

将其拖放到图表上后,智能系统的窗口将如下所示:

按“确定”后,智能系统将加载到图表上,如下所示:

正如我们在右上角看到的,柴金振荡器交叉智能系统加载到图表上,现在我们可以看到依据此策略生成的信号。 下面是一个示例。

若为买入信号的情况,

正如我们在图表的左上角看到的,买入信号是在柴金振荡器值上穿零轴时产生的。

若为卖出信号的情况,

正如我们在图表的左上角看到的,买入信号是在柴金振荡器值下穿零轴时产生的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值