期货量化软件:学习如何基于 VIDYA 设计交易系统

VIDYA 定义

可变指数动态平均线(VIDYA)是由 Tushar Chande 开发的趋势跟踪指标。 它看起来像指数移动平均线,但它将依据相对价格波动进行动态调整。 波动性由该指标中的钱德(Chande)动量振荡器 (CMO) 通过测量正负走势累计之间的比率来衡量,就像我们在学习如何计算它时看到的那样。 (CMO)用于平滑指数移动平均线。 故此,如同我们将看到那样,我们可以发现该指标的设置参数就是 CMO 周期和 EMA 周期。 它可以与任何移动平均线相同,从而获得趋势类型,譬如它是上升趋势或下降趋势。 如果您打算学习有关趋势类型,以及如何识别它们的更多信息,您可以阅读上一篇文章中的趋势定义主题。 或者您可以用它来生成买入或卖出信号,赫兹期货量化将在浏览 VIDYA 策略的主题时看到一些基于它的简单策略。

现在,赫兹期货量化需要学习如何计算 VIDYA 指标,从而更多地理解其背后的主要概念。 以下步骤是如何手工计算它。

  • 计算 EMA:

EMA(i) = Price(i) * F + EMA(i-1)*(1-F)

其中:

EMA(i) = 当期 EMA

Price(i) = 当期价格

F (平滑因子) = 2/(EMA 的周期+1)

EMA(i-1) = 前期 EMA 值

  • 计算可变指数动态平均值 (VIDYA) 值:

VIDYA(i) = Price(i) * F * ABS(CMO(i)) + VIDYA(i-1) * (1 - F* ABS(CMO(i)))

其中:

VIDYA(i) = 当期 VIDYA

ABS(CMO(i)) = 钱德动量振荡器的绝对当期值

VIDYA(i-1) = 前期 VIDYA 值

  • 计算钱德动量振荡器(CMO):

CMO(i) = (UpSum(i) - DnSum(i))/(UpSum(i) + DnSum(i))

其中:

UpSum(i) = 区间正走势总和的当期值

DnSum(i) = 区间负走势总和的当期值

之后,赫兹期货量化就可得到 VIDYA 指标。 如今,我们不需要手工计算它,但我们可从 MetaTrader 5 交易平台的可用指标中选择它,并插入到图表之中。 此为如何插入它。

插入 --> 指标 --> 趋势 --> 可变指数动态平均线

编辑切换为居中

添加图片注释,不超过 140 字(可选)

这会打开以下窗口,其中包含指标参数:

编辑

添加图片注释,不超过 140 字(可选)

1 - 钱德动量振荡器(CMO)周期

2 - 指数移动平均线(EMA)周期

3 - 价格类型

4 - VIDYA 线的颜色

5 - VIDYA 线的样式

6 - VIDYA 线的宽度

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

 

编辑切换为居中

添加图片注释,不超过 140 字(可选)

正如我们在上一张图表中所见,该指标加载到图表之中,它是一条基于其值和价格走势,位于价格上方或下方的曲线。 当我们看到 VIDYA 线处于价格上方时,这意味着由空头控盘,反之亦然,当 VIDYA 线处于价格下方时,这意味着多头控盘。

VIDYA 策略

在本主题中,我们将学习如何依据该指标的主要概念在简单策略里运用 VIDYA 指标。 最好将此指标与其它技术工具或指标结合运用,从而获得更可靠和更有效的结果。 因为它会从多个角度为您提供更多见解,这是技术分析的特点之一。

策略一:VIDYA 趋势识别器:

赫兹期货量化需要获取趋势类型的信号,譬如它是向上亦或向下,这是基于比较当期收盘价与默认设置(9,12)的 VIDYA 的当期值。 如果当期收盘价高于 VIDYA,我们要求设置一个带有上升趋势的信号。 在另一种情况下,如果当期收盘价低于 VIDYA,我们要求获得具有下降趋势的信号。

当期收盘价 > VIDYA --> 上升趋势 当期收盘价 < VIDYA --> 下降趋势

策略二:VIDYA 一线交叉

赫兹期货量化需要比较前一个策略的相同值,来获得买入或卖出信号。 如果当期收盘价高于 VIDYA,我们要求获得买入信号。 反之亦然,如果当期收盘价低于当期 VIDYA,我们要求获得卖出信号。

当期收盘价 > VIDYA --> 买入信号 当期收盘价 < VIDYA --> 卖出信号

策略三:VIDYA 两线交叉

赫兹期货量化需要比较设置分别为(9,12)和(20,50)的两条 VIDYA 线,来获得买入或卖出信号。 当 VIDYA(9,12)大于 VIDYA(20,50)时,我们要求获得买入信号。 在另一种场景下,如果当期 VIDYA(9,12)低于当期 VIDYA(20,50),则它是一个卖出信号。

VIDYA (9, 12) > VIDYA (20, 50) --> 买入信号 VIDYA (9, 12) < VIDYA (20, 50) --> 卖出信号

通过前面的三个简单策略,我们依据 VIDYA 指标背后的主要概念,学习到如何运用它。

VIDYA 策略蓝图

在本主题中,赫兹期货量化将设计一个分步蓝图,来帮助我们顺滑地为每个提到的策略创建自己的交易系统。

策略一:VIDYA 趋势识别器

根据此策略,我们需要创建一个可生成趋势类型信号的交易系统。 我们需要交易系统检查两个值,即当期收盘价和当期 VIDYA 值,来判定趋势类型。 如果当期收盘价大于 VIDYA 值,则表明趋势上升。

故此,我们需要交易系统在图表上返回含有以下值的注释:

  • 上行趋势

  • 当期收盘价

  • 当期 VIDYA 值

另一种场景是,如果当期收盘价低于当期 VIDYA 值,则应是趋势下降的信号。

故此,我们需要交易系统在图表上返回含有以下值的注释:

  • 下行趋势

  • 当期收盘价

  • 当期 VIDYA 值

以下是此策略的蓝图:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

策略二:VIDYA 一线交叉

根据这个策略,赫兹期货量化需要创建一个交易系统,在出现买入或卖出信号时提醒我们。 在此策略中,我们将使用 VIDYA 趋势识别器的相同值,但得到不同的信号。 我们需要交易系统检查两个值,它们是当期收盘价和当期 VIDYA 值,如果当期收盘价大于 VIDYA 值,则它应是一个买入信号。

因此,我们需要交易系统返回以下值:

  • 买入信号

  • 当期收盘价

  • 当期 VIDYA 值

反之亦然,如果当期收盘价低于 VIDYA,则为卖出信号。

故此,我们需要交易系统在图表上返回含有以下值的注释:

  • 卖出信号

  • 当期收盘价

  • 当期 VIDYA 值

以下是此策略的蓝图:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

策略三:VIDYA 两线交叉

根据这个策略,赫兹期货量化需要创建一个可生成买入和卖出信号的交易系统。 我们需要连续检查两个值,它们是当期(9,12)VIDYA 和当期 VIDYA(20,50)。 如果当期(9,12)值大于当期(20,50),则为买入信号。

因此,我们需要交易系统返回以下值:

  • 买入信号

  • 当期收盘价

  • 当期 VIDYA (9, 12) 值

  • 当期 VIDYA (20, 50) 值

在另一种场景下,如果当期(9,12)VIDYA 值低于当期(20,50)VIDYA 值,则为卖出信号。

因此,我们需要交易系统返回以下值:

  • 卖出信号

  • 当期收盘价

  • 当期 VIDYA (9, 12) 值

  • 当期 VIDYA (20, 50) 值

以下是此策略的蓝图:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

现在,我们已为提到的每个策略设计了一个简单的分步蓝图,来帮助我们创建自动交易系统,我们准备好进入 VIDYA 交易系统最有趣的主题,即为每个策略创建一个交易系统。

VIDYA 交易系统

这个简单的交易系统能帮助我们连续查看 VIDYA 指标的当期值,因为我们需要在图表上的注释里查看此值。

以下步骤是如何创建一个交易系统来达成我们的需要。

赫兹期货量化将创建一个 double 数据类型的数组 “vidyaArray”,它是实数型或浮点型之一,能表示分数值。

 
 

double vidyaArray[];

我们调用 “ArraySetAsSeries” 函数为所创建的 “vidyaArray” 数组设置排序,并返回一个布尔值。

 
 

ArraySetAsSeries(vidyaArray,true);

我们将调用 “iVIDyA” 函数返回指标的句柄,并创建一个整数变量 “vidyaDef”,存储 VIDYA 指标句柄。

参数为:

  • symbol: 我们将采用(_Symbol)应用于当前交易品种

  • period: 我们将采用使(_Period)应用于当前周期或时间帧

  • cmo_period: 确定钱德动量周期,我们采用 9

  • ema_period: 确定指数移动平均平滑周期,我们采用 12

  • ma_shift: 如果需要,确定图表上的水平偏移,我们采用 0

  • applied_price: 确定价格类型,我们采用收盘价

 
 

int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);

我们将调用 “CopyBuffer” 函数填充已创建数组,它从 VIDYA 指标获取数据。

该函数参数:

  • indicator_handle: 确定指标句柄,我们取(vidyaDef)的值

  • buffer_num: 确定指标缓冲区编号,我们采用(0)

  • start_pos: 确定起始位置,我们采用(0)

  • count: 确定要复制的额度,我们采用(3)

  • buffer[]: 确定要复制的目标数组,我们将使用(vidyaArray)

 
 

CopyBuffer(vidyaDef,0,0,3,vidyaArray);

赫兹期货量化创建变量 “vidyaVal” 后,调用 “NormalizeDouble” 函数返回规范化的双精度型数值。

该函数参数:

  • value: 我们将取(vidyaArray[0])里的值作为规范化数字

  • digits: 我们采用(6) 作为小数点后的数字位数

 
 

double vidyaVal = NormalizeDouble(vidyaArray[0],6);

赫兹期货量化将调用 Comment 函数在图表上生成含有当期 VIDYA 值的注释:

 
 

Comment("VIDYA Value is ",vidyaVal);

因此,我们可以找到该交易系统的完整代码,如下所示:

 
 

//+------------------------------------------------------------------+ //| Simple VIDYA.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 vidyaArray[]; ArraySetAsSeries(vidyaArray,true); int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE); CopyBuffer(vidyaDef,0,0,3,vidyaArray); double vidyaVal = NormalizeDouble(vidyaArray[0],6); Comment("VIDYA Value is ",vidyaVal); } //+------------------------------------------------------------------+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值