[量化投资-学习笔记015]Python+TDengine从零开始搭建量化分析平台-量化知识点汇总
  zwmX4WA4Dykt 2023年12月07日 23 0


之前的章节介绍了多个技术分析指标,以下进行一个简单的总结。
看过之前章节的同学就可以不用打开了。


技术指标

  • MA
  • EMA
  • MACD
  • CCI
  • ATR
  • KDJ


MA

最基础的技术指标,对一段周期内的收盘价进行简单平均,是一切指标的基础。

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

EMA

均线的进阶版本,对一段周期收盘价进行移动平均,获取更平衡的曲线。
周期越长,曲线越平滑;周期越短,曲线越陡峭。

def calc_ema(df,period):
    df['EMA_' + str(period)] = pd.DataFrame.ewm(df['close'],span=period).mean() 
    return df

MACD

指数平滑移动平均线。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 旨在更全面地分析一定时间段内的综合价格走势。与其他震荡指标不同,CCI 不仅以收盘价为参考,还使用了最高价、最低价和收盘价的平均值作为计算基础。

计算公式:

  1. 计算典型价格(TP):TP =(最高价 + 最低价 + 收盘价)/ 3
  2. 计算典型价格移动平均线(TPSMA):TPSMA = (TP1 + TP2 + TP3 + … + TPn) / n
  3. 计算均值偏差(Mean Deviation):MD = ( |TP1 - TPSMA1| +…+ |TPn - TPSMAn| ) / n
  4. 计算CCI指数:CCI = ( TPt - TPSMAt )/ ( 0.015 X MDt ),其中t代表当前K线上的数据,0.015用于将70%到80%的CCI数据归纳在100和-100之间.
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

ATR指标(Average True Range / ATR)是一种用于反应价格波动的指标。

ATR指标的计算方法:

  1. 计算波动幅度TR(True Range):max(当天最高价和最低价之间的距离,前一天收盘价和当天最高价之间的距离,前一天收盘价和当天最低价之间的距离)。
  2. 取一定时间周期内(通常默认为14个交易日)TR的平均值,即可得到平均真实波动幅度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

KDJ的计算依据是最高价、最低价和收盘价。K、D、J 是图中的三条线。

要计算 KDJ,需要先计算价差 RSV,RSV=((收盘价-最低价)/(最高价-收盘价))*100

  • K = RSV 的指数移动平均值(平滑因子=1/3)
  • D = K 的指数移动平均值(平衡因子=1/3)
  • J = K3 - D2
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


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月07日 0

暂无评论

zwmX4WA4Dykt