利用 Python 编写 MACD、KDJ、RSI、MA 等技术指标
本文档主要介绍了使用 Python 编程语言编写四种常见技术指标:MACD(Moving Average Convergence Divergence)、KDJ(Random Index)、RSI(Relative Strength Index)和 MA(Moving Average)。这些技术指标广泛应用于股票、期货、外汇等金融市场中,用于分析和预测市场趋势。
一、 MACD 指标
MACD 指标是由 Gerald Appel 于 1970年代开发的一种技术指标,用于衡量股票或期货的价格趋势。MACD 指标由两条移动平均线和一个差离值组成。短期移动平均线(shortEMA)和长期移动平均线(longEMA)相交时,表明股票或期货的价格趋势发生变化。
在 Python 中,使用 pandas 库实现 MACD 指标的计算,如下所示:
```python
def get_macd_data(data, short=0, long1=0, mid=0):
if short == 0:
short = 12
if long1 == 0:
long1 = 26
if mid == 0:
mid = 9
data['sema'] = pd.ewma(data['closeL'], span=short)
data['lema'] = pd.ewma(data['closeL'], span=long1)
data.fillna(0, inplace=True)
data['data_dif'] = data['sema'] - data['lema']
data['data_dea'] = pd.ewma(data['data_dif'], span=mid)
data['data_macd'] = 2 * (data['data_dif'] - data['data_dea'])
data.fillna(0, inplace=True)
return data[['data_dif', 'data_dea', 'data_macd']]
```
二、 KDJ 指标
KDJ 指标是一种随机指标,由三个参数组成:K 值、D 值和 J 值。KDJ 指标用于衡量股票或期货的价格涨跌幅度。
在 Python 中,使用 pandas 库实现 KDJ 指标的计算,如下所示:
```python
def get_kdj_data(data, N=0, M=0):
if N == 0:
N = 9
if M == 0:
M = 2
low_list = pd.rolling_min(data['lowL'], N)
low_list.fillna(value=pd.expanding_min(data['lowL']), inplace=True)
high_list = pd.rolling_max(data['highL'], N)
high_list.fillna(value=pd.expanding_max(data['highL']), inplace=True)
rsv = (data['closeL'] - low_list) / (high_list - low_list) * 100
data['KDJ_K'] = pd.ewma(rsv, com=M)
data['KDJ_D'] = pd.ewma(data['KDJ_K'], com=M)
data['KDJ_J'] = 3 * data['KDJ_K'] - 2 * data['KDJ_D']
data.fillna(0, inplace=True)
return data[['KDJ_K', 'KDJ_D', 'KDJ_J']]
```
三、 RSI 指标
RSI 指标是由 J. Welles Wilder 于 1970年代开发的一种技术指标,用于衡量股票或期货的价格涨跌幅度。
在 Python 中,使用 pandas 库实现 RSI 指标的计算,如下所示:
```python
def get_rsi_data(data, N=0):
if N == 0:
N = 24
data['value'] = data['closeL'] - data['closeL'].shift(1)
data.fillna(0, inplace=True)
data['value1'] = data['value']
data['value1'][data['value1'] < 0] = 0
data['value2'] = data['value']
data['value2'][data['value2'] > 0] = 0
data['plus'] = pd.rolling_sum(data['value1'], N)
data['minus'] = pd.rolling_sum(data['value2'], N)
data.fillna(0, inplace=True)
rsi = data['plus'] / (data['plus'] - data['minus']) * 100
data.fillna(0, inplace=True)
rsi = pd.DataFrame(rsi, columns=['rsi'])
return rsi
```
四、 MA 指标
MA 指标是一种移动平均线指标,用于衡量股票或期货的价格趋势。
在 Python 中,使用 pandas 库实现 MA 指标的计算,如下所示:
```python
def get_ma_data(data, N=0):
if N == 0:
N = 5
data['ma'] = pd.rolling_mean(data['closeL'], N)
data.fillna(0, inplace=True)
return data[['ma']]
```
本文档提供了使用 Python 编写四种常见技术指标的实现方法,这些指标广泛应用于股票、期货、外汇等金融市场中,用于分析和预测市场趋势。