01
引言
Pandas_TA —— 一个结合了pandas的强大数据处理能力与技术分析的库,旨在为金融市场分析师和交易者提供一个简单、高效的工具集,从而帮助他们更容易地在数据集上应用各种技术分析指标。pandas_ta为用户提供了直接在DataFrame上运行技术指标计算的能力,从而避免了复杂的数据转换和预处理步骤。
这个库包含了从简单的移动平均线到复杂的振荡器和动量指标等众多经典和现代技术指标。对于任何熟悉pandas操作的人来说,利用pandas_ta进一步探索和实验市场数据变得非常直观。无论你是一个经验丰富的量化交易者,还是一个刚刚开始学习技术分析的新手,pandas_ta都能为你的数据分析工作流程增添巨大的价值。
在开始使用pandas_ta之前,首先确保你已经安装了pandas。如果还没有,可以通过pip轻松安装:pip install pandas_ta。导入后面需要用到的库。
import qstock as qs
import pandas_ta as ta
import matplotlib.pyplot as plt
#正常显示画图时出现的中文和负号
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
#以中国平安股票数据为例,获取后复权价格
df0=qs.get_data('中国平安',start='20200807',end='20230807',fqt=2)[['open','high','low','close','volume']]
#df0.tail()
关于TA-Lib可以参考以下推文:
02
基础技术指标
技术指标是技术分析的核心。它们是基于历史价格、交易量或其他市场活动的数学计算得来的指数,用于预测市场走势、辨识趋势并确定买卖点。接下来,本文将探索如何使用pandas_ta来计算这些关键的指标,并深入了解它们的意义和应用。
01
移动平均线 (Moving Averages)
移动平均线是最常用的技术指标之一。它可以帮助我们确定市场的方向并过滤掉价格的短期波动。移动平均包括简单移动平均线 (SMA)和指数移动平均线 (EMA)。SMA是根据指定时间段内的平均收盘价计算得来的,当价格高于SMA时,可以看作是上升趋势,当价格低于SMA时,可以看作是下降趋势。一些交易者还使用两条SMA(如50天和200天)来判断黄金交叉或死亡交叉。与SMA相似,但EMA加权了最近的价格。它更加灵敏,对价格变动反应更迅速。由于EMA对最新的价格变动有更大的反应,所以它通常用于跟踪短期价格动态。交易者可能会同时使用SMA和EMA来判断市场动态。
df=df0.copy(deep=True) #复制一个dataframe
#简单移动平均线 (SMA)
df.ta.sma(close='close', length=20,append=True)
#指数移动平均线 (EMA)
df.ta.ema(20,append=True)
#查看df后三行数据
#df.tail(3)
close和length关键字参数可以省略,如df.ta.sma(20),可以通过length参数调整考虑的天数。append=True表示计算指标后添加在dataframe上。
02
相对强度指数 (RSI)
RSI,Relative Strength Index,是一个动量振荡器,测量资产价格变动的速度和变化。RSI值范围为0到100,通常使用70和30作为超买和超卖的界限,也就是说当RSI值超过70时,可能表示一个资产被超买;当其低于30时,可能表示资产被超卖。
df.ta.rsi(14)
默认情况下,RSI使用14天的数据。可以通过length参数调整天数。
03
MACD指标
MACD,Moving Average Convergence Divergence,MACD线是两个EMAs(通常是12天和26天)之间的差值,信号线是MACD线的EMA(通常是9天)。差离值(MACD Histogram)表示MACD线和信号线之间的差值。MACD可以帮助识别资产的动量。当MACD线在信号线之上时,可能表示资产是在上涨趋势中;反之则可能处于下降趋势。
macd=df.ta.macd(fast=12, slow=26, signal=9)
#df.ta.macd(12, 26, 9)
macd.tail(3)
date | MACD_12_26_9 | MACDh_12_26_9 | MACDs_12_26_9 |
---|---|---|---|
2023-08-03 | 2.366621 | 0.911380 | 1.455242 |
2023-08-04 | 2.431577 | 0.781069 | 1.650509 |
2023-08-07 | 2.422850 | 0.617873 | 1.804977 |
可以通过fast, slow 和 signal参数调整移动平均线的长度。列名MACD_12_26_9、MACDh_12_26_9、MACDs_12_26_9分别代表MACD线、差离值(MACD 柱)和信号线。MACD柱的高低显示市场的趋势,正值为上升趋势,负值则表示下降趋势。当然,MACD也有一定的局限性,如滞后性和假信号的产生等。
04
布林带 (Bollinger Bands)
布林带由三条线组成: 中轨线是N天的SMA;上轨线是中轨线加上K倍的标准差;下轨线是中轨线减去K倍的标准差。
布林带可以测量价格的波动性。当价格触及上轨线可能意味着资产被超买,而触及下轨线可能意味着资产被超卖。布林带的宽度(带宽)也可用于测量市场的波动性。
在pandas_ta中的实现:
#查看布林带指标数据最后几行
df.ta.bbands(20,1.5).tail()
date | BBL_20_1.5 | BBM_20_1.5 | BBU_20_1.5 | BBB_20_1.5 | BBP_20_1.5 |
---|---|---|---|---|---|
2023-08-03 | 123.777886 | 129.768 | 135.758114 | 9.232035 | 1.077785 |
2023-08-04 | 124.077091 | 130.237 | 136.396909 | 9.459537 | 0.940997 |
2023-08-07 | 124.644280 | 130.746 | 136.847720 | 9.333700 | 0.870715 |
length控制SMA的周期,而std参数决定了标准差的倍数。默认情况下,length=5且std=2。数据列名BBL_20_1.5、BBM_20_1.5、BBU_20_1.5、BBB_20_1.5、BBP_20_1.5分别代表20日周期1.5倍标准差的布林带下轨线、中轨线、上轨线以及宽度。
05
平均真实区间 (ATR)
ATR(Average True Range), 测量价格的波动性,是过去N天真实区间的平均值。真实区间是以下三者中的最大值:今天的高与低的差值、今天的高与昨天的收盘价的差值、今天的低与昨天的收盘价的差值。ATR是评估资产波动性的工具,通常用于设置止损点或调整交易策略。
在pandas_ta中的实现:
df.ta.atr()
通过length参数调整天数,默认为14天。
06
随机振荡器
随机振荡器(Stochastic Oscillator)又称KD指标,由一条%K线以及一条%D线构成。“%K”线代表最新价格和近期最低价的差,与近期最高最低差价的比。%D线算法相同,但“近期”这个时间范围是前者的三倍。当%K线在%D线上并且都高于80,可能表示资产被超买;当%K线在%D线下并且都低于20,可能表示资产被超卖。
在pandas_ta中的实现:
df.ta.stoch().tail(3)
date | STOCHk_14_3_3 | STOCHd_14_3_3 |
---|---|---|
2023-08-03 | 74.558960 | 77.844537 |
2023-08-04 | 74.721922 | 74.907307 |
2023-08-07 | 75.509888 | 74.930257 |
可以通过k、d和smooth_k参数调整计算公式中的天数。列名STOCHk_14_3_3、STOCHd_14_3_3分别代表k、d和smooth_k默认参数为14,、3、3下的K、D值。
07
Chaikin 资金流 (CMF)
CMF全称为Chaikin Money Flow, 是一个指标,用于测量资金流入和流出市场的强度,计算方法基于累积的资金流量。
正值可能表示资金流入市场(买压),而负值可能表示资金流出市场(卖压)。
在pandas_ta中的实现:
df.ta.cmf()
通过length参数调整天数,默认为20天。
08
商品通道指数(CCI)
Commodity Channel Index, CCI,商品通道指数,测量商品价格与其平均价格之间的差异程度。计算方式是当前价格减去过去N天价格的平均值,然后除以平均绝对偏差。CCI主要用于确定价格的过度买入或过度卖出情况。如果CCI值大于100,可能表示价格过度买入;如果CCI值小于-100,可能表示价格过度卖出。
在pandas_ta中的实现:
df.ta.cci().tail()
通过length参数调整天数,默认为20天。
pandas_ta通过参数append=True使得计算的指标添加到df的dataframe里,我们计算上述指标并添加到df上,代码如下:
df=df0.copy(deep=True) #复制一个dataframe
#简单移动平均线 (SMA)
df.ta.sma(close='close', length=20,append=True)
#指数移动平均线 (EMA)
df.ta.ema(20,append=True)
#RSI指标
df.ta.rsi(append=True)
#MACD指标
df.ta.macd(append=True)
#布林带
df.ta.bbands(20,1.5,append=True)
#平均真实波幅
df.ta.atr(append=True)
#随机指标
df.ta.stoch(append=True)
#Chaikin 资金流 (CMF)
df.ta.cmf(append=True)
#商品通道指数(CCI)
df.ta.cci(append=True)
#查看df后三行数据
df.tail(3)
在实践中,技术交易者经常将多种技术指标结合使用,以获得对市场更深入的洞察。pandas_ta不仅提供了这些基础指标的计算,还允许你自定义参数和策略,让你的技术分析更加精确和个性化。
03
pandas_ta的策略功能
pandas_ta不仅提供了各种技术分析工具,还提供了一个强大的策略功能。这允许用户快速地添加多种技术指标到数据框,无需一一指定。接下来,我们将深入探讨这个功能,并学习如何利用它。pandas_ta中,策略是一组预定义的技术指标集合。这使得用户可以一次性应用多个指标,而无需分别调用每个函数。
01
内置策略
pandas_ta提供了以下几种内置策略:
(1)all: 一次性添加所有可用的技术指标。df.ta.strategy('all')
df1=df0.copy()
df1.ta.strategy('all')
print(df1.columns)
#输出结果:
Index(['open', 'high', 'low', 'close', 'volume', 'ABER_ZG_5_15',
'ABER_SG_5_15', 'ABER_XG_5_15', 'ABER_ATR_5_15', 'ACCBL_20',
...
'VIDYA_14', 'VTXP_14', 'VTXM_14', 'VWAP_D', 'VWMA_10', 'WCP',
'WILLR_14', 'WMA_10', 'ZL_EMA_10', 'ZS_30'],
dtype='object', length=223)
输出得到223个列名,除去'open', 'high', 'low', 'close', 'volume'自带特征值外,共得到218个技术指标特征值(注意,单个指标可能得到多个特征值,如布林带、MACD等)。
(2)candles: 添加与K线图模式相关的指标。
df2=df0.copy()
df2.ta.strategy('candles')
print(df2.columns)
print(f'指标特征个数:{len(df2.columns)-5}')
使用candles策略,可以得到以下指标:
CDL_DOJI_10_0.1: 这是一个识别Doji蜡烛图形态的指标。Doji形态是指在某一时期内开盘价和收盘价相等(或者几乎相等)。这个指标将标记出这样的形态。参数10_0.1可能是用来控制识别的精度,但具体细节会因库的版本而变化。
CDL_INSIDE: 这是一个识别Inside Bar蜡烛图形态的指标。Inside Bar形态是指在某一时期内,最高价和最低价都小于前一天的最高价和最低价。这通常表示市场在一段时间内处于犹豫不决的状态。
open_Z_30_1, high_Z_30_1, low_Z_30_1, close_Z_30_1: 这些是Z-Score(Z得分)指标,用于衡量数据点离平均值的距离,单位是标准差。Z-Score可以帮助识别异常值并确定数据点的相对位置。在这里,它们分别应用于开盘价、最高价、最低价和收盘价。30_1可能是指在计算Z-Score时使用的窗口大小和移动步长,但具体细节会因库的版本而变化。
HA_open, HA_high, HA_low, HA_close: 这些是Heikin-Ashi蜡烛图的四个元素。Heikin-Ashi蜡烛图是一种变体的蜡烛图,它使用平均值来平滑价格数据,从而生成更清晰、更易于理解的趋势线。这四个指标分别表示Heikin-Ashi蜡烛图的开盘价、最高价、最低价和收盘价。
(3)momentum: 添加与动量相关的技术指标。
df3=df0.copy()
df3.ta.strategy('momentum')
print(df3.columns)
print(f'指标特征个数:{len(df3.columns)-5}')
以下是这些指标的详细说明:
AO_5_34: Awesome Oscillator,是基于市场动量的一个技术分析指标,计算方法为短期(通常为5期)和长期(通常为34期)的中间点价格(最高价和最低价的平均值)之间的差异。
APO_12_26: Absolute Price Oscillator,价格震荡指标,它通过计算两个不同周期的移动平均线之间的差异来衡量动量。
BIAS_SMA_26: Bias,偏离率,衡量了当前价格相对于某个移动平均线的偏离程度。
BOP: Balance of Power,权益平衡指标,衡量买卖力量的平衡状态,帮助投资者了解市场的供求关系。
AR_26和BR_26: 分别是人气指标和意愿指标,AR是一段时间内上涨天数的开盘到高点的总价格与下跌天数的开盘到低点总价格的比率,BR是一段时间内上涨天数的收盘到高点的总价格与下跌天数的收盘到低点总价格的比率。
CCI_14_0.015: Commodity Channel Index,商品渠道指数,衡量价格相对于其平均价格的偏离程度。
CFO_9: Chande Forecast Oscillator,Chande预测震荡器,用于预测市场的未来动向。
CG_10: Center of Gravity,重心指标,预测价格趋势的变化点。
CMO_14: Chande Momentum Oscillator,Chande动量振荡器,衡量市场的动量。
COPC_11_14_10: Coppock Curve,考普克曲线,主要用于捕捉底部的反转。
CTI_12: Comparative Volatility Index,比较波动性指数,用于比较价格变动的大小。
ER_10: Efficiency Ratio,效率比率,衡量市场的效率,即价格变动的快慢。
BULLP_13和BEARP_13: 分别代表多头动量百分比和空头动量百分比。
FISHERT_9_1和FISHERTs_9_1: Fisher Transform,费舍尔变换,用于确定价格分布的高度和宽度。
INERTIA_20_14: Inertia,惯性指标,用于衡量价格趋势的强度。
K_9_3, D_9_3, J_9_3: 分别代表随机指标(Stochastic Oscillator)的K线、D线和J线。
KST_10_15_20_30_10_10_10_15和KSTs_9: Know Sure Thing,确信之物,用于识别价格动量的转折点。
MACD_12_26_9, MACDh_12_26_9, MACDs_12_26_9: 分别代表MACD线、MACD柱状图和信号线。
MOM_10: Momentum,动量指标,衡量价格相对于一段时间之前的价格的改变。
PGO_14: Pretty Good Oscillator,非常好的振荡器,用于测量价格相对于一段时间之前的价格的变化。
PPO_12_26_9, PPOh_12_26_9, PPOs_12_26_9: Percentage Price Oscillator,百分比价格震荡指标,计算两个周期的移动平均线之间的差值,并以百分比表示。
PSL_12: Percentage of Stocks above a Level,超过某一水平的股票百分比。
PVO_12_26_9, PVOh_12_26_9, PVOs_12_26_9: Percentage Volume Oscillator,百分比成交量震荡指标,衡量成交量的变化。
QQE_14_5_4.236,QQE_14_5_4.236_RSIMA, QQEl_14_5_4.236, QQEs_14_5_4.236: QQE,量化和易化的指标,用于判断市场的超买和超卖状态。
ROC_10: Rate of Change,变化率,衡量价格相对于一段时间之前价格的变化。
RSI_14: Relative Strength Index,相对强弱指数,衡量市场的超买和超卖状态。
RSX_14: Relative Strength Index Smoothed,平滑的相对强弱指数,用于衡量价格的变化率。
RVGI_14_4和RVGIs_14_4: Relative Vigor Index,相对活力指数,通过比较交易日的开盘和收盘价格来衡量价格的活力。
SLOPE_1: Slope,斜率,衡量趋势线的倾斜程度,用于确定趋势的方向。
SMI_5_20_5, SMIs_5_20_5, SMIo_5_20_5: Stochastic Momentum Index,随机动量指数,用于确定价格的动量。
SQZ_20_2.0_20_1.5, SQZ_ON, SQZ_OFF, SQZ_NO, SQZPRO_20_2.0_20_2_1.5_1, SQZPRO_ON_WIDE,SQZPRO_ON_NORMAL,SQZPRO_ON_NARROW, SQZPRO_OFF, SQZPRO_NO: Squeeze和Squeeze Pro,挤压和挤压Pro,用于测量市场波动的强度。
STC_10_12_26_0.5, STCmacd_10_12_26_0.5, STCstoch_10_12_26_0.5: Schaff Trend Cycle,沙夫趋势周期,是一种改良的MACD指标。
STOCHk_14_3_3, STOCHd_14_3_3, STOCHRSIk_14_14_3_3, STOCHRSId_14_14_3_3: Stochastic Oscillator和Stochastic RSI,随机振荡器和随机相对强弱指数,用于判断市场的超买和超卖状态。
TRIX_30_9和TRIXs_30_9: TRIX,三重指数平滑平均线,用于判断价格的趋势。
TSI_13_25_13和TSIs_13_25_13: True Strength Index,真实强度指数,用于衡量价格的动量。
UO_7_14_28: Ultimate Oscillator,终极震荡器,是一个在多个周期内集成的震荡器。
WILLR_14: Williams %R,威廉指标,用于衡量市场的超买和超卖状态。
(4)overlap: 添加与价格重叠的技术指标。
df4=df0.copy()
df4.ta.strategy('overlap')
print(df4.columns)
print(f'指标特征个数:{len(df4.columns)-5}')
以下是这些指标的详细说明:
ALMA_10_6.0_0.85: Arnaud Legoux Moving Average,一种用于降低噪声并平滑价格数据的移动平均线。
DEMA_10: Double Exponential Moving Average,双指数移动平均线,尝试消除单指数移动平均线的滞后性。
EMA_10: Exponential Moving Average,指数移动平均线,比简单移动平均线对最近的数据更敏感。
FWMA_10: Fractal Weighted Moving Average,分形权重移动平均线,赋予近期数据更多权重的移动平均线。
HILO_13_21, HILOl_13_21, HILOs_13_21: High-Low Channel,高低通道指标,包括通道的高点、低点和跨度。
HL2, HLC3, OHLC4: 分别表示最高价和最低价的平均值,最高价、最低价和收盘价的平均值,开盘价、最高价、最低价和收盘价的平均值。
HMA_10: Hull Moving Average,赫尔移动平均线,尝试消除滞后性,提高灵敏度。
ISA_9, ISB_26, ITS_9, IKS_26, ICS_26: 分别是Ichimoku Cloud的一部分,包括转换线、基线、领先跨度A、领先跨度B和延迟跨度。
JMA_7_0: Jurik Moving Average,Jurik移动平均线,一种平滑和预测时间序列数据的方法。
KAMA_10_2_30: Kaufman's Adaptive Moving Average,考夫曼自适应移动平均线,根据市场波动性自动调整其平滑系数。
LR_14: Linear Regression,线性回归,用于寻找价格趋势。
MCGD_10: McGinley Dynamic,麦金利动态线,是一种会自动调整速度以反应市场速度的移动平均线。
MIDPOINT_2和MIDPRICE_2: 分别是过去一段时间的最高价和最低价的平均值,以及过去一段时间的最高价和最低价的中间价。
PWMA_10: Pot Weighted Moving Average,位移加权移动平均线,是一种加权移动平均线。
RMA_10: Rolling Moving Average,滚动移动平均线,一种常见的移动平均线。
SINWMA_14: Sine Weighted Moving Average,正弦权重移动平均线,一种特殊的加权平均方法。
SMA_10: Simple Moving Average,简单移动平均线,最常见的移动平均线。
SSF_10_2: Smoothed Simple Filter,平滑简单滤波器,用于平滑价格数据。
SUPERT_7_3.0, SUPERTd_7_3.0, SUPERTl_7_3.0, SUPERTs_7_3.0: Super Trend,超趋势指标,用于跟踪趋势。
SWMA_10: Sine Weighted Moving Average,正弦权重移动平均线,一种特殊的加权平均方法。
T3_10_0.7: Triple Exponential Moving Average,三重指数移动平均线,尝试减小滞后,增加平滑度。
TEMA_10: Triple Exponential Moving Average,三重指数移动平均线,尝试减小滞后,增加平滑度。
TRIMA_10: Triangular Moving Average,三角形移动平均线,一种加权平均线,对于数据集中的数据给予更多的权重。
VIDYA_14: Variable Index Dynamic Average,可变指数动态平均线,一种自适应移动平均线。
VWAP_D: Volume Weighted Average Price,成交量加权平均价格,是一种用价格和成交量计算出的平均价格。
VWMA_10: Volume Weighted Moving Average,成交量加权移动平均线,是一种考虑了成交量的移动平均线。
WCP: Weighted Close Price,加权收盘价,一种给予收盘价更多权重的价格指标。
WMA_10: Weighted Moving Average,加权移动平均线,一种加权的移动平均线。
ZL_EMA_10: Zero Lag Exponential Moving Average,零滞后指数移动平均线,尝试消除滞后性。
(5)performance: 添加与资产绩效相关的指标。
df5=df0.copy()
df5.ta.strategy('performance')
print(df5.columns)
print(f'指标特征个数:{len(df5.columns)-5}')
LOGRET_1: 这是对数收益率的计算。对数收益率是投资收益的一种度量方式,主要用于金融时间序列数据,因为它具有较好的统计性质。对数收益率的计算公式为:log(Pt / Pt-1),其中Pt表示时间t的价格,Pt-1表示时间t-1的价格。单独计算:df5.ta.log_return()
PCTRET_1: 这是百分比收益率的计算,也称为简单收益率。它的计算公式为:(Pt / Pt-1) - 1,这与对数收益率的公式非常相似,但不包含对数转换。百分比收益率直观地表示了价格从t-1到t的变化百分比。单独计算:df5.ta.percent_return(),相当于df5.close.pct_change()
两者的主要区别在于:对于小的变化幅度,两者的值几乎相同,但对于大的变化幅度,对数收益率会比百分比收益率小。此外,对数收益率具有时变性,使得在进行时间序列分析时更加方便。
(6)statistics: 添加统计学相关的指标。
df6=df0.copy()
df6.ta.strategy('statistics')
print(df6.columns)
print(f'指标特征个数:{len(df6.columns)-5}')
ENTP_10: 这是指在10天的时间窗口内,收盘价格序列的香农熵,用于衡量价格序列的复杂度或者说不确定性。
KURT_30: 这是30天收盘价格序列的峰度值,用于衡量收盘价格分布的"尾重"程度。
MAD_30: 这是30天收盘价格序列的平均绝对偏差。
MEDIAN_30: 这是30天收盘价格序列的中位数。
QTL_30_0.5: 这是30天收盘价格序列的第二四分位数,也就是中位数。
SKEW_30: 这是30天收盘价格序列的偏度,用于衡量收盘价格分布的对称性。
STDEV_30: 这是30天收盘价格序列的标准差,用于衡量收盘价格分布的离散程度。
TOS_STDEVALL_LR, TOS_STDEVALL_L_1, TOS_STDEVALL_U_1,TOS_STDEVALL_L_2, TOS_STDEVALL_U_2, TOS_STDEVALL_L_3,TOS_STDEVALL_U_3:这些都是通过某种计算方法得出的值,但我没有找到具体的定义和解释。
VAR_30: 这是30天收盘价格序列的方差,用于衡量收盘价格分布的离散程度。
ZS_30: 这可能是30天收盘价格序列的Z-Score,用于衡量每一个收盘价格相对于这30天收盘价格的均值的位置。
(7)trend: 添加与价格趋势相关的技术指标。
df7=df0.copy()
df7.ta.strategy('trend')
print(df7.columns)
print(f'指标特征个数:{len(df7.columns)-5}')
ADX_14:平均趋向指数(Average Directional Index),是由Welles Wilder开发的,用来衡量市场趋势的强度。
DMP_14,DMN_14:这两个指标分别是上行动向指数(Directional Movement Plus)和下行动向指数(Directional Movement Minus),这两个指标是用来计算ADX的两个关键组成部分。
AMATe_LR_8_21_2,AMATe_SR_8_21_2:这两个是AMAT买卖触发线的长期和短期版本,它们根据市场动量来产生交易信号。
AROOND_14, AROONU_14:阿隆上行和下行指标,是由Tushar Chande开发的,用于确定市场是否处于上升、下降或横盘趋势中,以及趋势的强度。
AROONOSC_14:阿隆震荡器是AROON上行和下行的差值,它用来衡量市场的趋势强度。
CHOP_14_1_100:震荡指标,用于衡量市场是否处于震荡状态。
CKSPl_10_3_20, CKSPs_10_3_20:这两个指标是Cheking stochastic指标,根据过去的价格变动计算市场的动量。
LDECAY_5:线性衰减指标,衡量价格从最高点下跌的天数。
DEC_1:一天的价格降幅。
DPO_20:离散振荡指标,用于寻找周期性的价格模式。
INC_1:一天的价格涨幅。
PSARl_0.02_0.2, PSARs_0.02_0.2, PSARaf_0.02_0.2, PSARr_0.02_0.2:抛物线停损转向指标,用于确定市场的趋势。
QS_10:定量分析指标。
TTM_TRND_6:TTM Trend,TTM趋势指标,用于确定市场的趋势。
VHF_28:垂直水平过滤器,用于确定市场是否处于趋势或震荡状态。
VTXP_14, VTXM_14:趋势转换指标的正向和负向版本,用于检测市场的趋势改变。
(8)volatility: 添加与价格波动性相关的指标。
df8=df0.copy()
df8.ta.strategy('volatility')
print(df8.columns)
print(f'指标特征个数:{len(df8.columns)-5}')
ABER_ZG_5_15, ABER_SG_5_15, ABER_XG_5_15, ABER_ATR_5_15:这些是与布林带类似的波动性度量,但使用不同的中心线和带宽计算方法。
ACCBL_20, ACCBM_20, ACCBU_20:这些是累积布林带的下限,中线和上限。
ATRr_14:这是14日平均真实范围的变化率。
BBL_5_2.0, BBM_5_2.0, BBU_5_2.0, BBB_5_2.0, BBP_5_2.0:这些是5日布林带的下限,中线,上限,宽度和百分比。
DCL_20_20, DCM_20_20, DCU_20_20:这些是20日顿奇频道的下限,中线和上限。
HWM, HWU, HWL:这些是最高水位线,最高水位线上限和最高水位线下限。
KCLe_20_2, KCBe_20_2, KCUe_20_2:这些是20日基尔兰频道的下限,中线和上限。
MASSI_9_25:这是移动平均线斜率指数。
NATR_14:这是14日归一化平均真实范围。
PDIST:这是价格距离。
RVI_14:这是14日相对波动指数。
THERMO_20_2_0.5,THERMOma_20_2_0.5,THERMOl_20_2_0.5, THERMOs_20_2_0.5:这些是热力图指标的各项参数。
TRUERANGE_1:这是1日真实范围。
UI_14:这是14日的不确定性指数。
(9)volume: 添加与交易量相关的指标。
df9=df0.copy()
df9.ta.strategy('volume')
print(df9.columns)
print(f'指标特征个数:{len(df9.columns)-5}')
AD:累积分布线(Accumulation/Distribution Line)是一种量价合一的指标,用于衡量资金流入还是流出。它把价格和交易量结合在一起,以显示资金是在流入还是流出。
ADOSC_3_10:这是一种震荡器形式的累积/分配线,使用两个不同周期(在此例中为3和10)的EMA进行比较。
OBV:能量潮(On-Balance Volume)是一种通过交易量累积计算出来的流量指标。
OBV_min_2, OBV_max_2:这是计算过去2期的OBV最小值和最大值。
OBVe_4, OBVe_12:这是OBV指标的指数移动平均线。
AOBV_LR_2, AOBV_SR_2:这是基于OBV计算的长期和短期的平均震荡量。
CMF_20:Chaikin Money Flow,是由马克·蔡金(Marc Chaikin)开发的一种震荡器,表示特定期限(在这个例子中为20天)内的资金流入或流出。
EFI_13:Elder's Force Index,是一种由Alexander Elder开发的振荡器,结合价格和交易量来衡量市场力量。
EOM_14_100000000:Ease of Movement,容易移动指标,是一种由Richard W. Arms Jr. 开发的指标,结合价格和交易量来显示价格移动的难易程度。
KVO_34_55_13, KVOs_34_55_13:Klinger Volume Oscillator,是一种由Stephen J. Klinger开发的振荡器,衡量长期和短期的交易量变化。
MFI_14:Money Flow Index,货币流量指数,是一种结合价格和交易量的振荡器。
NVI_1, PVI_1:Negative Volume Index和Positive Volume Index,负交易量指数和正交易量指数,衡量交易量下降和上升时价格的变动。
PVOL:这是价格乘以交易量的指标,代表了市场的总交易价值。
PVR:价格/成交量比率。
PVT:价格-交易量趋势,是一种结合价格和交易量的动量指标。
02
自定义策略
除了上述内置策略,pandas_ta还允许用户创建自定义策略。这可以通过组合不同的技术指标来完成。使用策略功能的最大优点是它提供了一种高效的方法来添加多个技术指标。这对于初学者尤其有用,因为它允许他们快速地开始分析,而不必深入了解每个指标的工作原理。此外,策略还提供了一种组织方法,帮助用户确定他们感兴趣的指标,并根据需要创建自定义集。
应用实例:技术指标可视化分析。使用pandas_ta自定义策略获取常见的技术指标,并进行可视化。
#df.tail()
# 定义自定义策略
my_strategy = ta.Strategy(
name="My Strategy",
description="Combination of SMA, Bollinger Bands, MACD, RSI and OBV",
ta=[
{"kind": "sma", "length": 20}, # 20日简单移动平均线
{"kind": "ema", "length": 50}, # 50日简单移动平均线
{"kind": "bbands", "length": 20}, # 布林带
{"kind": "macd", "fast": 12, "slow": 26, "signal": 9}, # MACD
{"kind": "rsi"}, # RSI
{"kind": "adx"},
{"kind": "atr"},
{"kind": "aroon"},
{"kind": "obv"} # OBV
]
)
# 在df中应用自定义策略
df=df0.copy()
df.ta.strategy(my_strategy)
#可视化部分代码较长,此处省略,完整代码见知识星球。
04
结语
经过对pandas_ta库详细的探索和学习,本文详细解析了如何利用该库进行技术分析,从基础的技术指标计算,到复杂的自定义策略构建,再到技术分析图表的绘制,让读者可以清晰地理解并实践。
在技术分析中,pandas_ta无疑是Python社区中强大而易用的工具之一。它让数据科学家、量化研究员和交易员能以更简洁、直观的方式进行复杂的技术分析。尽管与TA-Lib有许多相似之处,但pandas_ta以其更丰富的技术指标和更强大的自定义能力,在很多场景下展现出更大的优势。
当然,任何工具都不可能完美,pandas_ta亦然。对于某些特定的技术指标,TA-Lib可能会更全面一些。另外,虽然pandas_ta的API设计得相当用户友好,但在使用某些功能时,可能还需要一些额外的学习和实践。技术分析不仅仅是一种工具或方法,更是一种需要持续学习和提高的思维方式。期待本文能在读者的技术分析之旅上提供一些帮助和启发!
参考资料:https://github.com/twopirllc/pandas-ta
关于Python金融量化
专注于分享Python在金融量化领域的应用。加入知识星球,可以免费获取qstock源代码、30多g的量化投资视频资料、量化金融相关PDF资料、公众号文章Python完整源码、与博主直接交流、答疑解惑等。添加个人微信sky2blue2可获取八五折优惠。