python股票量化交易(9)---使用TA-Lib库实现股价走势对比图

简介: python股票量化交易(9)---使用TA-Lib库实现股价走势对比图

前言


在众多的市场股票交易软件中,每个界面并不仅仅只显示一个指标图,往往股票交易软件会将所有指标图并列放置达到对比的效果,这样的好处是,能更加直观的看到各种指标,同时结合各种指标进行分析。就像前面博文一样,单一指标往往是错误的,并不具有参考价值。


所以,本篇博文将使用TA-Lib库实现K线、均线、成交量、KDJ、MACD的对比指标汇总图。


计算各类指标


毫无疑问,我们如果需要绘制这些指标,首先要做的就是获取绘制这些指标的基本参数。下面,我们将一一通过TA-Lib库进行计算。


(1)首先,我们需要获取一个股票半年的数据,以歌尔股份为例:

import akshare as ak
df = ak.stock_zh_a_daily(symbol="sz002241", start_date="20200701", end_date="20210130",
                                 adjust="qfq")
df.to_excel("歌尔股份year.xlsx")


(2)接着,计算各类均线,比如常用的10,30,60日均线。

import pandas as pd
import talib
df = pd.read_excel("歌尔股份year.xlsx")
df["SMA10"]=talib.SMA(df['close'],timeperiod=10)
df["SMA30"]=talib.SMA(df['close'],timeperiod=30)
df["SMA60"]=talib.SMA(df['close'],timeperiod=60)
df['SMA10'].fillna(method="bfill",inplace=True)
df['SMA30'].fillna(method="bfill",inplace=True)
df['SMA60'].fillna(method="bfill",inplace=True)


(3)计算成交量


red_pred = np.where(df["close"] > df["open"], df["volume"], 0)
blue_pred = np.where(df["close"] < df["open"], df["volume"], 0)


(4)计算KDJ

df['K'], df['D'] = talib.STOCH(df['high'].values, df['low'].values, df['close'].values, fastk_period=9, slowk_period=3,
                               slowk_matype=0, slowd_period=3, slowd_matype=0)
df['K'].fillna(0,inplace=True)
df['D'].fillna(0,inplace=True)
df['J']=3*df['K']-2*df['D']


(5)计算MACD

dif, dea, bar = talib.MACD(df['close'].values, fastperiod=12, slowperiod=26, signalperiod=9)
dif[np.isnan(dif)], dea[np.isnan(dea)], bar[np.isnan(bar)] = 0, 0, 0
red_bar = np.where(bar > 0, 2 * bar, 0)
blue_bar = np.where(bar < 0, 2 * bar, 0)


绘图


这里K线图与均线图为最上面的一张图,成交量在K线图下方,KDJ图在成交量下方,MACD在KDJ图下方,所以整个图是4行1列。首先,我们创建绘制图形的画布:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import mpl_finance as mpf
import talib
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
fig, axes = plt.subplots(4, 1, sharex=True, figsize=(15, 10))
ax1, ax2, ax3, ax4 = axes.flatten()


(1)绘制K线图与均线图


mpf.candlestick2_ochl(ax1, df["open"], df["close"], df["high"], df["low"], width=0.6, colorup='r',
                      colordown='green',
                      alpha=1.0)
ax1.plot(np.arange(0, len(df)), df['SMA10'])  # 绘制10日均线
ax1.plot(np.arange(0, len(df)), df['SMA30'])  # 绘制30日均线
ax1.plot(np.arange(0, len(df)), df['SMA60'])  # 绘制60日均线
ax1.set(ylabel=u"K线图")


(2)绘制成交量

ax2.bar(np.arange(0, len(df)), red_pred, facecolor="red")
ax2.bar(np.arange(0, len(df)), blue_pred, facecolor="blue")
ax2.set(ylabel=u"成交量")


(3)绘制KDJ

ax3.plot(np.arange(0,len(df["date"])), df["K"], label="K")
ax3.plot(np.arange(0,len(df["date"])), df["D"], label="D")
ax3.plot(np.arange(0,len(df["date"])), df["J"], label="J")
ax3.legend()
ax3.set(ylabel=u"KDJ")


(4)绘制MACD

ax4.plot(np.arange(0, len(df)), dif)
ax4.plot(np.arange(0, len(df)), dea)
ax4.bar(np.arange(0, len(df)), red_bar, color="red")
ax4.bar(np.arange(0, len(df)), blue_bar, color="blue")
ax4.set(ylabel=u"MACD")
ax1.xaxis.set_major_locator(ticker.MaxNLocator(20))
def format_date(x, pos=None):
    if x < 0 or x > len(df['date']) - 1:
        return ''
    return df['date'][int(x)]
ax1.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')
plt.show()


运行之后,显示的效果图如下图所示:

特别备注:有的小伙伴可能非常疑惑,为什么其他股票软件都是一一对应的,而你的KDJ与MACD前面为何出现空缺值?其实真正的KDJ,MACD图前面都有一部分空缺,而其他软件因为时间跨度很长,一般用户不会去看10年前的数据,甚至按以前直接计算的方式自己填充了值,让数据一一对应,不过就算完整前面几日数据也是没有参考意义的。记住凡是曲线中有任何移动均线的参数,都会造成前部分有空缺值或无效值,这是无法避免的。

相关文章
|
8天前
|
XML JSON 数据库
Python的标准库
Python的标准库
121 77
|
23天前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
70 4
数据分析的 10 个最佳 Python 库
|
9天前
|
XML JSON 数据库
Python的标准库
Python的标准库
38 11
|
22天前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
89 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
9天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
48 8
|
17天前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
28 4
|
25天前
|
测试技术 Python
Python中的异步编程与`asyncio`库
Python中的异步编程与`asyncio`库
|
15天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
14天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
97 80