Python 交易指南:利用 RSI

news2025/1/22 23:40:14

一、说明

        RSI是相对强弱指数(Relative Strength Index)的缩写,是一种技术指标。该指标是用来测量股票或其他交易品种的价格波动强度和速度的,属于动量型指标。RSI常用于技术分析和交易策略中,可以帮助交易者判断市场的买卖力量、价格趋势和超买超卖状况,从而制定有效的交易决策。

二、RSI 概念和特征

        相对强弱指数(RSI)是衡量价格变动速度和变化的动量振荡器。它可以帮助交易者识别市场中的超买或超卖情况,表明潜在的价格反转。

        动量是指价格在特定方向上变动的强度和速度。它基于以下原则:向某个方向移动的资产倾向于继续向该方向移动,直到发生重大变化。

        动量振荡器是用于衡量价格变动动量和识别潜在趋势反转的技术指标。它们为交易者提供有关价格变化的速度和幅度的信息,表明资产是超买还是超卖。

        动量振荡器通常在定义的上限和下限或阈值之间波动。这些阈值用于确定超买和超卖水平。当振荡器达到上限时,表明该资产可能超买,需要进行价格修正或反转。相反,当振荡器达到下边界时,它表明资产可能超卖,并且由于潜在的价格上涨或逆转。

        RSI 是根据指定时间段(通常为 14 个周期)的平均收益和损失计算的。

RSI 通常用作确定特定资产是超买还是超卖的信号。如果 RSI 值超过 70,则表明该资产超买,表明潜在的卖出信号。相反,如果 RSI 值跌破 30,则表明该资产超卖,表明存在潜在的买入信号。

三、让我们在 Python 中实现 RSI 

        首先,让我们使用库在一小时内提取过去两年的特斯拉股价。yfinance

import yfinance as yf
from datetime import datetime, timedelta

ticker = "TSLA"

end_date = datetime.today().strftime('%Y-%m-%d')
start_date = (datetime.today() - timedelta(days=700)).strftime('%Y-%m-%d')

data = yf.download(ticker, start=start_date, end=end_date, interval='1h')

data is a Pandas DataFrame.

data.head()

        我们可以使用该库来绘制烛台图。它提供了一个方便的界面,用于在 Python mplfinance 中创建财务图表

import mplfinance as mpf

mpf.plot(data, type='candle', volume=True, style='yahoo')
特斯拉股价烛台图。图片由作者提供。

        要使用提取的特斯拉股价计算 RSI(相对强弱指数),我们可以利用该库,该库提供各种技术分析指标。您可以在此处阅读库的文档。ta

pip install ta

import ta

data['RSI'] = ta.momentum.RSIIndicator(data['Close']).rsi()
import matplotlib.pyplot as plt

upper_limit = 70
lower_limit = 30

plt.figure(figsize=(10, 6))
plt.plot(data.index, data['RSI'])
plt.axhline(y=upper_limit, color='r', linestyle='--', label='Overbought (70)')
plt.axhline(y=lower_limit, color='g', linestyle='--', label='Oversold (30)')
plt.title('RSI of Tesla Stock')
plt.xlabel('Date')
plt.ylabel('RSI')
plt.legend()
plt.grid(True)
plt.show()
特斯拉股票图表的RSI。图片由作者提供。

class close: pandas.core.series.Series, window: int = 14, fillna: bool = Falseta.momentum.RSIIndicator)

四、基于RSI的模拟

        让我们继续开发一个简单的买卖模拟,其中决策过程基于 RSI 指标的水平。

# Define the initial capital and track the current capital
initial_capital = 100
current_capital = initial_capital

# Define the overbought and oversold limits
overbought_limit = 70
oversold_limit = 30

# Define the initial holding status
is_holding = False

# Iterate through the RSI data and make buy/sell decisions
for i in range(1, len(data)):
    current_rsi = data['RSI'][i]
    current_price = data['Close'][i]

    if current_rsi < oversold_limit and not is_holding:
        # Buy condition
        shares_to_buy = current_capital / current_price
        current_capital = 0
        is_holding = True
        print(f"Buy {shares_to_buy} shares at {current_price} -> Rsi Level: {current_rsi}")

    elif current_rsi > overbought_limit and is_holding:
        # Sell condition
        current_capital = current_capital + (current_price * shares_to_buy)
        is_holding = False
        print(f"Sell {shares_to_buy} shares at {current_price} -> Rsi Level: {current_rsi}")

# Print the final capital
print(f"Final capital: ${current_capital}")

"""
Buy 0.4179246675736921 shares at 239.27757263183594 -> Rsi Level: 20.438411371337622
Sell 0.4179246675736921 shares at 255.51002502441406 -> Rsi Level: 73.06501350257133
Buy 0.29318660443911904 shares at 364.2183532714844 -> Rsi Level: 21.068814167529595
Sell 0.29318660443911904 shares at 379.25 -> Rsi Level: 73.41888447060789
Buy 0.32491093254899217 shares at 342.2200012207031 -> Rsi Level: 28.858062677990233
Sell 0.32491093254899217 shares at 336.93499755859375 -> Rsi Level: 75.20791184591683
Buy 0.31522318975955993 shares at 347.2900085449219 -> Rsi Level: 29.746993287658356
Sell 0.31522318975955993 shares at 289.4800109863281 -> Rsi Level: 71.37862844420539
Buy 0.35377445208463354 shares at 257.93499755859375 -> Rsi Level: 29.772071247456054
Sell 0.35377445208463354 shares at 290.6433410644531 -> Rsi Level: 70.21919190004444
Buy 0.29858345212367027 shares at 344.3666687011719 -> Rsi Level: 29.536900207208518
Sell 0.29858345212367027 shares at 249.22999572753906 -> Rsi Level: 71.8881356308825
Buy 0.3437808677391333 shares at 216.4633331298828 -> Rsi Level: 26.68961190834922
Sell 0.3437808677391333 shares at 241.20948791503906 -> Rsi Level: 70.19284733253295
Buy 0.3673613408605083 shares at 225.72654724121094 -> Rsi Level: 27.518762067733604
Sell 0.3673613408605083 shares at 243.37489318847656 -> Rsi Level: 70.28410255957843
Buy 0.3106414061007942 shares at 287.8126525878906 -> Rsi Level: 27.98065596331672
Sell 0.3106414061007942 shares at 296.7300109863281 -> Rsi Level: 75.46276500115341
Buy 0.3146013733382365 shares at 292.9949951171875 -> Rsi Level: 28.658808113058043
Sell 0.3146013733382365 shares at 194.70750427246094 -> Rsi Level: 71.7396674122882
Buy 0.35403564172219 shares at 173.02000427246094 -> Rsi Level: 29.771767028843456
Sell 0.35403564172219 shares at 129.5399932861328 -> Rsi Level: 70.25768896760097
Buy 0.24320177857052705 shares at 188.5749969482422 -> Rsi Level: 28.61856076775159
Sell 0.24320177857052705 shares at 193.75999450683594 -> Rsi Level: 71.66246679110026
Buy 0.26485879610225227 shares at 177.91659545898438 -> Rsi Level: 24.541752420541684
Sell 0.26485879610225227 shares at 170.13180541992188 -> Rsi Level: 70.36655102514713
Final capital: $45.06090516222314
"""

        我们从100美元的初始资本开始,经历了65美元的损失。

        交易者经常使用 RSI 作为识别市场潜在进入和退出点的工具。重要的是要注意,RSI应与其他技术分析工具和风险管理策略结合使用,以做出明智的交易决策。

用公式解释相对强弱指数 (RSI) 指标 (investopedia.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/996464.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA 的四种访问权限

在Java编程中&#xff0c;访问权限是非常重要的概念&#xff0c;因为它可以保证代码的安全性和封装性。访问权限有四种&#xff0c;分别是public、protected、default和private。 private&#xff1a;如果一个类的方法或者变量被private修饰&#xff0c;那么这个类的方法或者变…

程序执行的四个阶段

程序执行的四个阶段 对于一段helloc.c的程序 #include <stdio.h>int main() {printf("hello, world\n");return 0; }为了在系统上运行程序&#xff0c;每条C语句都必须被其他程序转化为一系列的低级机器语言指令。然后这些指令按照一种称为可执行目标程序的格…

网络层--IP协议

引入&#xff1a; IP协议主要解决什么问题呢&#xff1f; IP协议提供一种将数据从主机&#xff21; 发送到 主机&#xff22;的能力。&#xff08;有能力不一定能做到&#xff0c;比如小明很聪明&#xff0c;可以考100分&#xff0c;但是他也不是每次搜能考100分&#xff0…

持安科技入选数说安全《2023中国网络安全市场年度报告》

近日&#xff0c;网络安全产业研究平台数说安全发布《2023中国网络安全市场年度报告》&#xff0c;报告共分为158页核心报告&#xff0c;及番外篇《网安融资新星及融资过亿企业介绍》&#xff0c;作为以甲方身份创业的零信任办公安全明星企业&#xff0c;持安科技以网安融资新星…

【leetcode 力扣刷题】重复叠加字符串匹配

重复叠加字符串匹配 686. 重复叠加字符串匹配 686. 重复叠加字符串匹配 题目链接&#xff1a;686. 重复叠加字符串匹配 题目内容&#xff1a; 理解题意&#xff0c;可以发现题目还是要求我们做字符串匹配。只是查询串不是简单的a&#xff0c;而是a的叠加&#xff0c;并且这个…

国外LEAD收款渠道介绍:Wise收款教程

在国内做国外的Affiliate marketing&#xff0c;收款还是有些麻烦的。以前用Payoneer挺方便&#xff0c;包括clickbank&#xff0c;amazon等联盟都挺顺利的回款&#xff0c;不过自从Digitalstore24的一笔联盟款发送之后&#xff0c;没有到账&#xff0c;然后就收到款项需要审核…

windows下安装redis扩展库

1.根据PHP版本号&#xff0c;编译器版本号和CPU架构 选择php_redis和php_igbinary文件(如果是选择线程的情况下需要再去配置php5ts.dll) windows.php.net - /downloads/pecl/releases/redis/ windows.php.net - /downloads/pecl/releases/igbinary/ php_igbinary-3.1.2-7.2-…

webgl与webgpu比较

绘制流程 webgl无论是操作着色器&#xff0c;还是操作 VBO&#xff0c;亦或者是创建一些 Buffer、Texture 对象&#xff0c;基本上都得通过 gl 变量一条一条函数地走过程&#xff0c;顺序是非常讲究的。每一次调用 gl.xxx 时&#xff0c;都会完成 CPU 到 GPU 的信号传递&#…

【LeetCode】210. 课程表 II——拓扑排序

题目链接&#xff1a;210. 课程表 II 题目描述&#xff1a; 现在你总共有 numCourses 门课需要选&#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites &#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示在选修课程 ai 前 必须 先选修 bi 。 例如…

CAPL自动化测试通信电压

通信电压 1、系统框架2、控制电压模块3、检查通信是否正常4、检查电压标准5、CAPL 控制VH1160的函数 分三个模块 控制电源模块&#xff0c;分析通信是否正常模块&#xff0c;判断电压是否符合标准。 1、系统框架 应该分为三大模块&#xff1a;控制电压模块&#xff0c;检查通…

国内 Docker 镜像加速器和国内公共镜像仓库那些事

前言 首先我们知道&#xff0c;全球最大的公共镜像仓库是 Docker 公司自己搭建的 Docker Hub&#xff0c;也是权威性最高的&#xff0c;里面包含了各种各样的官方镜像&#xff0c;Docker Hub 为每一个注册用户提供了个人镜像仓库服务&#xff0c;该个人镜像仓库是公共的。 以上…

如何用echarts画一个好看的饼图

前言 最近有个需求&#xff0c;需要绘制一个饼图&#xff0c;为此我根据这次需求来整理了一下关于 echarts 饼图绘制的一些知识点&#xff0c;在这次需求中我需要用到的属性我会详细讲解&#xff0c;其他的属性我会粗略地说一下&#xff08;并加入其他博主的文章的跳转&#x…

【C++杂货铺】探索stack和queue的底层实现

文章目录 一、stack的介绍和使用1.1 stack的介绍1.2 stack的使用1.2.1 最小栈1.2.2 栈的压入、弹出序列1.2.3 逆波兰表达式求值1.2.4 用栈实现队列 二、queue的介绍和使用2.1 queue的介绍2.2 queue的使用2.2.1 二叉树的层序遍历 三、模拟实现3.1 stack模拟实现3.2 queue模拟实现…

数分面试题2-牛客

1、面对大方差如何解决 1&#xff0c;AB实验场景下&#xff0c;如果一个指标的方差较大表示它的波动较大&#xff0c;那么实验组和对照组的显著差异可能是因为方差较大即随机波动较大。解决方法有&#xff1a;PSM方法、CUPED(方差缩减) PSM代表"Propensity Score Matchin…

【C进阶】分析 C/C++程序的内存开辟与柔性数组(内有干货)

前言&#xff1a; 本文是对于动态内存管理知识后续的补充&#xff0c;以及加深对其的理解。对于动态内存管理涉及的大部分知识在这篇文章中 ---- 【C进阶】 动态内存管理_Dream_Chaser&#xff5e;的博客-CSDN博客 本文涉及的知识内容主要在两方面&#xff1a; 简单解析C/C程序…

CSS宽度问题

一、魔法 为 DOM 设置宽度有哪些方式呢&#xff1f;最常用的是配置width属性&#xff0c;width属性在配置时&#xff0c;也有多种方式&#xff1a; widthmin-widthmax-width 通常当配置了 width 时&#xff0c;不会再配置min-width max-width&#xff0c;如果将这三者混合使…

【数据结构】——排序的相关习题

目录 一、选择填空判断题题型一&#xff08;插入排序——直接插入排序&#xff09;题型二&#xff08;插入排序——折半插入排序&#xff09;题型三&#xff08;插入排序——希尔排序&#xff09;题型四&#xff08;交换排序——冒泡排序&#xff09;题型五&#xff08;交换排序…

Java注解以及自定义注解

Java注解以及自定义注解 要深入学习注解&#xff0c;我们就必须能定义自己的注解&#xff0c;并使用注解&#xff0c;在定义自己的注解之前&#xff0c;我们就必须要了解Java为 我们提供的元注解和相关定义注解的语法。 1、注解 1.1 注解的官方定义 注解是一种元数据形式。…

OLED透明屏导航:驾驶安全的未来趋势

在不断发展的科技领域中&#xff0c;OLED透明屏技术的出现为导航系统带来了革命性的变革。 今天&#xff0c;尼伽将深入探讨OLED透明屏导航的技术原理和应用前景&#xff0c;展示其在驾驶安全方面的优势&#xff0c;并引用最新的数据、报告和行业动态&#xff0c;以增加可信度…

无涯教程-JavaScript - CUMIPMT函数

描述 CUMIPMT函数返回start_period和end_period之间的贷款累计利息。 语法 CUMIPMT (rate, nper, pv, start_period, end_period, type)争论 Argument描述Required/OptionalRateThe interest rate.RequiredNperThe total number of payment periods.RequiredPvThe present …