当前位置:首页>股票

python股票 k(Python量化教程:不得不学的K线图「代码复制可用」)

日期:2023-11-07

来源:玫瑰财经网

浏览:

    不管是对量化分析师还是普通的投资者来说,K线图(蜡烛图)都是一种很经典、很重要的工具。在K线图中,它会绘制每天的最高价、最低价、开盘价和收盘价,这对于我们理解股票的趋势以及每天的多空对比很有帮助。

    一般来说,我们会从各大券商平台获取K线图,但是这种情况下获得的K线图往往不能灵活调整,也不能适应复杂多变的生产需求。因此我们有必要学习一下如何使用Python绘制K线图。

    导入必要库

    需要说明的是,这里mpl_finance是原来的matplotlib.finance,但是现在独立出来了(而且好像没什么人维护更新了),我们将会使用它提供的方法来绘制K线图;tushare是用来在线获取股票数据的库;matplotlib.ticker中有个FuncFormatter()方法可以帮助我们调整坐标轴;matplotlib.pylab.date2num可以帮助我们将日期数据进行必要的转化。

    import mpl_financeimport tushare as tsimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltfrom matplotlib import tickerfrom matplotlib.pylab import date2numimport numpy as npsns.set()pro = ts.pro_api()
    Python量化教程:不得不学的K线图「代码复制可用」

    获取行情数据

    我们以上证综指18年9月份以来的行情为例。

    • 这里我们对数据按照日期做了个排序,因为tushare默认提供的数据是最新的数据在最前边;
    • 我们用pd.to_datetime()将字符串日期转换为pandas Timestamp格式(类似datetime.datetime),然后用date2num转换为matplotlib需要的格式。
    • 然后我们另外添加一列dates,这一列用于解决mpl_finance中存在的一些问题,后边我们会详细解释。
    Python量化教程:不得不学的K线图「代码复制可用」

    绘制K线图

    我们先使用mpl_finance绘制一下,看看是否一切正常。

    fig, ax = plt.subplots(figsize=(10,5))mpl_finance.candlestick_ochl( ax=ax, quotes=df[['trade_date', 'open', 'close', 'high', 'low']].values, width=0.7, colorup='r', colordown='g', alpha=0.7)ax.xaxis_date()plt.xticks(rotation=30);
    Python量化教程:不得不学的K线图「代码复制可用」

    Python量化教程:不得不学的K线图「代码复制可用」

    可以看到,所有的节假日包括周末,在这里都会显示为空白,这对于我们图形的连续性非常不友好,因此我们要解决掉他们。

    解决空白问题

    def format_date(x,pos): if x<0 or x>len(date_tickers)-1: return '' return date_tickers[int(x)]date_tickers = df.trade_date2.valuesfig, ax = plt.subplots(figsize=(10,5))ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))mpl_finance.candlestick_ochl( ax=ax, quotes=df[['dates', 'open', 'close', 'high', 'low']].values, width=0.7, colorup='r', colordown='g', alpha=0.7)ax.set_title('上证综指K线图(2018.9-)', fontsize=20);
    Python量化教程:不得不学的K线图「代码复制可用」

    Python量化教程:不得不学的K线图「代码复制可用」

    可以看到,空白问题完美解决,这里我们解释一下。由于matplotlib会将日期数据理解为连续数据,而连续数据之间的间距是有意义的,所以非交易日即使没有数据,在坐标轴上还是会体现出来。连续多少个非交易日,在坐标轴上就对应了多少个小格子,但这些小格子上方并没有相应的蜡烛图。

    明白了它的原理,我们就可以对症下药了。我们可以给横坐标(日期)传入连续的、固定间距的数据,先保证K线图的绘制是连续的;然后生成一个保存有正确日期数据的列表,接下来,我们根据坐标轴上的数据去取对应的正确的日期,并替换为坐标轴上的标签即可。

    上边format_date函数就是这个作用。由于前边我们给dates列生成了从0开始的序列连续数据,因此我们可以直接把它当作索引,从真正的日期列表里去取对应的数据。在这里我们要使用matplotlib.ticker.FuncFormattter()方法,它允许我们指定一个格式化坐标轴标签的函数,在这个函数里,我们需要接受坐标轴的值以及位置,并返回自定义的标签。

    你学会了吗

    当然,一个完整的K线图到这里并没有结束,后边我们会考虑加入均线、成交量等元素,感兴趣的同学欢迎关注哦!

相关文章阅读

Copyright (c) 2022 玫瑰财经网 版权所有

备案号:冀ICP备17019481号

玫瑰财经网发布此信息的目的在于传播更多信息,与本站立场无关。玫瑰财经网不保证该信息(包含但不限于文字、视频、音频、数据及图表)全部或者部分内容的准确性、真实性、完整性、有效性、及时性、原创性等。
相关信息并未经过本网站证实,不对您构成任何投资建议,据此操作,风险自担。