用Python的Pandas和Matplotlib繪製股票KDJ指標線

2020-12-14 紙鶴視界

我最近出了一本書,《基於股票大數據分析的Python入門實戰 視頻教學版》,京東連結:https://item.jd.com/69241653952.html,在其中給出了MACD,KDJ等指標圖的繪製方法。這裡將根據KDJ的算法,計算並繪製KDJ指標線。

1 KDJ指標的計算過程

KDJ指標也叫隨機指標,是由喬治·藍恩博士(George Lane)最早提出的。該指標集中包含了強弱指標、動量概念和移動平均線的優點,可以用來衡量股價脫離正常價格範圍的偏離程度。

KDJ指標的計算過程是,首先獲取指定周期(一般是9天)內出現過的股票最高價、最低價和最後一個交易日的收盤價,隨後通過它們三者間的比例關係來算出未成熟隨機值RSV,並在此基礎上再用平滑移動平均線的方式來計算K、D和J值。計算完成後,把KDJ的值繪成曲線圖,以此來預判股票走勢,具體的算法如下所示。

第一步:計算周期內(n日、n周等,n一般是9)的RSV值,RSV也叫未成熟隨機指標值,是計算K值、D值和J值的基礎。以n日周期計算單位為例,計算公式如下所示。

n日RSV =(Cn-Ln)/(Hn-Ln)× 100

其中,Cn是第n日(一般是最後一日)的收盤價,Ln是n日範圍內的最低價,Hn是n日範圍內的最高價,根據上述公式可知,RSV值的取值範圍是1到100。如果要計算n周的 RSV值,則Cn還是最後一日的收盤價,但Ln和Hn則是n周內的最低價和最高價。

第二步:根據RSV計算K和D值,方法如下。

當日K值 = 2/3 × 前一日K值 + 1/3 × 當日的RSV值

當日D值 = 2/3 × 前一日D值 + 1/3 × 當日K值

在計算過程中,如果沒有前一日K 值或D值,則可以用數字50來代替。

在實際使用過程中,一般是以9日為周期來計算KD線,根據上述公式,首先是計算出最近9日的RSV值,即未成熟隨機值,計算公式是9日RSV = (C-L9)÷(H9-L9)× 100。其中各項參數含義在步驟一中已經提到,其次再按本步驟所示計算當日的K和D值。

需要說明的是,上式中的平滑因子2/3和1/3是可以更改的,不過在股市交易實踐中,這兩個值已經被默認設置為2/3和1/3。

第三步:計算J值。J指標的計算公式為:J = 3×K - 2×D。從使用角度來看,J的實質是反映K值和D值的乖離程度,它的範圍上可超過100,下可低於0。

最早的KDJ指標只有K線和D線兩條線,那個時候也被稱為KD指標,隨著分析技術的發展,KD指標逐漸演變成KDJ指標,引入J指標後,能提高KDJ指標預判行情的能力。

在按上述三個步驟計算出每天的K、D和J三個值之後,把它們連接起來,就可以看到KDJ指標線了。

2 繪製靜態的KDJ指標線

根據上節給出的KDJ算法,在下面的drawKDJ.py範例程序中將繪製股票「金石資源」(股票代碼為603505)從2018年9月到2019年5月這段時間內的KDJ走勢圖。

!/usr/bin/env python2 # coding=utf-83 import matplotlib.pyplot as plt4 import pandas as pd5 # 計算KDJ6 def calKDJ(df):7 df['MinLow'] = df['Low'].rolling(9, min_periods=9).min()8 # 填充NaN數據9 df['MinLow'].fillna(value = df['Low'].expanding().min(), inplace = True)10 df['MaxHigh'] = df['High'].rolling(9, min_periods=9).max()11 df['MaxHigh'].fillna(value = df['High'].expanding().max(), inplace = True)12 df['RSV'] = (df['Close'] - df['MinLow']) / (df['MaxHigh'] - df['MinLow']) * 10013 # 通過for循環依次計算每個交易日的KDJ值14for i in range(len(df)):15if i==0: # 第一天16 df.ix[i,'K']=5017 df.ix[i,'D']=5018if i>0:19 df.ix[i,'K']=df.ix[i-1,'K']*2/3 + 1/3*df.ix[i,'RSV']20 df.ix[i,'D']=df.ix[i-1,'D']*2/3 + 1/3*df.ix[i,'K']21 df.ix[i,'J']=3*df.ix[i,'K']-2*df.ix[i,'D']22return df

從第6行到第22行程序語句定義的calKDJ方法中,將根據輸入參數df,計算指定時間範圍內的KDJ值。

具體的計算步驟是,在第8行中通過df['Low'].rolling(9, min_periods=9).min(),把每一行(即每個交易日)的 'MinLow' 屬性值設置為9天內收盤價(Low)的最小值。

如果只執行這句,第1到第8個交易日的MinLow屬性值將會是NaN,所以要通過第9行的程序代碼,把這些交易日的MinLow屬性值設置為9天內收盤價(Low)的最小值。同理,通過第10行的程序代碼,把每個交易日的 'MaxHigh' 屬性值設置為9天內的最高價,同樣通過第11行的fillna方法,填充前8天的 'MaxHigh' 屬性值。隨後在第12行中根據算法計算每個交易日的RSV值。

在算完RSV值後,通過第14行的for循環,依次遍歷每個交易日,在遍歷時根據KDJ的算法分別計算出每個交易日對應的KDJ值。

請注意,如果是第1個交易日,則在第16行和第17行的程序代碼中把 K值和D值設置為默認的50,如果不是第1交易日,則通過第19行和第20行的算法計算K值和D值。計算完K和D的值以後,再通過第21行的程序代碼計算出每個交易日的J值。

從上述代碼中,可以看到關於DataFrame對象的三個操作技巧:

第一,如第9行所示,如果要把修改後的數據寫回到DataFrame中,必須加上inplace = True的參數;

第二,在第12行中,df['Close']等變量值是以列為單位,也就是說,在DataFrame中,可以直接以列為單位進行操作;

第三,在第16行的代碼df.ix[i,'K']=50,這裡用到的是ix通過索引值和標籤值來訪問對象,而實現類似功能的loc和iloc方法只能通過索引值來訪問。

繪製KDJ線24 def drawKDJ():25 df = pd.read_csv('D:/stockData/ch8/6035052018-09-012019-05-31.csv',encoding='gbk')26 stockDataFrame = calKDJ(df)27 print(stockDataFrame)28 # 開始繪圖29 plt.figure()30 stockDataFrame['K'].plot(color="blue",label='K')31 stockDataFrame['D'].plot(color="green",label='D')32 stockDataFrame['J'].plot(color="purple",label='J')33 plt.legend(loc='best') # 繪製圖例34 # 設置x軸坐標的標籤和旋轉角度 major_index=stockDataFrame.index[stockDataFrame.index%10==0]35 major_xtics=stockDataFrame['Date'][stockDataFrame.index%10==0]36 plt.xticks(major_index,major_xtics)37 plt.setp(plt.gca().get_xticklabels(), rotation=30)38 # 帶網格線,且設置了網格樣式39 plt.grid(linestyle='-.')40 plt.title("金石資源的KDJ圖")41 plt.rcParams['font.sans-serif']=['SimHei']42 plt.show()43 # 調用方法44 drawKDJ()

在第24行的drawKDJ方法中實現了繪製KDJ的操作。其中的關鍵步驟是,通過第25行的程序代碼從指定的csv文件中讀取股票交易數據,隨後在第30行到第32行的程序代碼中,調用plot方法分別用三種不同的顏色繪製了KDJ線,因為在繪製時通過label參數設置了標籤,所以可以執行第33行的程序代碼來繪製圖例。

在第34行到第37行的代碼中設置了x軸的文字標籤和旋轉角度,這部分代碼與之前繪製MACD指標線的代碼很相似,為了不在x軸上過多地顯示日期,於是用stockDataFrame.index%10 == 0的方式,只顯示索引值是10的倍數的日期。

在第44行調用了drawKDJ方法將KDJ繪製出來。運行這個範例程序之後,即可看到如圖所示的結果,其中KDJ三根曲線分別用藍色、綠色和紫色繪製出來(因為本書採用黑白印刷而看不出彩色,請讀者在自己的計算機上運行這個範例程序)。

下圖是從股票軟體中得到的股票「金石資源」在同時間段內的KDJ走勢圖,兩者的變化趨勢基本一致。

本文可以轉載,轉載時請全文轉載,別有刪節,並用連結的形式給出原文連結。否則的話,可能會遇到出版社的維權。

文本相關連結:

用Python的Pandas和Matplotlib繪製股票唐奇安通道,布林帶通道和鱷魚組線

用Python爬取股票數據,繪製K線和均線並用機器學習預測股價(來自我出的書)

用Python語言繪製股市OBV指標效果

程式設計師如何高效學Python,如何高效用Python掙錢

用matplotlib和pandas繪製股票MACD指標圖,並驗證化交易策略

向大家介紹我的新書:《基於股票大數據分析的Python入門實戰》

通過機器學習的線性回歸算法預測股票走勢(用Python實現)

在我的新書裡,嘗試著用股票案例講述Python爬蟲大數據可視化等知識

以股票RSI指標為例,學習Python發送郵件功能(含RSI指標確定賣點策略)

以預測股票漲跌案例入門基於SVM的機器學習

用python的matplotlib和numpy庫繪製股票K線均線和成交量的整合效果(含量化驗證交易策略代碼)

用python的matplotlib和numpy庫繪製股票K線均線的整合效果(含從網絡接口爬取數據和驗證交易策略代碼)

相關焦點

  • python matplotlib模塊
    面向對象畫圖matplotlib API包含有三層,Artist層處理所有的高層結構,例如處理圖表、文字和曲線等的繪製和布局。通常我們只和Artist打交道,而不需要關心底層的繪製細節。Matplotlib.pyplot和matplotlib.pylab的區別pylab結合了pyplot和numpy,對交互式使用來說比較方便,既可以畫圖又可以進行簡單的計算。但是,對於一個項目來說,建議分別倒入使用6.
  • 想用Python做數據可視化?先邁過這個「坎」
    其實,在大多數情況下,可視化工具可以在沒有pandas的情況下使用,但pandas+可視化工具的組合很常見,這是一個很好的起始點。 pandas 我通常會用pandas DataFrame開始製作各種繪圖的工作。這樣有一個優勢,就是pandas提供內置的繪圖功能,它是matplotlib之上的一層。
  • 創造生動有趣的動畫,Matplotlib庫大顯身手
    用Matplotlib模擬雨動畫是呈現各種現象的有趣方式。在描述像過去幾年的股票價格、過去十年的氣候變化、季節性和趨勢等時間序列數據時,與靜態圖相比,動畫更能說明問題。此圖由Matplotlib繪圖庫繪製而成,該繪圖庫常常被認為是python可視化數據包的原始數據組。Matplotlib通過50個分散點的比例和不透明度來模擬雨滴落在平面上的情景。如今,Plotly、Bokeh、Altair等一系列可視化工具均為Python中強大的可視化工具。這些庫可實現最先進的動畫和交互動作。但是,本文重點在於研究資料庫的一個方面——動畫。同時,我們也將關注實現動畫的方法。
  • Matplotlib繪製六種可視化圖表,值得收藏
    折線圖繪製折線圖,如果你數據不是很多的話,畫出來的圖將是曲折狀態,但一旦你的數據集大起來,比如下面我們的示例,有100個點,所以我們用肉眼看到的將是一條平滑的曲線。這裡我繪製三條線,只要執行三次plt.plot就可以了。
  • 使用Matplotlib繪製堆積條形圖
    import numpy as npimport pandas as pdimport matplotlib.pyplot as pltdf = pd.read_csv('../data/vgsales.csv')df.head()我們接下來要將平臺和地區的銷售情況可視化。
  • 超硬核的 Python 數據可視化教程!
    matplotlibpython中最基本的作圖庫就是matplotlib,是一個最基礎的Python可視化庫,一般都是從matplotlib上手Python數據可視化,然後開始做縱向與橫向拓展。Seaborn是一個基於matplotlib的高級可視化效果庫,針對的點主要是數據挖掘和機器學習中的變量特徵選取,seaborn可以用短小的代碼去繪製描述更多維度數據的可視化效果圖其他庫還包括Bokeh(是一個用於做瀏覽器端交互可視化的庫,實現分析師與數據的交互);Mapbox(處理地理數據引擎更強的可視化工具庫)等等本篇文章主要使用
  • Python繪圖筆記:繪製四色散點圖和誤差條形圖
    figure1#導入繪製散點圖所需要的包import matplotlib.pyplot as pltfrom numpy.random import rand#生成繪圖所需的圖紙fig, ax = plt.subplots
  • 如何用pandas更快地進行數據可視化?
    作者:劉早起來源:早起Python(公眾號)如果你經常使用Python進行數據分析,那麼對於pandas一定不會陌生,但是Pandas除了在數據處理上大放異彩,隨著版本的不斷更新,Pandas的繪圖功能在某些情況下甚至要比matplotlib更加適用,本文就將介紹如何用
  • matplotlib、seaborn 展示中文字體
    修改matplotlibrcvim /home/xxx/venv/lib64/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc取消注釋font.family和font.sans-serif ,然後在font.sans-serif後追加你剛才的字符集名:# 獲取字符集名
  • 重磅:包郵寄送《Python數據可視化之美》
    所以很有必要系統性地介紹python的繪圖語法系統,包括最基礎也最常用的matplotlib包、常用於統計分析的seaborn、最新出現類似R ggplot2語法的plotnine以及用於地理空間數據可視化的basemap包。在先介紹數據可視化基礎理論後,本書系統性地介紹了幾乎所有常見的二維和三維圖表的繪製方法,包括簡單的柱形圖系列、條形圖系列、折線圖系列,地圖系列等。
  • 這10 個 Python 可視化工具,你都用過?
    1、matplotlib 它的設計和在1980年代被設計的商業化程序語言MATLAB非常接近。 由於 matplotlib 是第一個 Python 可視化程序庫,有許多別的程序庫都是建立在它的基礎上或者直接調用它。 比如pandas和Seaborn就是matplotlib的外包,它們讓你能用更少的代碼去調用 matplotlib的方法。
  • python多重線性回歸分析
    Linear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • 機器學習測試筆記(3)——Matplotlib
    它也可以和圖形工具包一起使用,如PyQt和wxPython。plt.rcParams['font.stretch'] = 'normal'plt.rcParams['font.style'] = 'normal'plt.rcParams['font.variant'] = 'normal'plt.rcParams['font.weight'] = 'normal' matplotlib.pyplot.legend
  • 使用Pandas,Seaborn和Plotly繪製漂亮的圖表
    我熟悉的命令,模式和概念越多,那麼所有事情就越有意義。Matplotlib使用Python進行繪圖的情況恰恰相反。 最初,我用Matplotlib創建的幾乎每個圖表都看起來像是八十年代逃脫的罪犯。 更糟糕的是,要創建這些可憎的東西,我通常不得不在Stackoverflow上花費數小時。
  • 股票kdj指標是什麼意思 馬上來科普一下
    炒股之前,首先得要了解股市中相關入門知識,除了簡單的炒股術語之外,一些分析股票走勢的技術指標也是需要一定的了解,比如,kdj指標。至於股票kdj指標是什麼意思?下面我們馬上來科普一下吧!kdj指標作用 其實,在股票市場上,KDJ指標又叫隨機指標,屬於一種比較新穎、又實用的技術分析指標,原先用於期貨市場的分析,後來才被廣泛用於股市的中短期趨勢分析
  • 漂亮圖表也可信手拈來,一文學會用Python繪製堆積折線圖
    今天咱們還是接著上次的話題,繼續和大家聊聊關於Python繪圖相關的東東哦,上次已經和大家討論完了如何給自己所繪製的圖表中添加裝飾線以及修改裝飾線密度的方法,今天呢,咱們再聊點的新的東東哦,還是和大家繼續深耕Python經典的matplotlib庫哦!好啦,咱們就開始吧!
  • Python數據可視化:用Seaborn繪製高端玩家版散點圖
    今天我們畫普通散點圖、邊際分布線性回歸散點圖、散點圖矩陣、帶線性回歸最佳擬合線的散點圖本文示例多是來自官方文檔,這裡我只是做一下整理,讓大家知道散點圖的不同玩法,不要再繪製老掉牙的普通玩家版散點圖了。普通玩家繪製的散點圖在 matplotlib 中,可以使用 plt.scatterplot() 方便地執行此操作。
  • 股票kdj線怎麼看和使用?股票KDJ指標如何分析
    KDJ指標是指隨機指標,它起源於期貨市場的分析,後來被廣泛地用於股市的中短期趨勢分析當中,是期貨和股票市場當中比較常用的一種分析技術。這一指標經常出現K線圖下的附圖中,接下來我們看一下股票KDJ指標詳解的內容。
  • Python告訴你NBA球星都喜歡在哪個位置出手?
    相關的接口和文檔你可以從這個項目裡查看:nba_py - stats.nba.com API for pythonhttps://github.com/seemethere/nba_py/通過以下接口,我們可以獲取某個球員在指定賽季的投籃詳細數據:https://stats.nba.com/stats/shotchartdetail?
  • 職悠學堂 R vs Python:硬碰硬的數據分析
    計算每個指標的均值讓我們為每個指標計算均值。如你所見,數據列以類似fg(field goals made)和ast(assists)的名稱命名。它們都是球員的賽季統計指標。如果想得到指標的完整說明,參閱這裡。