期货量化软件学习如何基于相对活力(Vigor)指数设计交易系统

您所在的位置:网站首页 战狼二观后感作文五百字 期货量化软件学习如何基于相对活力(Vigor)指数设计交易系统

期货量化软件学习如何基于相对活力(Vigor)指数设计交易系统

2023-06-30 05:50| 来源: 网络整理| 查看: 265

 我们赫兹量化软件将采用 MQL5(MetaQuotes 语言 5)IDE 来编写我们的代码,并用量化软件易终端来执行我们的交易系统。 如果您作为初学者想提高自己的编码技能,我建议您尝试应用自己将学到的知识,因为实践非常重要。

所有提到的策略仅用于教学目的,故此,您也许会发现它们需要优化,这很正常,因为本文的主要宗旨;这些简单策略都是为了学习其背后的主要概念。 如此,在实盘账户中运用它们之前,您必须对其进行全面的测试,从而确保它们对您的交易有用。

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

相对活力指数(Relative Vigor Index)定义

在本主题中,我们将详细学习什么是相对活力指数(RVI)。 它是一个动量和振荡器技术指标。 通过比较其收盘价与开盘价,该指标衡量趋势的强度。 在上升趋势期间,收盘价高于开盘价,但在下跌趋势期间,收盘价低于开盘价。 除此之外,利用简单移动平均线可将结果进行平滑处理。 根据其性质,该 RVI 指标在趋势市场中的表现优于区间周期。 我们可以发现,该 RVI 的计算类似于随机振荡器,但 RVI 是比较其收盘价与开盘价;而随机振荡器则取收盘价与其在特定周期内的价格范围进行比较。 如果我们想手动计算 RVI,我们可以通过以下步骤来完成:

RVI = (CLOSE - OPEN) / (HIGH - LOW)

其中:

CLOSE = 收盘价

OPEN = 开盘价

HIGH = 最高价

LOW = 最低价

但通常,我们所用的 RVI 显示为计算不同分量的两条线,以下是我们如何计算它们。

1- 第一条线计算:

提名人计算:

MovAverage = (CLOSE-OPEN) + 2 * (CLOSE-1 - OPEN-1) + 2 * (CLOSE-2 - OPEN-2) + (CLOSE-3 - OPEN-3)

其中:

CLOSE = 当期收盘价

CLOSE 1, CLOSE 2, CLOSE 3 = 1, 2, 和 3 周期前的收盘价

OPEN = 当期开盘价

OPEN 1, OPEN 2, OPEN 3 = 1, 2, 和 3 周期前的开盘价

分母计算:

RangeAverage = (HIGH-LOW) + 2 x (HIGH-1 - LOW-1) + 2 x (HIGH-2 - LOW-2) + (HIGH-3 - LOW-3)

其中:

HIGH = 最后最高价

HIGH, HIGH 2, HIGH 3 = 1, 2, 和 3 周期前的最后最高价

LOW = 最后最低价

LOW 1, LOW 2, LOW 3 = 1, 2, 和 3 周期前的最后最低价

计算这些平均值的总和,如下所示:

2- 第二条线计算:

RVIsignal = (RVIaverage + 2 * RVIaverage-1 + 2 * RVIaverage-2 + RVIaverage-3)/6

现在,在学习了如何手工计算该指标后,我们知道了该指标背后的主要概念,但以后我们无需手工这样做,因为在 MetaTrader 5 交易终端中它是内置的,我们需要做的就是从可用指标中选择它。 以下是将其插入图表的方法:

打开 MetaTrader 5 终端时 --> 插入 --> 指标 --> 振荡器 --> 相对活力指数

按下相对活力指数后,我们将看到其参数窗口,如下所示:

1- 确定周期。

2- 确定 RVI 线颜色。

3- 确定 RVI 线样式。

4- 确定 RVI 线宽度。

5- 确定信号线颜色。

6- 确定信号线样式。

7- 确定信号线宽度。

确定所有参数后,我们会发现加载的指标与以下内容相同:

正如我们在上一张图表中所见,我们将 RVI 指标加载到图表上,它有两条线围绕零水平振荡。

相对活力指数策略

在学习了 RVI 背后的主要概念之后,我们将学习如何基于其主要概念在简单策略里运用它。 我需要在这里再次确认的是,请您在实盘账户上运行任何策略之前对其进行严格测试,并确保它适合您的交易并可盈利,因为此处的主要概念仅出于教学目,并共享简单策略,您发现它们也许要经过优化才能正常运作。

策略一: RVI 交叉 - 上行趋势:

基于此策略,我们需要在特定条件下在上升趋势期间获得买入和平仓信号。 当 RVI 当期值和 RVI 信号当期值大于零轴时,RVI 当期值大于 RVI 信号当期值,这是一个买入信号。 反之亦然,若 RVI 当期值和 RVI 信号当期值低于零轴时,RVI 当期值低于 RVI 信号当期值,这是一个平仓信号。

简而言之,

RVI 值 > 0 且 RVI 信号值 > 0 且 RVI 值 > RVI 信号值 --> 买入 RVI 值 < 0 且 RVI 信号值 < 0 且 RVI 值 < RVI 信号值 --> 平仓

策略二: RVI 交叉 - 下行趋势:

基于此策略,我们需要获得与之前的 RVI 交叉 - 上升趋势策略相反的信号,即我们需要获得做空和回补信号。 当 RVI 当期值和 RVI 信号当期值低于零轴时,与此同时,RVI 当期值低于 RVI 信号当期值,这是一个做空信号。 反之亦然,若 RVI 当期值和 RVI 信号当期值高于零轴时,与此同时,RVI 当期值高于 RVI 信号当期值,这是一个回补信号。

简而言之,

RVI 值 < 0 且 RVI 信号值 < 0 且 RVI 值 < RVI 信号值 --> 做空 RVI 值 > 0 且 RVI 信号值 > 0 且 RVI 值 > RVI 信号值 --> 回补

策略三:RVI 和 MA 交叉:

基于此策略,我们需要根据特定条件获取买入和卖出信号,因为我们需要在收盘价大于 100 周期移动平均线的同时得到买入信号,与此同时,当期 RVI 值大于当期 RVI 信号值。 在另一种场景下,我们需要在收盘价低于 100 周期移动平均线时得到卖出信号,与此同时,当期 RVI 值低于当期 RVI 信号值。

简而言之,

收盘价 > 100 周期移动平均线,且 RVI 值 > RVI 信号值 --> 买入 收盘价 < 100 周期移动平均线,且 RVI 值 < RVI 信号值 --> 卖出

相对活力指数策略蓝图

在学习了如何在我们提到的策略里运用 RVI 之后,我们将为每个策略创建一个分步蓝图,来帮助我们顺利创建交易系统。

策略一: RVI 交叉 - 上行趋势:

根据此策略,我们需要创建一个交易系统,持续检查以下数值,并在上行趋势期间提供买入和平仓信号:

当期 RVI 值当期 RVI 信号值、RVI 指标的零轴

如果当期 RVI 值大于零轴,当期 RVI 信号值大于零轴,当期 RVI 值大于当期 RVI 信号值,我们要求交易系统返回以下值作为图表上的注释:

买入信号相对活力指数值RVI 信号值

在另一种场景下,如果当期 RVI 值低于零轴,当期 RVI 信号值低于零轴,当期 RVI 值低于当期 RVI 信号值,我们要求交易系统返回以下值作为图表上的注释:

平仓信号相对活力指数值RVI 信号值

以下是此策略的分步蓝图:

策略二: RVI 交叉 - 下行趋势:

根据这个策略,我们需要创建一个交易系统,不断检查前一个策略的相同值,可以在下行趋势中为我们提供做空和回补信号:

当期 RVI 值当期 RVI 信号值、RVI 指标的零轴

但条件会根据所需的信号,略有不同。 如果当期 RVI 值低于零轴,当期 RVI 信号值同时低于零轴,RVI 值低于 RVI 信号值,我们要求交易系统返回以下值作为图表上的注释:

做空信号相对活力指数值RVI 信号值

另一方面,如果当期 RVI 值高于零轴,则当期 RVI 信号值高于零轴,RVI 值高于 RVI 信号值,我们要求交易系统返回以下值作为图表上的注释:

回补相对活力指数值RVI 信号值

以下是该交易系统的蓝图:

策略三:RVI & MA 交叉:

根据此策略,我们需要创建一个交易系统,持续检查以下值来提供买入和卖出信号:

收盘格100-周期移动平均 (MA)当期 RVI 值当期 RVI 信号值、

如果收盘价高于 100 周期 MA,且当期 RVI 值高于当期 RVI 信号值,我们要求交易系统返回以下值作为图表上的注释:

买入信号收盘价MA 值相对活力指数值RVI 信号值

另一方面,如果收盘价低于 100 周期 MA,且当期 RVI 值低于当期 RVI 信号值,我们要求交易系统返回以下值作为图表上的注释:

卖出信号收盘价MA 值相对活力指数值RVI 信号值

以下是此策略的蓝图:

相对活力指数交易系统

学习了如何在简单策略里运用 RVI,我们为每个策略创建了分步蓝图,来帮助我们创建交易系统。 现在,我们将为每个提到的策略创建一个交易系统。 首先,我们将创建一个简单交易系统,将当期 RVI 值作为图表上的注释返回,以下是逐步创建此交易系统的代码。

创建两个 double 数据类型的数组,存储 RVI 和 RVI 信号:

double rviArray[]; double rviSignalArray[];

调用 “ArraySetAsSeries” 函数设置数组排序为 AS_SERIES 标志,并返回一个布尔值 true 或 false:

ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true);

调用 iRVI” 函数,定义并返回 RVI 指标的句柄。 其参数为:

symbol: 确定品种名称,我们将采用(_Symbol) 即应用当前品种。period: 设置可用周期,我们将采用(_period)即应用当前时间帧。ma_period: 设置均线周期,我们将采用(10)。 int rviDef = iRVI(_Symbol,_Period,10);

调用 “CopyBuffer” 函数从 RVI 指标的缓冲区获取数据。 其参数为:

indicator_handle: 我们将采用(rviDef,rviDef)里的预定义指标句柄。buffer_num: 确定指标缓冲区编号,我们将采用(0,1)。start_pos: 确定起始位置,我们将采用(0,0)。count: 确定要复制的数量,我们将采用(3,3)。buffer[]: 确定要复制的目标数组,我们将采用(rviArray,rviSignalArray)。 CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray);

调用 “NormalizeDouble” 函数定义 RVI 和 RVI 信号的值,以便返回双精度类型的值。 其参数为:

value: 确定需规范化的数字。 我们将采用 (rviArray[0], rviSignalArray[0])。digits: 确定小数点后的位数。 我们将采用(3)。 double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

调用 “Comment” 函数返回当前 RVI 指标的值,作为图表上的注释。

Comment("Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal);

完整代码将如下所示:

//+------------------------------------------------------------------+ //| Simple RVI.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 rviArray[]; double rviSignalArray[]; ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true); int rviDef = iRVI(_Symbol,_Period,10); CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray); double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3); Comment("Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } //+------------------------------------------------------------------+

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

双击智能系统,在交易终端中执行它,我们将找到该智能系统的窗口,如下所示:

勾选“允许算法交易”后,按“确定”,我们会发现智能系统已加载到图表上,如下所示:

现在,我们已准备好获得基于此交易系统生成的信号。 因此,我们将得到与以下内容相同的信号:

正如我们在图表左上角所见,我们得到一条带有当期 RVI 值的注释。

策略一: RVI 交叉 - 上行趋势:

以下是基于该策略创建的交易系统的完整代码:

//+------------------------------------------------------------------+ //| RVI Crossover - Uptrend.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 rviArray[]; double rviSignalArray[]; ArraySetAsSeries(rviArray,true); ArraySetAsSeries(rviSignalArray,true); int rviDef = iRVI(_Symbol,_Period,10); CopyBuffer(rviDef,0,0,3,rviArray); CopyBuffer(rviDef,1,0,3,rviSignalArray); double rviVal = NormalizeDouble(rviArray[0],3); double rviSignalVal = NormalizeDouble(rviSignalArray[0],3); if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal) { Comment("Buy Signal","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); } if(rviValrviSignalVal) { Comment("Buy Signal","\n", "Relative Vigor Index Value is ",rviVal,"\n", "RVI Signal Value is ",rviSignalVal); }

平仓的情况

if(rviVal


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3