之前的章节介绍了多个技术分析指标,以下进行一个简单的总结。
看过之前章节的同学就可以不用打开了。
最基础的技术指标,对一段周期内的收盘价进行简单平均,是一切指标的基础。
def calc_ma(period,ma):
ma_n = []
period = period-1
for i in range(len(ma)):
if i >= period:
ma_n.append(np.mean(ma[i-period:i+1]))
else:
if i == 0:
ma_n.append(ma[i])
else:
ma_n.append(np.mean(ma[:i]))
return ma_n
均线的进阶版本,对一段周期收盘价进行移动平均,获取更平衡的曲线。
周期越长,曲线越平滑;周期越短,曲线越陡峭。
def calc_ema(df,period):
df['EMA_' + str(period)] = pd.DataFrame.ewm(df['close'],span=period).mean()
return df
指数平滑移动平均线。MACD 是通过计算不同时间的 EMA 的差值俩判断价格趋势。
MACD 包括 3 个值:
长短期 EMA 差值:DIF = EMA(close,12)-EMA(close,26) (计算 12 日和 26 日 EMA 均线差值)
信号线: DEA = EMA(DIF,9) (计算差值的 EMA 均线)
柱状图: OSC = DIF - DEA
def calculate_macd(df, short_period, long_period, signal_period):
df['DIF'] = pd.DataFrame.ewm(df['close'],span=short_period).mean() - pd.DataFrame.ewm(df['close'],span=long_period).mean()
df['DEA'] = pd.DataFrame.ewm(df['DIF'],span=singal_period).mean()
df['OSC'] = df['DIF'] - df['DEA']
return df
CCI 旨在更全面地分析一定时间段内的综合价格走势。与其他震荡指标不同,CCI 不仅以收盘价为参考,还使用了最高价、最低价和收盘价的平均值作为计算基础。
计算公式:
def calc_cci(df,period):
tp = (df['high'] + df['low'] + df['close']) / 3
ma = tp.rolling(window=period).mean()
md = tp.rolling(window=period).std()
df['CCI'] = (tp - ma) / (0.015 * md)
return df
ATR指标(Average True Range / ATR)是一种用于反应价格波动的指标。
ATR指标的计算方法:
ATR的波动幅度概念可以显示出交易者的期望和市场交易的活跃程度。波动率越高,ATR值越高;反之,波动率越低,ATR值也越低。
def calc_atr(df,period):
df['high - low'] = df['close'].diff().abs()
df['high - close_pre'] = (df['high'] - df['close'].shift()).abs()
df['low - close_pre'] = (df['low'] - df['close'].shift()).abs()
df['TR'] = df[['high - low', 'high - close_pre', 'low - close_pre']].max(axis=1)
df['ATR'] = df['TR'].rolling(window=period).mean()
return df
KDJ的计算依据是最高价、最低价和收盘价。K、D、J 是图中的三条线。
要计算 KDJ,需要先计算价差 RSV,RSV=((收盘价-最低价)/(最高价-收盘价))*100
def calc_kdj(df,period):
m = 3
df['lowest'] = df['low'].rolling(window=period).min()
df['highest'] = df['high'].rolling(window=period).max()
df['RSV'] = (df['close'] - df['lowest']) / (df['highest'] - df['lowest']) * 100
df['K'] = df['RSV'].ewm(adjust=False, alpha=1/m).mean()
df['D'] = df['K'].ewm(adjust=False, alpha=1/m).mean()
df['J'] = 3 * df['K'] - 2 * df['D']
return df