内容简介:本着不重复造轮子的原则,基本使用talib的库来实现各种股票的技术指标的运算。KDJ指标太经典了,不做新人教学了。想说的是具体算法和代码逻辑呈现。KDJ指标在talib中并不存在直接的算法,有相关的KD算法,经过研究后发现,两者很类似,但不能直接等同。所以就按照搜寻来的算法手工实现了一下,并对比了股票交易软件中的数值,完全一致。关于算法的说明:
本着不重复造轮子的原则,基本使用talib的库来实现各种股票的技术指标的运算。
KDJ指标太经典了,不做新人教学了。想说的是具体算法和代码逻辑呈现。KDJ指标在talib中并不存在直接的算法,有相关的KD算法,经过研究后发现,两者很类似,但不能直接等同。所以就按照搜寻来的算法手工实现了一下,并对比了股票交易软件中的数值,完全一致。
算法
关于算法的说明:
n日RSV=(Cn-Ln)/(Hn-Ln)×100
公式中,Cn为第n日收盘价;Ln为n日内的最低价;Hn为n日内的最高价。
当日K值=2/3×前一日K值+1/3×当日RSV
当日D值=2/3×前一日D值+1/3×当日K值
J值=3 当日K值-2 当日D值
一般n取9
若无前一日K 值与D值,则可分别用50来代替。对股票交易软件的数据对比中,对比了几个新股的KDJ值,发现不一定按这个初始值计算,因为算法上最后的数值影响最大的是当天和前一天的值,再之前的值影响依次减小。但经过一定运算量迭代后,最后的数值的精度和股票软件上的一致,所以初始值是啥其实没关系,算法有一定的震荡期,最前面几天的数值尽量不要直接用,使用最后面的数值。笼统的统计,最好是计算30天以上的KDJ,最后5天的数值的精度,基本就一致了。
代码
#KDJ具体计算: import numpy import talib from math import isnan def maxmin(data,fastk_period): close_prices = np.nan_to_num(np.array([v['close'] for v in data])) max_prices = np.nan_to_num(np.array([v['high'] for v in data])) min_prices = np.nan_to_num(np.array([v['low'] for v in data])) max_close = talib.MAX(max_prices, timeperiod=fastk_period) min_close = talib.MIN(min_prices, timeperiod=fastk_period) for k in range(len(min_prices)): if k<fastk_period and k>1: aaa = talib.MIN(min_prices,timeperiod=k) bbb = talib.MAX(max_prices,timeperiod=k) min_close[k]= aaa[k] max_close[k]= bbb[k] elif k==1 or k==0: min_close[k]=min_prices[k] max_close[k]=max_prices[k] indicators= { 'close': close_prices, 'max': max_close, 'min': min_close } return indicators def self_KDJ(data, fastk_period=9, slowk_period=3, slowd_period=3): #计算kd指标 high_prices = np.array([v['high'] for v in data]) low_prices = np.array([v['low'] for v in data]) close_prices = np.array([v['close'] for v in data]) rsv = maxmin(data, fastk_period) fast_k = (rsv['close']-rsv['min'])/(rsv['max']-rsv['min'])*100 ppp = rsv['max']-rsv['min'] for t in range(len(close_prices)): if rsv['max'][t]==rsv['min'][t]: fast_k[t] = 0 slow_k1 = np.full_like(close_prices,50) slow_d1 = np.full_like(close_prices,50) for k in range(1,len(fast_k)): slow_k1[k] = slow_k1[k-1]*2/3+fast_k[k]/3 slow_d1[k] = slow_d1[k-1]*2/3+slow_k1[k]/3 indicators= { 'rsv':fast_k, 'max':rsv['max'], 'min':rsv['min'], 'k': slow_k1, 'd': slow_d1, 'j': 3 * slow_k1 - 2 * slow_d1 } return indicators df=get_price(frequency='daily',fields=['close','high','low'], security='600036.XSHG', skip_paused=False, fq='pre',start_date='2018-1-16',end_date='2018-12-12') data = df.to_dict('records') bbb=self_KDJ(data) df['rsv']=bbb['rsv'] df['max']=bbb['max'] df['min']=bbb['min'] df['k']=bbb['k'] df['d']=bbb['d'] df['j']=bbb['j'] dm=df[['k','d','j']] dm.plot(figsize=(20,10)) df
本代码get_price函数使用了聚宽平台的函数,只要返回合适的格式,完全可以使用别的平台或者原始数据来代替。
plot函数会把图形简单的画出来参考,不需要的可以去掉
date close high low rsv max min k d j 2018-01-16 30.88 31.26 30.55 46.478873 31.26 30.55 50.000000 50.000000 50.000000 2018-01-17 30.69 32.07 30.51 11.538462 32.07 30.51 37.179487 45.726496 20.085470 2018-01-18 31.30 31.72 31.09 50.641026 32.07 30.51 41.666667 44.373219 36.253561 2018-01-19 31.44 32.30 31.19 51.955307 32.30 30.51 45.096214 44.614217 46.060206 2018-01-22 32.04 32.58 31.14 73.913043 32.58 30.51 54.701824 47.976753 68.151965 2018-01-23 32.98 33.09 32.15 95.736434 33.09 30.51 68.380027 54.777844 95.584393 2018-01-24 32.78 34.24 32.40 60.857909 34.24 30.51 65.872654 58.476114 80.665734 2018-01-25 32.36 32.95 31.86 49.597855 34.24 30.51 60.447721 59.133317 63.076531 2018-01-26 32.41 33.22 32.14 50.938338 34.24 30.51 57.277927 58.514853 54.804074 2018-01-29 31.94 33.01 31.78 38.337802 34.24 30.51 50.964552 55.998086 40.897483 2018-01-30 31.54 32.11 31.39 14.285714 34.24 31.09 38.738273 50.244815 15.725188 2018-01-31 32.87 32.92 31.20 55.806452 34.24 31.14 44.427666 48.305765 36.671466 2018-02-01 33.36 33.82 32.78 71.612903 34.24 31.14 53.489411 50.033647 60.400940 2018-02-02 33.41 33.49 32.63 72.697368 34.24 31.20 59.892064 53.319786 73.036619 2018-02-05 33.79 34.00 32.73 85.197368 34.24 31.20 68.327165 58.322246 88.337004 2018-02-06 33.53 33.60 32.43 83.214286 34.00 31.20 73.289539 63.311343 93.245929 2018-02-07 31.37 33.83 31.09 9.621993 34.00 31.09 52.067024 59.563237 37.074597 2018-02-08 30.29 31.36 29.86 10.386473 34.00 29.86 38.173507 52.433327 9.653867 2018-02-09 29.74 29.84 27.70 32.380952 34.00 27.70 36.242655 47.036436 14.655093 2018-02-12 29.10 29.67 28.47 22.222222 34.00 27.70 31.569178 41.880683 10.946166 2018-02-13 29.94 30.28 29.39 35.555556 34.00 27.70 32.897970 38.886446 20.921019 2018-02-14 30.38 30.48 29.46 42.539683 34.00 27.70 36.111874 37.961589 32.412446 2018-02-22 30.51 31.18 30.20 44.603175 34.00 27.70 38.942308 38.288495 40.249933 2018-02-23 30.78 31.09 30.24 50.244698 33.83 27.70 42.709771 39.762254 48.604806 2018-02-26 30.52 31.33 30.25 46.003263 33.83 27.70 43.807602 41.110703 49.201399 2018-02-27 29.90 30.65 29.68 60.109290 31.36 27.70 49.241498 43.820968 60.082557 2018-02-28 29.34 29.78 29.06 45.179063 31.33 27.70 47.887353 45.176430 53.309200 2018-03-01 29.44 29.89 29.06 33.916084 31.33 28.47 43.230263 44.527707 40.635375 2018-03-02 29.08 29.50 29.07 0.881057 31.33 29.06 29.113861 39.389759 8.562066 2018-03-05 29.20 29.62 28.98 9.361702 31.33 28.98 22.529808 33.769775 0.049874 ... ... ... ... ... ... ... ... ... ... 2018-11-01 29.05 29.65 28.66 52.243590 30.54 27.42 46.334047 46.887935 45.226271 2018-11-02 30.33 30.45 29.41 96.039604 30.45 27.42 62.902566 52.226145 84.255408 2018-11-05 30.00 30.23 29.71 85.148515 30.45 27.42 70.317882 58.256724 94.440198 2018-11-06 29.87 30.11 29.36 80.858086 30.45 27.42 73.831283 63.448244 94.597362 2018-11-07 29.57 30.20 29.53 70.957096 30.45 27.42 72.873221 66.589903 85.439857 2018-11-08 30.01 30.37 29.80 85.478548 30.45 27.42 77.074997 70.084934 91.055121 2018-11-09 28.60 29.60 28.49 35.540070 30.45 27.58 63.230021 67.799963 54.090137 2018-11-12 28.56 28.70 28.23 14.864865 30.45 28.23 47.108302 60.902743 19.519421 2018-11-13 28.58 28.77 28.05 22.083333 30.45 28.05 38.766646 53.524044 9.251850 2018-11-14 28.16 28.65 28.00 6.530612 30.45 28.00 28.021301 45.023130 -5.982355 2018-11-15 28.38 28.47 28.08 16.033755 30.37 28.00 24.025453 38.023904 -3.971450 2018-11-16 28.48 28.68 28.19 20.253165 30.37 28.00 22.768023 32.938610 2.426849 2018-11-19 28.95 29.04 28.45 40.084388 30.37 28.00 28.540145 31.472455 22.675524 2018-11-20 28.42 28.84 28.31 17.721519 30.37 28.00 24.933936 29.292949 16.215911 2018-11-21 28.40 28.43 28.10 25.000000 29.60 28.00 24.955958 27.847285 19.173302 2018-11-22 28.30 28.45 28.10 28.846154 29.04 28.00 26.252690 27.315753 24.126562 2018-11-23 27.88 28.35 27.88 0.000000 29.04 27.88 17.501793 24.044433 4.416513 2018-11-26 28.27 28.35 27.91 33.620690 29.04 27.88 22.874759 23.654542 21.315192 2018-11-27 27.99 28.38 27.85 11.764706 29.04 27.85 19.171408 22.160164 13.193896 2018-11-28 28.28 28.35 28.05 36.134454 29.04 27.85 24.825756 23.048695 28.379880 2018-11-29 28.30 28.60 28.30 37.815126 29.04 27.85 29.155546 25.084312 37.298015 2018-11-30 28.55 28.58 28.21 70.707071 28.84 27.85 43.006054 31.058226 66.901711 2018-12-03 29.46 29.63 28.93 90.449438 29.63 27.85 58.820516 40.312323 95.836902 2018-12-04 29.57 29.63 29.31 96.629213 29.63 27.85 71.423415 50.682687 112.904871 2018-12-05 29.37 29.57 29.00 85.393258 29.63 27.85 76.080029 59.148468 109.943153 2018-12-06 28.90 29.15 28.78 58.988764 29.63 27.85 70.382941 62.893292 85.362239 2018-12-07 28.58 29.19 28.53 41.011236 29.63 27.85 60.592373 62.126319 57.524480 2018-12-10 28.34 28.50 28.22 18.354430 29.63 28.05 46.513059 56.921899 25.695378 2018-12-11 28.51 28.55 28.28 21.126761 29.63 28.21 38.050959 50.631586 12.889706 2018-12-12 28.46 29.00 28.41 17.605634 29.63 28.21 31.235851 44.166341 5.374871
验证
2018-12-12日 招商银行600036 KDJ数值为31.235851、44.166341、5.374871,有兴趣的可以打开自己的股票软件对比一下。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 技术指标KD
- 如何衡量研发效能?阿里资深技术专家提出了5组指标
- 指标体系:四个模型教会你指标体系构建的方法
- 每秒聚合5亿个指标,Uber 开源大规模指标平台 M3
- 有赞指标库实践
- 网站性能指标 - FMP
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Node即学即用
[英] Tom Hughes-Croucher、[英] Mike Wilson / 郑达韡 / 人民邮电出版社 / 2013-2 / 39.00元
《Node即学即用》由休斯-克劳奇、威尔逊编著,《Node即学即用》讲解如何用Node构建可扩展因特网应用,是全面的实用指南,除了详细介绍Node提供的API外,还用大量篇幅介绍了服务器事件驱动开发的重要概念。内容涉及跨服务器的并发连接、非阻塞I/O和事件驱动的编程、如何支持各种数据库和数据存储工具、NodeAPI的使用示例等。适合对JavaScript及编程有一定程度了解的读者阅读。一起来看看 《Node即学即用》 这本书的介绍吧!