Plotly中绘制三种经典的股票交易图表(含视频讲解)

article/2025/10/28 17:49:10

作者:Lemon

来源:Python数据之道


Plotly中绘制三种经典的

股票交易图表(含视频讲解)

大家好,我是 Lemon 。

背景

前一段时间, Lemon 发了一期视频,分享了 Plotly 和 Dash 在投资领域的应用案例。

点击上面图片查看视频

看完视频后,有同学提了一个问题:

股票价格曲线,带可调节的时间条的图怎么绘制?

今天 Lemon 来详细的分享下,这类图如何绘制,一共会讲解 3 类图形,分别是 面积曲线图、蜡烛图、OHLC图。这三种类型的图在投资中会经常遇到。

Lemon 录制了一个视频,来说明通过本文绘制的图表效果:

数据来源

本文的数据来自开源项目 tushare, 从 tushare 中获取数据,首先要进行注册获取 token(一串字母和数字组成的文本),然后才可以获取到数据,大家可以通过以下链接来注册(也可以点击文末的“阅读原文”):

https://tushare.pro/register?reg=129033

数据获取

tushare 中注册后,通过 “个人主页”——“接口TOKEN” 可以找到自己的 token 值,界面如下:

tushare

复制 token 值,然后在代码中进行如下设置:

# 设置 token
# tushare 注册地址:https://tushare.pro/register?reg=129033
# 以上方法只需要在第一次或者token失效后调用,完成调取tushare数据凭证的设置,正常情况下不需要重复设置。
ts.set_token('你的token值')pro = ts.pro_api()

在设置好 token 值后,我们就可以开始获取数据,这里以获取沪深300指数为例,来演示三种类型的图形绘制。

数据获取及初步整理如下:

# plotly-fin-candlestick.ipynb
# 获取沪深300指数行情数据, asset='I', I 表示 index,即指数# d_today = dt.date.today().strftime('%Y%m%d')df_300 = ts.pro_bar(ts_code='000300.SH', asset='I', start_date='20180101', 
#     end_date=d_today,end_date='20210119'
)# 设置时间格式
df_300['trade_date'] = pd.to_datetime(df_300['trade_date'])
df_300 = df_300.set_index('trade_date')df_300

面积曲线图

在常见的股票软件时,查看分时图,大部分是使用的面积曲线图,这类图形是展示股票数据常用的类型之一。

默认的面积曲线图

在 Plotly 中,可以使用 plotly express 的 area 图来绘制面积曲线图。

代码如下:

# 面积曲线图area_chart = px.area(df_300['close'], title = '沪深300')area_chart.update_xaxes(title_text = '日期')
area_chart.update_yaxes(title_text = '沪深300收盘价', # tickprefix = '$')
area_chart.update_layout(showlegend = False)# Pycharm,VS Code, Spider 等模式下
# Jupyter Notebook 下也可以用
# plot(area_chart,filename='tmp/hushen300-area.html')# 在 Jupyter Notebook 中,直接使用 show()  来查看结果
area_chart.show()

绘制效果如下:

这里说明下:

  • show() 的作用是使绘制的图形在 Jupyter notebook 中显示;

  • 如果想在浏览器中使用,可以使用代码 plot(area_chart,filename='tmp/hushen300-area.html') ,该代码可以在 Jupyter notebook 、PyCharm、VS Code 等编辑器中使用。

对面积曲线图进行个性化修改

对于上面的面积曲线图,我们也可以对其进行一些个性化的修改,比如标题居中、添加可以调节的时间栏、设置y轴数值范围等。

具体代码如下:

# 面积曲线图,个性化修改y_min = df_300['close'].min()  
y_max = df_300['close'].max()c_area = px.area(df_300['close'], title = '沪深300')c_area.update_xaxes(title_text = '日期',rangeslider_visible = True,rangeselector = dict(buttons = list([dict(count = 1, label = '1M', step = 'month', stepmode = 'backward'),dict(count = 6, label = '6M', step = 'month', stepmode = 'backward'),dict(count = 1, label = 'YTD', step = 'year', stepmode = 'todate'),dict(count = 1, label = '1Y', step = 'year', stepmode = 'backward'),dict(step = 'all')])))c_area.update_yaxes(title_text = '沪深300收盘价', # tickprefix = '¥')
c_area.update_layout(showlegend = False,title=dict(text='沪深300',font=dict(size=28,),x=0.5),yaxis=dict(range=[y_min*0.9,y_max*1.05]), # 设置 y 轴的范围)# Pycharm,VS Code, Spider 等模式下
# Jupyter Notebook 下也可以用
# plot(c_area,filename='tmp/hushen300_area_update.html')c_area.show()

上述代码的绘制效果如下:

上图中:

  • 可调节的时间栏是通过在 update_xaxes 中设置参数 rangeslider_visible = True 来实现的;

  • 左上角的时间快速选择按钮,是通过在 update_xaxes 中设置参数 rangeselector 来实现的;

  • 标题居中和y轴数值范围设置,是通过在 update_layout 中分别设置参数 'title' 和 'yaxis' 来实现的。

蜡烛图

蜡烛图又名 k线图、日本线 或者 日本K线图。

这种图表通常用作交易工具,用来显示和分析证券、衍生工具、外汇货币、股票、债券等商品随着时间的价格变动。

蜡烛图通过使用烛台式的符号来显示多种价格信息,例如开盘价、收盘价、最高价和最低价,每个代表单一时间段(每分钟、每小时、每天或每月)的交易活动。每个烛台符号沿着 X 轴上的时间刻度绘制,显示随着时间推移的交易活动。

蜡烛图的示意图如下:

默认的蜡烛图

在 Plotly 中,可以使用 candlestick 图来绘制蜡烛图。

具体代码如下:

# 蜡烛图,又称 K线 或 日本线candlestick = go.Figure(data = [go.Candlestick(x = df_300.index, open = df_300['open'], high = df_300['high'], low = df_300['low'], close = df_300['close'])])candlestick.update_layout(xaxis_rangeslider_visible = False, title = '沪深300')
candlestick.update_xaxes(title_text = '日期')
candlestick.update_yaxes(title_text = '沪深300价格')# plot(candlestick,filename='tmp/hushen300_candlestick.html')candlestick.show()

绘制效果如下:

需要说明下,上图中的颜色,对应的是红跌绿涨,跟咱们国家通常的红涨绿跌刚好是相反的。后面将提到的 OHLC 图,在 Plotly 中也是 红跌绿涨,这个习惯跟美国、香港等区域是一致的。

对蜡烛图进行个性化修改

同样的,我们可以对蜡烛图进行一些个性化的修改,同样涉及标题、可调节的时间栏、y轴数值范围等。

具体代码如下:

# 蜡烛图,个性化修改c_candlestick = go.Figure(data = [go.Candlestick(x = df_300.index, open = df_300['open'], high = df_300['high'], low = df_300['low'], close = df_300['close'])])c_candlestick.update_xaxes(title_text = '日期',rangeslider_visible = True,rangeselector = dict(buttons = list([dict(count = 1, label = '1M', step = 'month', stepmode = 'backward'),dict(count = 6, label = '6M', step = 'month', stepmode = 'backward'),dict(count = 1, label = 'YTD', step = 'year', stepmode = 'todate'),dict(count = 1, label = '1Y', step = 'year', stepmode = 'backward'),dict(step = 'all')])))c_candlestick.update_layout(title = {'text': '沪深300','y':0.9,'x':0.5,
#         'xanchor': 'center',
#         'yanchor': 'top'})
c_candlestick.update_yaxes(title_text = '沪深300价格')# plot(c_candlestick,filename='tmp/hushen300_candlestick_update1.html')c_candlestick.show()

绘制效果如下:

各个设置参数的说明,与前面提到的面积曲线图是类似的,这里不再赘述。

对于上面这个图,有一个地方需要说明下,当我们把时间范围缩小,比如最近1个月,会发现蜡烛图是不连续的,其中有周六日和假期是跳跃的。

在绘制股票曲线时经常会遇到这类问题,我们需要绘制的图形只包含交易日,这样的图表才是符合实际情况的。因此,我们需要在 Plotly 中也实现这个功能。

可以通过在 update_xaxes 设置参数 rangebreaks 来实现,实现的代码如下:

c_candlestick.update_xaxes(rangebreaks=[dict(bounds=["sat", "mon"]), # 隐藏周六、周日dict(values=["2021-01-01",]+holidays)  # 隐藏特定假期]
)

这里需要提醒下,

  • 上面的 boundsvalues 都是list 类型;

  • values 中的元素,字符串格式为 %Y-%m-%d,比如 "2021-01-01" 。

结合标题、时间栏、y轴数值范围、隐藏节假日一起的完整代码如下:

# 蜡烛图,个性化修改,隐藏周六日以及节假日c_candlestick = go.Figure(data = [go.Candlestick(x = df_300.index, open = df_300['open'], high = df_300['high'], low = df_300['low'], close = df_300['close'])])c_candlestick.update_xaxes(title_text = '日期',rangeslider_visible = True,rangeselector = dict(buttons = list([dict(count = 1, label = '1M', step = 'month', stepmode = 'backward'),dict(count = 6, label = '6M', step = 'month', stepmode = 'backward'),dict(count = 1, label = 'YTD', step = 'year', stepmode = 'todate'),dict(count = 1, label = '1Y', step = 'year', stepmode = 'backward'),dict(step = 'all')])))c_candlestick.update_layout(title = {'text': '沪深300','y':0.9,'x':0.5,
#         'xanchor': 'center',
#         'yanchor': 'top'})
c_candlestick.update_yaxes(title_text = '沪深300价格')# 2020年国庆假期 2020.10.1-10.8
holidays = [ dt.date(2020,10,x).strftime('%Y-%m-%d') for x in range(1,9)]
print(holidays)c_candlestick.update_xaxes(rangebreaks=[dict(bounds=["sat", "mon"]), # 隐藏周六、周日dict(values=["2021-01-01",]+holidays)  # 隐藏特定假期]
)# plot(c_candlestick,filename='tmp/hushen300_candlestick_update2.html')c_candlestick.show()

OHLC 图

OHLC 图 也称为「美国线」或「价格图」。

美国线 (Open-high-low-close Charts) 通常用作交易工具,显示和分析证券、货币、股票、债券等商品随时间的价格变动。OHLC 图有助于解释市场日常走势,并通过研究所形成的模式预测未来价格变化。

OHLC 图上的 Y 轴用作价格标尺,X 轴是时间刻度。在每个时段内,OHLC 图中会出现一个符号,以代表两个范围:交易的最高价和最低价,以及该时间段(例如一天)中的开盘价和收盘价。在这个范围符号上,最高和最低价的范围由主垂直线的长度所表示;而开盘和收盘价则分别在垂直线左右两边以一小段水平线代表。

示意图如下:

默认的OHLC图

在 Plotly 中,可以使用 ohlc 图来绘制蜡烛图。

具体代码如下:

# OHLC图,又称 美国线,或 价格图ohlc = go.Figure(data = [go.Ohlc(x = df_300.index, open = df_300['open'], high = df_300['high'], low = df_300['low'], close = df_300['close'])])ohlc.update_layout(xaxis_rangeslider_visible = False, title = '沪深300')
ohlc.update_xaxes(title_text = '日期')
ohlc.update_yaxes(title_text = '沪深300价格')# plot(ohlc,filename='tmp/hushen300_ohlc.html')ohlc.show()

绘制效果如下:

对OHLC图进行个性化设置

与蜡烛图类似,我们也可以进行个性化修改,具体代码如下:

# # OHLC图,个性化修改c_ohlc = go.Figure(data = [go.Ohlc(x = df_300.index, open = df_300['open'], high = df_300['high'], low = df_300['low'], close = df_300['close'])])c_ohlc.update_xaxes(title_text = '日期',rangeslider_visible = True,rangeselector = dict(buttons = list([dict(count = 1, label = '1M', step = 'month', stepmode = 'backward'),dict(count = 6, label = '6M', step = 'month', stepmode = 'backward'),dict(count = 1, label = 'YTD', step = 'year', stepmode = 'todate'),dict(count = 1, label = '1Y', step = 'year', stepmode = 'backward'),dict(step = 'all')])))c_ohlc.update_layout(title = {'text': '沪深300','y':0.9,'x':0.5,
#         'xanchor': 'center',
#         'yanchor': 'top'})
c_ohlc.update_yaxes(title_text = '沪深300价格')# 2020年国庆假期 2020.10.1-10.8
holidays = [ dt.date(2020,10,x).strftime('%Y-%m-%d') for x in range(1,9)]
print(holidays)c_ohlc.update_xaxes(rangebreaks=[dict(bounds=["sat", "mon"]), # 隐藏周六、周日dict(values=["2021-01-01",]+holidays)  # 隐藏特定假期]
)# plot(c_ohlc,filename='tmp/hushen300_ohlc_update.html')c_ohlc.show()

绘制效果如下:

上面这张大图里看不出美国线的显示效果,我们可以选择今年以来的图来查看下:

本文完整的代码,请在公众号 「Python数据之道」 后台回复 Plotly 获取。

延伸阅读

  • 在 Pycharm 等编辑器下使用 Python 可视化神器 Plotly Express

  • 推荐:这才是你寻寻觅觅想要的 Python 可视化神器

  • 用 Plotly 动态散点图演示全球疫情变化趋势

  • 用 Python 动态曲线图来对全球疫情进行演示

  • 升级版,用Python来进行多条曲线动态演示全球疫情变化

  • 付费文章:用 Plotly 动态柱状图来演示全球疫情变化趋势

  • 付费文章:超火动态排序疫情变化图,这次我们用 Plotly来绘制

  • 推荐一个牛逼的生物信息 Python 库 - Dash Bio


http://chatgpt.dhexx.cn/article/Ns7L71XN.shtml

相关文章

如何在股票软件画波浪?波浪原理?初级应用画线

如何在股票软件画波浪?波浪原理?初级应用画线 听语音 浏览:1|更新:2018-03-13 10:07|标签:股票 1 2 3 4 5 6 7 分步阅读 波浪理论最主要特征就是它的通用性,在股市中是一个十分重要的技术研究方向,一旦成…

使用Python生成股票K线图

可视化股票数据,这里只做简单的处理,只显示k线图。选取的是海通证券(600837)2020年1月1日之后150个交易日的数据。这里代码不多,没有封装成方法,代码如下。数据是提前获取的,获取方法见&#xf…

Python获取股票数据并绘制相应K线图,看这个就够了!

Python对股票的K线可视化 前言说明注意 数据获取Tushare获取股票数据获取医疗器械板块数据(代码部分)获取股票数据(代码部分) 数据预处理变量中文化(代码部分) K线绘制代码部分结果展示 写在最后 前言 说明…

使用mpl_finance画股票K线图

使用mpl_finance画股票K线图 前言正文 前言 今天给大家介绍一下如何利用 python 中的 mpl_finance 模块画股票K线图。 该模块在 matplotlib 2.0之前是叫做 matplotlib.finance 但此之后是叫做 mpl_finance。 详细介绍请看https://matplotlib.org/api/finance_api.html 。具体用…

Python画图实战之画K线图【附带自动下载股票数据】

关于Python画图的基本知识可以先查看下面这篇文章Python画图(直方图、多张子图、二维图形、三维图形以及图中图)https://blog.csdn.net/weixin_41896770/article/details/119798960 对于股民来说,K线图是最常见的一种参考,使用Pyt…

一步一步教你写股票走势图——K线图二(图表联动)

目录 一步一步教你写股票走势图——分时图一(概述) 一步一步教你写股票走势图——分时图二(自定义xy轴) 一步一步教你写股票走势图——分时图三(对齐图表、自定义柱状图高亮) 一步一步教你写股票走势图…

如何对走势图进行画线分析

现货黄金投资入门与技巧,如何都绕不开这个问题,那就是画线分析。画线分析是技术分析一个重要的流派,也是我们分析市场必不可少的手段,掌握画线的方法,对我们掌握现货黄金投资入门与技巧有很大的帮助。 一、支撑线和压力…

使用Python绘制精美绝伦的股票行情K线图

PythonPyQt2.74 本文简单介绍了如何从Tushare获取某支股票的价格数据,并根据价格数据画出相应的日K线图。 # -*- coding: utf-8 -*-import sys import talib import numpy as np import pandas as pd import tushare as ts import datetime as dt import pyqtgraph …

缠论 公式 自动画线 画笔 中枢 买卖点 源代码

显示效果 跨级别区间套演示 板块演示 个股演示 期货演示 源码如下&#xff1a; {三角形中枢}时间:4;A:HHHV(H,时间*5) AND HHV(H,时间*5)>REF(HHV(H,时间*5),1);B:LLLV(L,时间*5) AND LLV(L,时间*5)<REF(LLV(L,时间*5),1);CC1:DRAWLINE(A,H,B,L,0);CC2:DRAWLINE(B,L,A,H…

利用 python numpy +matplotlib 绘制股票k线图

一、python numpy matplotlib 画股票k线图 # -- coding: utf-8 -- import requests import numpy as np from matplotlib import pyplot as plt from matplotlib import animationfig plt.figure(figsize(8,6), dpi72,facecolor"white") axes plt.subplot(1…

一步一步教你写股票走势图——K线图三(添加均线)

目录 一步一步教你写股票走势图——分时图一&#xff08;概述&#xff09; 一步一步教你写股票走势图——分时图二&#xff08;自定义xy轴&#xff09; 一步一步教你写股票走势图——分时图三&#xff08;对齐图表、自定义柱状图高亮&#xff09; 一步一步教你写股票走势图…

[逐笔数据分析工具分享]如何分析股票逐笔数据

工具分享链接&#xff1a;https://pan.baidu.com/s/1fbDoPM2NzSBEn31gDBZnpQ 提取码&#xff1a;v0sm ​1. 配置stocklist.txt和datelist.txt stocklist为要分析的股票号码&#xff0c;可为任意个 datelist为要分析的日期&#xff0c;可为任意个 以上都为空时&#xff0c;则…

【K线绘图】教你用python绘制带有买卖点的股票K线图(附送鳄鱼指标、顾比均线指标、dataframe格式化输出)

提示&#xff1a;文章内买卖点不构成交易依据&#xff0c;请根据情况自行决策。 教你用python绘制带有买卖点的股票K线图&#xff08;附带鳄鱼指标、顾比均线指标、dataframe格式化输出&#xff09; 前言一、自己绘图&#xff0c;是不是疯了&#xff1f;二、分步说明1. 准备工作…

股票K线图绘制

股票K线图绘制 文章目录 股票K线图绘制前言一、股票K线图基础知识二、用Python绘制股票K线图总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都…

屏幕画笔工具Pointofix,期货/股票复盘分析画线好工具

工具介绍&#xff1a; Pointofix可以将K线图表定格在屏幕某一个画面上&#xff0c;然后可以使用工具趋势线、图形&#xff0c;放大某个细节等&#xff0c;是一款很好的复盘分析画线工具。 Pointofix使用功能&#xff1a; 1.高亮屏幕&#xff1a;手绘笔&#xff1b; 2.直线&…

解决一个信号6问题(sig6,signal6,SIGABRT,double free or corruption (!prev))

我遇到的信号6 99%都是由于数据越界导致&#xff0c;在memcpy的时候没有错误&#xff0c;在free的时候系统报SIGABRT。今天也不例外。代码是我写的&#xff0c;考虑不周&#xff0c;以后拷贝更多加小心。 上图中的data大小为1024&#xff0c;如果memcpy 1025各字节&#xff0c;…

Thread 1:Program received signal:SIGABRT错误之一

引起错误Thread 1:Program received signal:"SIGABRT"的可能情况很多 本文描述的是使用Tab Bar Controller时Tab Bar Item对应的View Controller在Attributes inspector中的NIB NAME与在identity inspector中的class设置的不对应引起的。 如图&#xff08;图片可能…

Thread 1: signal SIGABRT问题解决

解决办法是记住先前的操作&#xff0c;找到相关问题原因&#xff0c;比如控件关联。 如图打开 Show the Connections inspector把相关联的Outlet叉掉&#xff1a; 猜测&#xff1a;Thread 1: signal SIGABRT类型的错误&#xff0c;是某种具体的内部关联引发的错误&#xff0c…

Android异常之SIGABRT

欢迎关注WX公众号&#xff1a; Android开发时出现这样的报错信息&#xff1a; # unknown(29937)SIGABRT #00 pc 0004a124 /system/lib/libc.so (tgkill12) [armeabi-v7a] 2 #01 pc 000478c3 /system/lib/libc.so (pthread_kill34) [armeabi-v7a] 3 #02 pc 0001d525 /system/li…

SIGABRT错误的解决办法

本人原创&#xff0c;转载请注明出处&#xff1a;http://iphone.xiaoxiaostudio.net 在iPhone开发中可能经常会遇到 SIGABRT 错误&#xff0c;我开始也不知道如何调试SIGABRT这个错误&#xff0c;每次都是不断的尝试&#xff0c;最后在stackoverflow找到了方法&#xff0c;整理…