【金融数据分析】用Python和TA-Lib计算技术指标

TA-Lib,全称Technical Analysis Library,是一个开源的技术分析库,旨在为金融市场分析提供技术分析工具和指标。TA-Lib提供了大量用于计算各种技术指标的函数和方法,可以用于股票、期货、外汇等金融市场的技术分析。TA-Lib包括了大约150多个不同的技术指标,涵盖了趋势分析、波动性分析、动能指标、周期分析等多个领域。这些指标可以帮助分析师和交易员理解市场的价格和交易量动态。

1. 使用TA-Lib计算均线指标

均线指标(Moving Average,简称MA)是一种常用于金融市场技术分析的指标,用于平滑价格数据并帮助分析价格趋势的工具。均线是根据一定时期内的价格数据计算出的移动平均值,这种平均值随着时间的推移而不断更新,以反映价格的变化趋势。用TA-Lib计算其均线指标并可视化的代码如下:

# Python代码
#准备数据的代码,已经用过多次
#这里不再逐行注释
df = pd.read_excel('历史行情数据.xlsx')
df = df[['日期', '收盘']]
df['日期'] = pd.to_datetime(df['日期'])
df.set_index('日期', inplace = True)
#导入TA-Lib
import talib

# 计算均线指标
df['SMA_10'] = talib.SMA(df['收盘'], timeperiod=10)
df['SMA_20'] = talib.SMA(df['收盘'], timeperiod=20)

# 绘制均线图
plt.figure(dpi=300)
plt.plot(df.index, df['收盘'], label='收盘价', color='b')
plt.plot(df.index, df['SMA_10'], label='10日均线', color='g')
plt.plot(df.index, df['SMA_20'], label='20日均线', color='r')
plt.legend()
plt.title('均线指标图')
plt.xlabel('日期')
plt.ylabel('价格')
plt.savefig('图5-1.jpg', dpi=300)
plt.show()

运行这段代码,会得到如图所示的结果。
在这里插入图片描述
上面代码的作用是将DataFrame中的收盘价数据经过10日和20日简单移动平均SMA指标计算后的结果存储在新的“SMA_10”、“SMA_20”两列中。这两个个新列将包含股票价格的10日和20日简单移动平均值。同样,大家可以使用相似的代码来计算不同时间段的移动平均指标,然后将它们添加到DataFrame中以进行后续的分析和可视化。

2. 使用TA-Lib计算布林带

布林带(Bollinger Bands)是一种技术分析工具,用于衡量资产价格的波动性以及潜在的趋势反转或继续。它由三条线组成,通常包括以下部分:

  1. 中轨(中线):中轨是一条中间的线,通常表示资产的移动平均线,最常见的是简单移动平均线(SMA)。中轨用于描述资产价格的趋势方向,如上升或下降趋势。
  2. 上轨(上线):上轨是中轨的上方线,通常是中轨加上一定的标准差倍数。这个标准差倍数通常是2,表示资产价格的上限。上轨可以用来指示价格上涨可能逐渐趋于超买状态,可能出现价格回调。
  3. 下轨(下线):下轨是中轨的下方线,通常是中轨减去一定的标准差倍数。这个标准差倍数通常也是2,表示资产价格的下限。下轨可以用来指示价格下降可能逐渐趋于超卖状态,可能出现价格反弹。
    布林带的主要作用是帮助交易者识别资产价格的波动性和潜在的趋势反转点。当资产价格触及上轨时,可能表示价格较高,进一步上升的可能性降低,可能会有价格回调。当价格触及下轨时,可能表示价格较低,进一步下降的可能性降低,可能会有价格反弹。
    交易者可以根据布林带和其他指标结合起来制定买入或卖出策略。这种指标在金融市场中广泛使用,用于技术分析和制定交易策略。
    用TA-Lib计算其布林带,并进行可视化的代码:
# Python代码
# 使用 TA-Lib 计算布林带
# 20表示计算20日的布林带
upper_band, middle_band, lower_band = talib.BBANDS(df['收盘'], timeperiod=20)

# 可视化布林带
plt.figure(dpi=300)
plt.plot(df.index, df['收盘'], label='收盘价', color='b')
plt.plot(df.index, upper_band, label='布林带上下轨', color='r', linestyle='--')
plt.plot(df.index, middle_band, label='布林带中轨', color='g')
plt.plot(df.index, lower_band, color='r', linestyle='--')

plt.title('布林带示例')
plt.xlabel('日期')
plt.ylabel('价格')
plt.legend()
plt.savefig('图5-2.jpg', dpi=300)
plt.show()

运行这段代码,会得到如图所示的结果。
在这里插入图片描述
在这个示例中,我们使用 talib.BBANDS 计算布林带的上轨、中轨和下轨。然后使用Matplotlib可视化这些线条,其中虚线表示上下轨,平滑的实线表示中轨。大家可以根据需要修改示例数据或布林带参数。
要特别说明的是,要修改TA-Lib中talib.BBANDS函数的标准差参数,你可以在调用函数时设置nbdevup和nbdevdn参数,它们分别表示上轨和下轨的标准差倍数。默认情况下,它们的值是2,你可以根据需要进行修改。

使用TA-Lib计算RSI指标

RSI(相对强弱指数,Relative Strength Index)是一种用于衡量金融市场上某个资产(如股票、期货、外汇等)的价格方向和速度的技术指标。RSI常用于技术分析,它的主要目的是帮助分析师和交易者确定资产的超买和超卖情况,以便预测价格趋势的反转或持续。
RSI指标的计算基于最近一段时间内资产价格的变动幅度,通常以14个交易日为周期。计算RSI的一般步骤如下:

  1. 首先,计算每个交易日的价格变化。这是当日收盘价与前一交易日收盘价之间的差值。
  2. 将正的价格变化(即价格上涨的日子)与负的价格变化(即价格下跌的日子)分别加总,并计算它们的平均值。
  3. 然后,使用以下公式计算RSI:
    RSI = 100 - (100 / (1 + RS))
    其中,RS(Relative Strength)等于正价格变化的平均值除以负价格变化的平均值。
  4. 最后,根据计算出的RSI值,可以判断资产的超买和超卖情况。一般来说,RSI在70以上被认为是超买,暗示价格可能会下跌;而RSI在30以下被认为是超卖,暗示价格可能会上涨。交易者通常使用RSI来辅助决策,例如,当RSI超过70时可能考虑卖出,当RSI低于30时可能考虑买入。
    RSI是广泛应用的技术指标之一,可以用于股票市场、期货市场、外汇市场等各种金融市场的分析和交易。使用TA-Lib计算其RSI指标,并进行可视化的代码:
# 计算RSI指标
period = 14  # RSI的计算周期
df['RSI'] = talib.RSI(df['收盘'], timeperiod=period)

# 创建RSI指标图
plt.figure(dpi=300)
plt.plot(df.index, df['RSI'], label='RSI', color='b')
plt.axhline(70, color='r', linestyle='--', label='超买 (70)')
plt.axhline(30, color='g', linestyle='--', label='超卖 (30)')
plt.title('RSI指标')
plt.xlabel('日期')
plt.ylabel('RSI值')
plt.legend()
plt.savefig('图5-3.jpg', dpi=300)
plt.show()

运行这段代码,会得到如图所示的结果。
在这里插入图片描述
这段代码调用TA-Lib计算了RSI指标并绘制RSI图表,其中包括RSI值的曲线以及70和30两条水平线,通常用于指示超买和超卖情况。图表中的实线表示RSI值随时间的变化,它是相对强弱指数的主要曲线。RSI通常在70和30之间画两条水平线,分别是上下两条虚线,用于标记超买和超卖水平。具体解释如下:
实线波动表示资产的强弱变化。
当实线超过70(上方虚线)时,通常被认为资产处于超买状态,可能会发生价格下跌。
当实线低于30(下方虚线)时,通常被认为资产处于超卖状态,可能会发生价格上涨。
RSI指标的主要用途是帮助交易者识别潜在的买入和卖出机会,以及市场的强弱趋势。在图表上观察RSI曲线的走势有助于判断资产的相对强度,并用于决策交易策略。大家可以根据你的实际数据替换示例数据来进行计算和可视化。

参考书目

北京大学出版社 《巧用AI大模型轻松学会Python金融数据分析》

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值