IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Python Matplotlib绘制漂亮的K线图,利用Tushare绘制K线图 -> 正文阅读

[人工智能]Python Matplotlib绘制漂亮的K线图,利用Tushare绘制K线图

1 引言

做量化分析,难免要将自己的某些指标等绘制在K线图上,或者对某些指标进行改造观察K线图和指标对应的走势关系。那么用Python如何绘制和炒股软件类似的效果呢。

2 准备工具

(1)数据源:Tushare(国内做量化研究高质量数据)

Tushare大数据社区

(2)常用指标计算:Ta-lib (离线下载安装链接如下)

https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib

(3)K线绘图工具:mpl_finance.py (下载链接如下)

https://download.csdn.net/download/yifengdongying/29738748

3 开始工作

3.1 导入依赖包

import mpl_finance
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import ticker
import talib

3.2?编制计算指标的函数

这里只计算了最常见的两个指标MACD、KDJ,量化小伙伴,可以自己进行加工改造,找到适合自己的指标。

# 利用talib计算MACD指标
def macd_cal(df):
    df['DIFF'], df['DEA'], df['MACD'] = talib.MACD(df['close'].values)
    df['MACD'] *= 2 #国内MACD需要乘以2
    return df


# 利用talib计算KDJ指标
def kdj_cal(df):
    df['kdj_k'], df['kdj_d'] = talib.STOCH(df['high'].values,
                                           df['low'].values,
                                           df['close'].values,
                                           fastk_period=9,
                                           slowk_period=5,
                                           slowk_matype=1,
                                           slowd_period=5,
                                           slowd_matype=1)  # 计算kdj的正确配置

    df.loc[:, 'kdj_j'] = 3.0 * df.loc[:, 'kdj_k'] - 2.0 * df.loc[:, 'kdj_d']
    return df

3.3?编制绘图的函数


# k线绘制
def ax_kline(ax, df):
    date_tickers = df['trade_date'].values

    def format_date(x, pos=None):
        # 由于前面股票数据在 date 这个位置传入的都是int
        # 因此 x=0,1,2,...
        # date_tickers 是所有日期的字符串形式列表
        if x < 0 or x > len(date_tickers) - 1:
            return ''
        return date_tickers[int(x)]

    date_len = len(df)
    dateLoc = int(date_len / 10 + 0.5)
    ax.xaxis.set_major_locator(ticker.MultipleLocator(dateLoc))
    ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
    ax.set_ylabel('K')
    ax.grid(True)
    plt.setp(ax.get_xticklabels(), visible=False)
    mpl_finance.candlestick_ochl(
        ax=ax,
        quotes=df[['iNum', 'open', 'close', 'high', 'low']].values,
        width=0.7,
        colorup='r',
        colordown='g',
        alpha=0.7)

    ax.set_title('%s' % (df['ts_code'].iloc[0]))


# kdj指标绘制
def ax_kdj(ax, df):
    ax.plot(df['iNum'], df[['kdj_k', 'kdj_d', 'kdj_j']])
    # make these tick labels invisible
    ax.set_ylabel('KDJ')
    ax.grid(True)
    plt.setp(ax.get_xticklabels(), visible=True)

    ax.set_title('KDJ:', loc='right')


# macd指标绘制
def ax_macd(ax, df):
    ax.bar(df['iNum'], df['MACD'], color='b')
    ax.plot(df['iNum'], df[['DIFF', 'DEA']])
    ax.set_ylabel('MACD')
    # ax.set_title('MACD_%s_%0.2f'%(df['ts_code'][0],success_rate_macd))
    ax.grid(True)
    plt.setp(ax.get_xticklabels(), visible=True)


# 绘图主程序
def kplot(df, index):
    '''
    df:  数据格式如下(实例): 
        ts_code         000001.SZ  
        trade_date       20190329
        open                12.26
        high                12.82
        low                 12.21
        close               12.82
        pre_close           12.22
        change                0.6
        pct_chg              4.91
        vol           1.66951e+06
        amount         2.1083e+06
        DIFF          -0.00807692
        DEA           -0.00448718
        MACD          -0.00717949
        kdj_k             46.7579
        kdj_d             47.4992
        kdj_j             45.2753
        Name: 20190329, dtype: object
    '''

    df = df.sort_values('trade_date')
    df['iNum'] = np.arange(len(df))

    if index == 'MACD':
        fig = plt.figure(figsize=[12, 8])
        ax1 = plt.axes([0.1, 0.3, 0.8, 0.6])
        ax_kline(ax1, df)
        ax2 = plt.axes([0.1, 0.1, 0.8, 0.2], sharex=ax1)
        ax_macd(ax2, df)

    elif index == 'KDJ':
        fig = plt.figure(figsize=[12, 8])
        ax1 = plt.axes([0.1, 0.3, 0.8, 0.6])
        ax_kline(ax1, df)
        ax2 = plt.axes([0.1, 0.1, 0.8, 0.2], sharex=ax1)
        ax_kdj(ax2, df)

    return fig

3.4 获取K线数据并绘图

if __name__ == '__main__':
    import tushare as ts

    ts.set_token('********需要用户自己去Tushare注册获取Token链接在第2章******')
    pro = ts.pro_api()
    df = ts.pro_bar(api=pro, ts_code='600036.SH', adj='qfq', start_date='20210301')
    print(df.shape)
    df = df.sort_values('trade_date')
    df['iNum'] = np.arange(len(df))
    df = macd_cal(df)
    df = kdj_cal(df)
    df['iNum'] = np.arange(len(df))
    date_tickers = df['trade_date']
    fig = kplot(df, 'MACD')
    plt.show(fig)

4 结果展示

4.1 K线图+MACD

4.2 K线图+KDJ

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:16:59  更:2021-10-09 16:19:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:41:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码