学习如何设计基于 RSI 的交易系统
概述
我想很多与交易界有接触的人都听过“趋势是您的朋友”这句话。 这意味着您应该顺应趋势,而不要逆势交易。 是的,有时我们可能在调整期间逆市交易,如果您不知道调整是什么,不要担心 — 我将在接下来的几行中解释它们和趋势。 我想让您知道的是,即便我们逆势交易,我们也必须小心谨慎,并严格管控风险,因为这类交易的风险巨大。
我们将在这里谈论行情中可能存在的趋势。 我曾在不同的文章中提过它们,这就是为什么我经常在不同的领域重复它们:
- 重要的是要辨别行情走势,因为我们将根据行情走势制定决策。
- 重复可以加深理解,并引发不同的见解,尤其是当上下文不同,和方式不同的情况下提及某件事时。
- 也许您第一次阅读我的文章,故此我打算对这篇特定文章的主题给出一个完整的看法。
有必要辨别行情方向或趋势。 在学习如何做到这一点之前,我们应该清楚地了解其中每一项的含义。
如果您观察行情,您会发现,根据价格走势,行情可能有三个不同的方向:上行、下行和横盘。 根据市场参与者,这些行情趋势中的每一个都有一个控制状态。
- 上行趋势:
在上行趋势中,买家在大部分时间内控制着市场,这令价格上涨。 因此,价格会以连创更高的低点和更高的高点来上行。
- 下行趋势:
在下行趋势中,卖家在大部分时间内控制着市场,这令价格下跌。 因此,价格会以连创更低的高点和更低的低点来下行。
- 横盘:
横盘期间,买卖双方之间主要保持平衡,没有任何一方能完全控制。 它是除了上行和下行趋势之外的任何走势。 下面是这些横盘走势的一些形式
在辨别出这些类型的趋势之后,我们应该了解更多关于趋势的信息:譬如趋势是强劲还是疲软,这可通过动量的概念来发掘。 动量这个概念可以衡量行情走势或趋势速度。 这个动量概念在交易和行情走势中非常重要。 有许多基于该概念的工具。 在本文中,我们将研究其中之一,它是一款最常用的指标 — RSI(相对强度指数)。 我们将见识到如何轻松有效地借助这个有用的工具来创建一款针对 RSI 策略的交易系统。 在本文中,我们将研究以下主题:
通过这些主题,我们将学到大量有关该工具的有用内容。 我们将看到 RSI 是什么,以及它是如何计算的。 RSI 定义部分将研究有关指标概念的一些见解和新思路。 然后,我们将研究一些对于交易有用的 RSI 策略。 在 RSI 蓝图部分,我们将学习上述 RSI 策略的蓝图,以便为编程做好准备,并辨别程序应该做什么。最后,我们将看到如何编写基于 RSI 的程序,从而帮助我们轻松有效地进行交易,并帮助我们改进交易决策。
贯穿于本文和所有其它文章,我们利用 MetaTrader 5 交易平台和 MetaQuotes 语言编辑器 MetaEditor,MetaEditor 内置于 MetaTrader 5 当中 — 所有程序代码都将需用此编辑器来编写。
您可以从以下链接下载 MetaTrader 5:https://www.metatrader5.com/zh/download
有关如何操作的更多信息,请参阅我上一篇文章:学习为什么以及如何设计算法交易系统
免责声明:本文的所有内容仅用于教学目的,未针对其它目的。 因此,您需对基于本文内容采取的任何行动自行负责,因为本文内容并未承诺任何结果。
现在,我们来阅读这篇有趣的文章,从而理解并构建的另一个新的模块,延续我们的交易成功之旅。
RSI 定义
RSI — 相对强度指数 — 由威尔斯·怀尔德创建的一个指标。 这一指标的主要目标是基于历史来衡量一种金融产品现在的强度。 为了做到这一点,该指标会比较上涨日和下跌日的价格变化。
RSI 指标是一种动量,因为它显示了行情向上或向下走势的速度,是一种振荡器,因为它是有界的,并且在 0 到 100 水平之间振荡,是一种领先指标,因为它可以领先价格,并在其发生之前显示出潜在的走势。 RSI 设计旨在克服动量指标中的两个问题,即,吸收突发或极端走势的能力,以及它界定在 0 到 100 范围内的能力。
RSI 可能很有用,如下显示:
- 仅靠图表无法看到的潜在走势。
- 清晰的支撑和阻力水平。
- 背离信号,通过 RSI 和价格之间的发散来指示逆转。
- 在 70 以上和 30 以下是超买超卖区,警告潜在的逆转。
RSI 指标的计算和构建通过以下步骤来实现:
- 提取 14 个收盘价的阳线或向上走势
- 提取 14 个收盘价的阴线或向下走势
- 14 个阳势的平均值 = 阳势总次数/14
- 14 个阴势的平均值 = 阴势总次数/14
- RS = 14 个阳势的平均值 / 14 个阴势的平均值
- RSI = 100 - [100 /(1+RS)]
我们举个例子来理解如何做到这一点。
- 假设我们有 14 天的收盘数据,如下所示:
天数 | 价格 |
---|---|
1 | 100 |
2 | 105 |
3 | 120 |
4 | 110 |
5 | 100 |
6 | 115 |
7 | 120 |
8 | 130 |
9 | 125 |
10 | 135 |
11 | 140 |
12 | 130 |
13 | 140 |
14 | 145 |
因此,如果我们需要计算 RSI,它将如下所示:
首先,我们依据前边的每天数据里计算阳性和阴性走势:天数 | 价格 | 阳性走势 | 阴性走势 |
---|---|---|---|
1 | 100 | 0 | 0 |
2 | 105 | 5 | 0 |
3 | 120 | 15 | 0 |
4 | 110 | 0 | 10 |
5 | 100 | 0 | 10 |
6 | 115 | 15 | 0 |
7 | 120 | 5 | 0 |
8 | 130 | 10 | 0 |
9 | 125 | 0 | 5 |
10 | 135 | 10 | 0 |
11 | 140 | 5 | 0 |
12 | 130 | 0 | 10 |
13 | 140 | 10 | 0 |
14 | 145 | 5 | 0 |
- 阳势总和 = 80
- 阴势总和 = 35
- 14 个阳势的平均值 = 阳势总和 / 14
- 14 个阳势的平均值 = 80 / 14 = 5.7
- 14 个阴势的平均值 = 阴势总和 / 14
- 14 个阴势的平均值 = 35 / 14 = 2.5
- 然后,我们将计算 RS:
- RS = 14 个阳势的平均值 / 14 个阴势的平均值
- RS = 5.7 / 2.5 = 2.29
- 然后,我们再计算 RSI:
- RSI = 100 - [100 / (1 + RS)]
- RSI = 100 - [100 / (1 + 2.29)] = 69.57
- 获取下一个平均走势:
- 下一次阳势均值 = [{(前一次阳势均值 * 13) + 今天的阳势 (如果存在)}/14]
- 下一次阴势均值 = [{(前一次阴势均值 * 13) + 今天的阴势 (如果存在)}/14]
- 得到 RS:
- RS = 下一个 14 个阳势的平均值 / 下一个 14 个阴势的平均值
- 得到 RSI:
- RSI = 100 - [ 100 / (1+ RS)]
- RSI 周期
- 计算指标所依据的价格类型
- RSI 指标线的颜色
- RSI 指标线的线型
- RSI 指标线的粗细
- 0 级: 指标范围的最低值,指标可能的极限值。
- 100 级: 指标范围的最高值,指标可能的极限值。
- 30 级: 超卖区域。
- 70 级: 超买区域。
- RSI 值 < 50 = 做多
- RSI 值 > 70 = 获利了结
- RSI 值 > 50 = 做空
- RSI 值 < 30 = 获利了结
- 横盘期间
- RSI 值 < 30 = 做多
- RSI 值 > 50 = 获利了结
- RSI 值 > 70 = 做空
- RSI 值 < 50 = 获利了结
- RSI 上行趋势策略:
- RSI 下行趋势策略:
- RSI 横盘策略:
然后,我们将计算 14 个阳势和阴势的平均值:
那么,最终结果如下:
前面的所有步骤计算出首个 RSI 值。 以下步骤计算首个值之后的 RSI:
因此,RSI 是经由上述步骤计算得出的。 然而,您不必亲自手动计算,这里提供的计算细节只是为了帮助您理解 RSI 的构造。 对于如何利用信息技术在交易中获得更好结果这个目标,您也许能据其提供更有效的见解。 MetaTrader 5 平台提供了一个内置的现成 RSI 指标,故您无需再计算它。 取而代之,您可以在图表上运行该指标,立即开始使用它。 下图示意了如何执行此操作。
遵循 Meta Trader 5 交易终端中的几个步骤:
从振荡器列表中选择相对强度指数(RSI)后,将出现以下指标参数窗口:
选择首选参数,并单击“确定”。 在图表上显示 RSI 指标,如下所示:
RSI 指标显示在主图表下方的单独窗口之中。 该窗口有四个价格级别,代表以下内容:
还有一个默认情况下不显示的级别:它就是范围的中间级别,等于 50。
RSI 策略
在这一部分中,我们将看到如何运用相对强度指数(RSI)指标。 为此,我们将采用一种简单的策略,根据不同的行情方向而有所区别。
我们将看到如何在上行、下行和横盘期间运用 RSI。 具体用法与超买、中位和超卖区域直接相关。 首先,我们需要了解 RSI 在不同趋势或走势中的变化,因为我们可以清楚地看到,RSI 在每个趋势或走势中的变化是有区别的。 然后,我们将采用一个简单的策略,它可运用在每一次趋势当中 — 主要目标是学习如何使用它,并提供新的见解,令我们大开眼界,进而对交易产生有益的新思路。 在这一部分中,我们将看到 RSI 对于每种趋势或走势类型的反应。 不过,请注意,这些策略仅供参考,它只是用以讲述 RSI 如何运用在分析行情数据。 您应该时常测试您打算在交易中采用的每一种策略,因为有些策略可能不适合您的交易风格,尤其是这些策略最初只是出于教学目的。
在这种情况下,大部分时间 RSI 值在中档和 70 级(超买水平)之间移动。
上行趋势的交易策略是:
在下升趋势期间,RSI 大部分时间在中档和 30 级(超卖区域)之间移动。
下行趋势的交易策略是:
RSI 大部分时间都在 30-70 级(超卖~超买)之间徘徊。
下行趋势的交易策略是:
RSI 蓝图
本主题展示的是基于 RSI 的策略进行交易时应发给计算机的指令。
我们已经研究了可在交易系统里实施的 4 种策略:RSI 上行、下行降策略、横盘策略(做多、做空)。 以下蓝图展示了每种策略的说明。
我认为它们已经足够清楚了。 现在我们已为要在交易系统中实施的每个策略准备好了蓝图,我们可以继续编写程序了。 我们进入本文的下一部分,并创建交易系统代码。
RSI 交易系统
现在,我们来看看如何根据上述 RSI 交易策略编写交易系统的代码。 首先,打开 MetaTrader 5 交易终端,然后打开 IDE(MetaQuotes 语言编辑器)编写代码,方法是按 F4 键,或按照下图所示的步骤操作:
或者,您也可以单击 MetaTrader 5 工具栏上的 IDE 按钮:
新打开的 MetaEditor IDE 中将显示以下窗口:
创建一个新文件,您将在其中编写交易系统的代码:
选择第一个选项来创建新的智能交易系统文件。 如果您打算了解更多关于其它选项的信息,可以阅读我之前的文章:学习为什么以及如何设计算法交易系统
首先,我愿分享一款简单的基于 RSI 的智能交易系统,在图表上针对 RSI 值加以注释,从而了解如何设计简单的纯 RSI 系统:
//+------------------------------------------------------------------+ //| Simple RSI 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" //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //Creating array for prices double RSIArray[]; //Identying RSI properties int RSIDef = iRSI(_Symbol, _Period, 14, PRICE_CLOSE); //Sorting prices array ArraySetAsSeries(RSIArray,true); //Identifying EA CopyBuffer(RSIDef,0,0,1,RSIArray); //Calculating EA double RSIValue = NormalizeDouble(RSIArray[0],2); //comment with RSI value on the chart Comment("RSI Value is ",RSIValue); } //+------------------------------------------------------------------+
此处是我们如何执行所创建程序:
双击该文件或将其拖放到图表上,然后会弹出以下窗口:
单击“确定”,程序就会在图表上启动:
- RSI 上行趋势策略:
此处是代码:
//+------------------------------------------------------------------+ //| RSI - 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" //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //Creating array for prices double RSIArray[]; //Identying RSI properties int RSIDef = iRSI(_Symbol, _Period, 14, PRICE_CLOSE); //Sorting prices array ArraySetAsSeries(RSIArray,true); //Identifying EA CopyBuffer(RSIDef,0,0,1,RSIArray); //Calculating EA double RSIValue = NormalizeDouble(RSIArray[0],2); //Creating signal according to RSI if(RSIValue<50) Comment ("Uptrend - BUY"); if(RSIValue>70) Comment ("Uptrend - TAKE PROFIT"); } //+------------------------------------------------------------------+
从导航器窗口选择该程序在图表上运行,如下所示。 确保没有错误或警告:
双击文件或拖放到图表上,在程序窗口中单击“确定”,程序就会在图表上启动:
程序信号如下:
- 做多信号:
- 获利了结信号:
- RSI 下行趋势策略:
代码如下:
//+------------------------------------------------------------------+ //| RSI - 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" //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //Creating array for prices double RSIArray[]; //Identying RSI properties int RSIDef = iRSI(_Symbol, _Period, 14, PRICE_CLOSE); //Sorting prices array ArraySetAsSeries(RSIArray,true); //Identifying EA CopyBuffer(RSIDef,0,0,1,RSIArray); //Calculating EA double RSIValue = NormalizeDouble(RSIArray[0],2); //Creating signal according to RSI if(RSIValue>50) Comment ("Downtrend - SHORT"); if(RSIValue<30) Comment ("Downtrend - TAKE PROFIT"); } //+------------------------------------------------------------------+
从导航器窗口选择该程序在图表上运行,如下所示。 确保没有错误或警告:
双击文件或拖放到图表上,在程序窗口中单击“确定”,程序就会在图表上启动:
运行中的程序将生成如下所示的信号:
- 做空信号:
- 获利了结信号:
- RSI 横盘策略:
下面是该策略的代码。 为了更好地理解,我将把策略分为两个独立的代码段和程序:一个是做多信号及其获利了结;另一个是做空信号及其获利了结;以及两种行为在横盘期间的代码:
- 做多信号
//+------------------------------------------------------------------+ //| RSI - Sideways Strategy - Buy.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" //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //Creating array for prices double RSIArray[]; //Identying RSI properties int RSIDef = iRSI(_Symbol, _Period, 14, PRICE_CLOSE); //Sorting prices array ArraySetAsSeries(RSIArray,true); //Identifying EA CopyBuffer(RSIDef,0,0,1,RSIArray); //Calculating EA double RSIValue = NormalizeDouble(RSIArray[0],2); //Creating signal according to RSI if(RSIValue<30) Comment ("Sideways - BUY"); if(RSIValue>50) Comment ("Sideways - TAKE PROFIT"); } //+------------------------------------------------------------------+
从导航器窗口选择该程序在图表上运行,如下所示。 确保没有错误或警告:
双击文件或拖放到图表上,在程序窗口中单击“确定”,程序就会在图表上启动:
启动执行后,程序信号将与下图所示相同:
- 做多信号:
- 获利了结信号:
- 做空信号
//+------------------------------------------------------------------+ //| RSI - Sideways Strategy - Short.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" //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //Creating array for prices double RSIArray[]; //Identying RSI properties int RSIDef = iRSI(_Symbol, _Period, 14, PRICE_CLOSE); //Sorting prices array ArraySetAsSeries(RSIArray,true); //Identifying EA CopyBuffer(RSIDef,0,0,1,RSIArray); //Calculating EA double RSIValue = NormalizeDouble(RSIArray[0],2); //Creating signal according to RSI if(RSIValue>70) Comment ("Sideways - SHORT"); if(RSIValue<50) Comment ("Sideways - TAKE PROFIT"); } //+------------------------------------------------------------------+
从导航器窗口选择该程序在图表上运行,如下所示。 确保没有错误或警告:
双击文件或拖放到图表上,在程序窗口中单击“确定”,程序就会在图表上启动:
运行中的程序将生成如下所示的信号:
- 做空信号:
- 获利了结信号:
这一切都是有关我们如何创建和使用基于相对强度指数(RSI)的简单策略,相对强度指数是交易中最常用的指标之一。 我们已经看到了如何将其用于不同的行情走势或趋势。
我想再次确认的是,本文仅用于教学目的,其主要目标是解释这些有用的工具。 如果您需要借鉴本文中的任何内容进行交易,请确保在使用之前对其进行相应的测试,因为任何行为都要符合您的交易策略或计划,它可能对某人有用,但对您可能没有用处。
结束语
在本文中,我尝试与您分享交易和技术分析中最强大的工具之一,即 RSI。 我们已经看到,其依赖于动量的概念,动量是行情走势和交易中最重要的概念之一。 我尝试讲解 RSI 的结构和计算细节,只是为了让您了解如何以合适、有效和有益的方式运用该指标。
此外,我还分享了一个可以在交易中使用的简单策略,以及辨别如何在不同的行情走势和趋势中运用该策略。 所以,现在您已知晓如何在上行、下行和横盘中运用它了。 有众多策略可以有效使用,在交易中也很有用,所以我希望您继续阅读和学习这个 RSI 指标,以及其它指标。
我们还学习了如何基于这些策略编写交易系统代码。 MQL5 和编程通常助力于有效、准确和便捷地运用各种交易和分析工具,并帮助我们平顺地生活,实现均衡的生活。
我建议您尝试编写代码,并在其中应用从本文中学到的知识。 这样的练习可以加强您对所学知识的理解和认知,并可能激发您更多的见解和新思路。 我希望这篇文章对您有所帮助,并且其中的一些想法能帮助您在交易中取得更佳的结果。
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/10528