[量化投资-学习笔记009]Python+TDengine从零开始搭建量化分析平台-KDJ
  zwmX4WA4Dykt 2023年11月15日 24 0


技术分析有点像烹饪,收盘价、最值、成交量等是食材;均值,移动平均,方差等是烹饪方法。随意组合一下就是一个技术指标。

KDJ又称随机指标(随机这个名字起的很好)。KDJ的计算依据是最高价、最低价和收盘价。K、D、J 是图中的三条线。

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

  • K = RSV 的指数移动平均值(平滑因子=1/3)
  • D = K 的指数移动平均值(平衡因子=1/3)
  • J = K3 - D2

看到这个有没有有点眼熟,先求差值,然后做移动平均,然后再二次平均,最后再取差值。是哪个指标呢??

答案揭晓:MACD

我们直接来看KDJ 和 MACD 的代码,就能直观的看到两者的相似之处。

n = 9
m = 3
df['lowest low'] = df['low'].rolling(window=n).min()
df['highest high'] = df['high'].rolling(window=n).max()
df['RSV'] = (df['close'] - df['lowest low']) / (df['highest high'] - df['lowest low']) * 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']
df['EMA12'] =  pd.DataFrame.ewm(df['close'],span=12).mean()
df['EMA26'] =  pd.DataFrame.ewm(df['close'],span=26).mean()
df['DIF'] = pd.DataFrame.ewm(df['close'],span=12).mean() - pd.DataFrame.ewm(df['close'],span=26).mean()
df['DEA'] = pd.DataFrame.ewm(df['DIF'],span=9).mean()
df['OSC'] = df['DIF'] - df['DEA']

通过对比,我们可以发现:

  • KDJ 比 MACD 多引入了最高价和最低价,在计算前后都进行了加权。
  • KDJ 对比的是收盘价与最值间的差值,MACD 对比的是不同周期收盘价的差值。
  • KDJ 反应的是同一周期内价格的波动程度,MACD 反应的是价格在一段时间的变化趋势。

具体代码我就不放了,因为和其他指标的实现方法基本相同。直接关门放 AI 就可以了。

[量化投资-学习笔记009]Python+TDengine从零开始搭建量化分析平台-KDJ_tdengine


[量化投资-学习笔记009]Python+TDengine从零开始搭建量化分析平台-KDJ_tdengine_02

题外话

在周期短的情况下,KDJ 指标的变化非常剧烈基本不具有指导意义,将计算周期拉长,更有参考意义。

网上很多文具在介绍 KDJ 时,都提到使用 KDJ 来预测转折点。对于至一点,我一直持怀疑态度。所有的技术指标都是根据历史数据计算出来的,依据的是历史信息,对未来的指导意义我认为是有限的。

技术指标用来做趋势的确认,我认为是合理的,但是充当预测的水晶球,就有点梦幻了。


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

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

暂无评论

推荐阅读
  2Fnpj8K6xSCR   2024年05月17日   107   0   0 Python
  xKQN3Agd2ZMK   2024年05月17日   75   0   0 Python
  fwjWaDlWXE4h   2024年05月17日   38   0   0 Python
  Ugrw6b9GgRUv   2024年05月17日   43   0   0 Python
zwmX4WA4Dykt