
学习如何设计基于 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
注意: MetaQuotes Ltd.将保留所有关于这些材料的权利。全部或部分复制或者转载这些材料将被禁止。
This article was written by a user of the site and reflects their personal views. MetaQuotes Ltd is not responsible for the accuracy of the information presented, nor for any consequences resulting from the use of the solutions, strategies or recommendations described.



我支持。MQL5 管理部门毫无意义地浪费金钱。谁会读这些文章?
信息量很大,感谢分享。