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年前的数据,甚至按以前直接计算的方式自己填充了值,让数据一一对应,不过就算完整前面几日数据也是没有参考意义的。记住凡是曲线中有任何移动均线的参数,都会造成前部分有空缺值或无效值,这是无法避免的。

相关文章
|
数据可视化 数据挖掘 数据安全/隐私保护
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
时间序列动量策略(TSMOM)是一种基于资产价格趋势的量化交易方法,通过建立多头或空头头寸捕捉市场惯性。然而,传统TSMOM策略因风险敞口不稳定而面临收益波动问题。波动率调整技术通过动态调节头寸规模,维持恒定风险水平,优化了策略表现。本文系统分析了波动率调整TSMOM的原理、实施步骤及优势,强调其在现代量化投资中的重要地位,并探讨关键参数设定与实际应用考量,为投资者提供更平稳的风险管理体验。
792 4
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
|
存储 程序员 Python
小白也能用的代码!1行Python,把PPT转成1张长图
大家好,我是程序员晚枫。今天介绍`python-office`库的新功能:仅用1行Python代码将PPT转为单张长图。
365 11
 小白也能用的代码!1行Python,把PPT转成1张长图
|
算法 Python
Python 大神修炼手册:图的深度优先&广度优先遍历,深入骨髓的解析
【7月更文挑战第12天】Python进阶必学:DFS和BFS图遍历算法。理解图概念,用邻接表建无向图,实现DFS和BFS。DFS适用于查找路径,BFS解决最短路径。通过实例代码加深理解,提升编程技能。
325 4
|
算法 Python
逆袭之路!用 Python 玩转图的 DFS 与 BFS,让数据结构难题无处遁形
【7月更文挑战第12天】图的遍历利器:DFS 和 BFS。Python 中,图可表示为邻接表或矩阵。DFS 沿路径深入,回溯时遍历所有可达顶点,适合找路径和环。BFS 层次遍历,先近后远,解决最短路径问题。两者在迷宫、网络路由等场景各显神通。通过练习,掌握这些算法,图处理将游刃有余。
384 3
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
336 1
|
存储 算法 搜索推荐
Python高手必备!揭秘图(Graph)的N种风骚表示法,让你的代码瞬间高大上
【7月更文挑战第10天】在Python中,图数据结构通过邻接矩阵、邻接表、边列表和邻接集来表示,用于社交网络分析和路径查找等。邻接矩阵用二维数组存储连接,邻接表仅存储每个节点的邻居,节省空间。边列表列出所有边,而邻接集用集合确保邻居唯一性。选择合适表示法能提升代码效率和可读性,展现编程技巧。
381 1
|
数据采集 JSON 数据格式
Python爬取猪肉价格走势
Python爬取猪肉价格走势
429 0
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现深度学习模型:图神经网络(GNN)
使用Python实现深度学习模型:图神经网络(GNN)
1585 1
|
机器学习/深度学习 数据采集 API
|
机器学习/深度学习 人工智能 自然语言处理
好书推荐丨AI时代Python量化交易实战:ChatGPT让量化交易插上翅膀
好书推荐丨AI时代Python量化交易实战:ChatGPT让量化交易插上翅膀
1001 2

推荐镜像

更多