Python期货数据可视化实践_用代码绑制专业交易图表
声明本文为个人学习笔记仅供技术交流不构成任何投资建议。一、前言在期货量化这条路上我已经走了整整二十年。数据可视化是量化交易中不可或缺的一环——好的图表能帮助我们更直观地理解行情、分析策略、展示结果。今天这篇文章我来分享一下Python期货数据可视化的实践经验包括常用的图表类型和代码实现。二、常用可视化库库特点适用场景matplotlib基础、灵活静态图表plotly交互式网页展示mplfinance专业K线金融图表本文主要使用matplotlib和mplfinance。安装pipinstallmatplotlib mplfinance pandas numpy三、获取数据首先获取期货数据fromtqsdkimportTqApi,TqAuthimportpandasaspd apiTqApi(authTqAuth(账户,密码))# 获取K线数据symbolSHFE.rb2505klinesapi.get_kline_serial(symbol,60*60,500)# 1小时K线api.wait_update()# 转为DataFramedfklines.to_dataframe()df[datetime]pd.to_datetime(df[datetime])dfdf.set_index(datetime)print(df.tail())api.close()四、K线图绑制4.1 使用mplfinance绑制专业K线importmplfinanceasmpfimportpandasaspd# 准备数据需要特定列名df_ohlcdf[[open,high,low,close,volume]].copy()df_ohlc.columns[Open,High,Low,Close,Volume]# 绑制K线图mpf.plot(df_ohlc.tail(100),# 最近100根K线typecandle,# 蜡烛图stylecharles,# 样式title螺纹钢 RB2505 1小时K线,ylabel价格,volumeTrue,# 显示成交量figsize(14,8))4.2 添加均线# 计算均线df_ohlc[MA5]df_ohlc[Close].rolling(5).mean()df_ohlc[MA20]df_ohlc[Close].rolling(20).mean()# 添加均线到图表ap[mpf.make_addplot(df_ohlc[MA5].tail(100),colorblue,width1),mpf.make_addplot(df_ohlc[MA20].tail(100),colororange,width1),]mpf.plot(df_ohlc.tail(100),typecandle,stylecharles,title螺纹钢 K线 均线,addplotap,volumeTrue,figsize(14,8))4.3 添加布林带# 计算布林带period20df_ohlc[MA20]df_ohlc[Close].rolling(period).mean()df_ohlc[STD]df_ohlc[Close].rolling(period).std()df_ohlc[Upper]df_ohlc[MA20]2*df_ohlc[STD]df_ohlc[Lower]df_ohlc[MA20]-2*df_ohlc[STD]# 绑制ap[mpf.make_addplot(df_ohlc[MA20].tail(100),colorblue),mpf.make_addplot(df_ohlc[Upper].tail(100),colorgray,linestyle--),mpf.make_addplot(df_ohlc[Lower].tail(100),colorgray,linestyle--),]mpf.plot(df_ohlc.tail(100),typecandle,addplotap,title布林带指标,figsize(14,8))五、策略回测结果可视化5.1 资金曲线importmatplotlib.pyplotaspltimportnumpyasnp# 模拟资金曲线数据np.random.seed(42)returnsnp.random.randn(252)*0.02# 模拟日收益equity100000*(1returns).cumprod()# 绘制资金曲线plt.figure(figsize(12,5))plt.plot(equity,colorblue,linewidth1.5)plt.fill_between(range(len(equity)),equity,alpha0.3)plt.title(策略资金曲线,fontsize14)plt.xlabel(交易日)plt.ylabel(账户权益)plt.grid(True,alpha0.3)plt.tight_layout()plt.show()5.2 回撤曲线defcalc_drawdown(equity):计算回撤peaknp.maximum.accumulate(equity)drawdown(equity-peak)/peakreturndrawdown drawdowncalc_drawdown(equity)# 绘制回撤曲线fig,axesplt.subplots(2,1,figsize(12,8),sharexTrue)# 资金曲线axes[0].plot(equity,colorblue)axes[0].set_title(资金曲线)axes[0].set_ylabel(账户权益)axes[0].grid(True,alpha0.3)# 回撤曲线axes[1].fill_between(range(len(drawdown)),drawdown,colorred,alpha0.5)axes[1].set_title(回撤曲线)axes[1].set_xlabel(交易日)axes[1].set_ylabel(回撤比例)axes[1].grid(True,alpha0.3)plt.tight_layout()plt.show()5.3 收益分布# 计算日收益率daily_returnsnp.diff(equity)/equity[:-1]# 绘制收益分布fig,axesplt.subplots(1,2,figsize(14,5))# 直方图axes[0].hist(daily_returns,bins50,colorblue,alpha0.7,edgecolorblack)axes[0].axvline(x0,colorred,linestyle--)axes[0].set_title(日收益分布)axes[0].set_xlabel(日收益率)axes[0].set_ylabel(频次)# 累计分布sorted_returnsnp.sort(daily_returns)cumulativenp.arange(1,len(sorted_returns)1)/len(sorted_returns)axes[1].plot(sorted_returns,cumulative)axes[1].axhline(y0.5,colorred,linestyle--,alpha0.5)axes[1].set_title(累计分布)axes[1].set_xlabel(日收益率)axes[1].set_ylabel(累计概率)plt.tight_layout()plt.show()六、交易信号可视化6.1 在K线图上标记买卖点importmatplotlib.pyplotaspltimportmatplotlib.datesasmdates# 准备数据df_plotdf.tail(100).copy()df_plot[MA5]df_plot[close].rolling(5).mean()df_plot[MA20]df_plot[close].rolling(20).mean()# 生成信号df_plot[signal]0df_plot.loc[df_plot[MA5]df_plot[MA20],signal]1df_plot.loc[df_plot[MA5]df_plot[MA20],signal]-1df_plot[signal_change]df_plot[signal].diff()# 买卖点buy_signalsdf_plot[df_plot[signal_change]2]sell_signalsdf_plot[df_plot[signal_change]-2]# 绑图fig,axplt.subplots(figsize(14,7))ax.plot(df_plot.index,df_plot[close],label收盘价,colorblack,linewidth1)ax.plot(df_plot.index,df_plot[MA5],labelMA5,colorblue,linewidth1)ax.plot(df_plot.index,df_plot[MA20],labelMA20,colororange,linewidth1)# 标记买卖点ax.scatter(buy_signals.index,buy_signals[close],marker^,colorred,s100,label买入,zorder5)ax.scatter(sell_signals.index,sell_signals[close],markerv,colorgreen,s100,label卖出,zorder5)ax.set_title(交易信号标记)ax.set_xlabel(时间)ax.set_ylabel(价格)ax.legend()ax.grid(True,alpha0.3)plt.xticks(rotation45)plt.tight_layout()plt.show()七、多图组合展示7.1 完整的策略分析面板importmatplotlib.pyplotaspltimportmatplotlib.gridspecasgridspec figplt.figure(figsize(16,12))gsgridspec.GridSpec(3,2,height_ratios[2,1,1])# 1. K线图 均线ax1fig.add_subplot(gs[0,:])ax1.plot(df_plot.index,df_plot[close],label收盘价)ax1.plot(df_plot.index,df_plot[MA5],labelMA5)ax1.plot(df_plot.index,df_plot[MA20],labelMA20)ax1.set_title(价格走势与均线)ax1.legend()ax1.grid(True,alpha0.3)# 2. 成交量ax2fig.add_subplot(gs[1,0])colors[redifcoelsegreenforc,oinzip(df_plot[close],df_plot[open])]ax2.bar(range(len(df_plot)),df_plot[volume],colorcolors,alpha0.7)ax2.set_title(成交量)ax2.set_ylabel(成交量)# 3. 资金曲线ax3fig.add_subplot(gs[1,1])ax3.plot(equity,colorblue)ax3.fill_between(range(len(equity)),equity,alpha0.3)ax3.set_title(资金曲线)ax3.set_ylabel(权益)# 4. 回撤ax4fig.add_subplot(gs[2,0])ax4.fill_between(range(len(drawdown)),drawdown,colorred,alpha0.5)ax4.set_title(回撤)ax4.set_ylabel(回撤比例)# 5. 收益分布ax5fig.add_subplot(gs[2,1])ax5.hist(daily_returns,bins30,colorblue,alpha0.7)ax5.axvline(x0,colorred,linestyle--)ax5.set_title(日收益分布)plt.tight_layout()plt.show()八、保存图表# 保存为PNGplt.savefig(strategy_report.png,dpi150,bbox_inchestight)# 保存为PDF适合打印plt.savefig(strategy_report.pdf,bbox_inchestight)# 使用mplfinance保存mpf.plot(df_ohlc.tail(100),typecandle,stylecharles,savefigkline_chart.png)九、实用技巧9.1 设置中文字体importmatplotlib.pyplotasplt# Windowsplt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]False# Mac# plt.rcParams[font.sans-serif] [Arial Unicode MS]9.2 自定义样式# 使用内置样式plt.style.use(seaborn-darkgrid)# 或自定义plt.rcParams.update({figure.facecolor:white,axes.facecolor:white,axes.grid:True,grid.alpha:0.3,font.size:10,})9.3 交互式图表Plotlyimportplotly.graph_objectsasgofromplotly.subplotsimportmake_subplots# 创建K线图figmake_subplots(rows2,cols1,shared_xaxesTrue,vertical_spacing0.03,row_heights[0.7,0.3])# K线fig.add_trace(go.Candlestick(xdf_plot.index,opendf_plot[open],highdf_plot[high],lowdf_plot[low],closedf_plot[close],nameK线),row1,col1)# 成交量fig.add_trace(go.Bar(xdf_plot.index,ydf_plot[volume],name成交量),row2,col1)fig.update_layout(title交互式K线图,xaxis_rangeslider_visibleFalse)fig.show()十、总结期货数据可视化的核心选对工具matplotlib基础、mplfinance专业K线、plotly交互式图表清晰信息明确、不要过度装饰代码复用封装成函数方便重复使用希望这篇文章能帮助你更好地进行期货数据可视化声明本文基于个人学习经验整理仅供技术交流参考不构成任何投资建议。

相关新闻

宏智树 AI:ChatGPT 学术版驱动,AI5.0 重构学术创作全流程

宏智树 AI:ChatGPT 学术版驱动,AI5.0 重构学术创作全流程

在学术研究日益追求高效与精准的今天,宏智树 AI 以 ChatGPT 学术版为核心引擎,搭载 AI5.0 技术架构,打造出覆盖 “开题 - 写作 - 实证 - 定稿 - 答辩” 的全流程学术智能解决方案平台(官网:www.hzsxueshu.com&#xff…

2026/7/6 10:18:52 阅读更多 →
9 款 AI 写论文哪个好?宏智树 AI 实测封神:真文献 + 全流程,毕业生闭眼冲

9 款 AI 写论文哪个好?宏智树 AI 实测封神:真文献 + 全流程,毕业生闭眼冲

作为深耕论文写作科普的测评博主,毕业季后台被问爆 “9 款 AI 写论文哪个好”。为了给大家靠谱答案,我耗时 1 个月,对市面上 9 款真实热门的 AI 写论文工具(含通用大模型、专业学术平台),从 “素材真实性、…

2026/7/3 14:55:19 阅读更多 →
宏智树 AI——AI5.0 驱动的全流程学术写作智能平台,重塑论文创作新范式

宏智树 AI——AI5.0 驱动的全流程学术写作智能平台,重塑论文创作新范式

宏智树 AI 的核心竞争力,源于深度适配学术场景的顶尖技术架构。平台依托 ChatGPT 学术版模型的强大语义理解与生成能力,结合自主研发的 AI5.0 技术体系,经过千万篇全学科学术论文语料的定向训练,精准捕捉不同学科、不同学历层次的…

2026/7/3 14:12:13 阅读更多 →

最新新闻

OpenCloudOS 理事会更新 | 腾讯云、海光助力建设 AI Infra 开源开放底座

OpenCloudOS 理事会更新 | 腾讯云、海光助力建设 AI Infra 开源开放底座

近日,OpenCloudOS 社区进行了理事会成员更新:腾讯云操作系统产品总经理马文霜出任 OpenCloudOS 社区理事长,海光信息生态发展部总经理郑臣明出任副理事长。此次调整发生在 AI 驱动产业升级、国产基础软硬件加速融合的关键节点。理事会成员的更…

2026/7/7 10:52:54 阅读更多 →
127.TwinCAT/CODESYS 通用!四相位交通灯控制系统标准化源码

127.TwinCAT/CODESYS 通用!四相位交通灯控制系统标准化源码

摘要 可编程逻辑控制器(PLC)是工业自动化系统的核心执行单元。本文从底层原理出发,系统梳理PLC的工作机制、扫描周期、I/O映射与编程范式,并以IEC 61131-3标准中的结构化文本(ST)语言为主线,提供一套从环境搭建到完整项目落地的全流程指南。文章包含一个可直接在CODESY…

2026/7/7 10:48:52 阅读更多 →
EM3080-W与PIC18F2610的条码识别系统设计

EM3080-W与PIC18F2610的条码识别系统设计

1. EM3080-W与PIC18F2610的硬件协同设计条形码识别系统的核心在于解码芯片与微控制器的完美配合。EM3080-W作为专业级解码芯片,其内部采用双核DSP架构,主核负责图像采集与预处理,工作频率高达120MHz,能够实时处理1280800分辨率的图…

2026/7/7 10:46:51 阅读更多 →
暗黑3智能按键助手D3KeyHelper:解放双手的游戏自动化神器

暗黑3智能按键助手D3KeyHelper:解放双手的游戏自动化神器

暗黑3智能按键助手D3KeyHelper:解放双手的游戏自动化神器 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 厌倦了在暗黑破坏神3中重复点击…

2026/7/7 10:46:51 阅读更多 →
基于Cortex构建自动化文件分析框架:以IndexTTS 2.0漏洞检测为例

基于Cortex构建自动化文件分析框架:以IndexTTS 2.0漏洞检测为例

1. 项目概述:为什么我们需要自动化分析可疑文件?最近在安全分析工作中,我遇到了一个挺有意思的挑战。团队里负责威胁情报的同事丢过来一批可疑文件,说怀疑是针对某个特定开源项目——IndexTTS 2.0的漏洞利用样本。IndexTTS 2.0是一…

2026/7/7 10:44:51 阅读更多 →
GraphQL 订阅驱动链上事件流:WebSocket 重连、去重与断线补偿策略

GraphQL 订阅驱动链上事件流:WebSocket 重连、去重与断线补偿策略

GraphQL 订阅驱动链上事件流:WebSocket 重连、去重与断线补偿策略 一、链上事件不能靠轮询维持 典型的 DApp 后端获取链上事件的做法是轮询:每 N 秒调用 eth_getLogs 或 getProgramAccounts,把新事件写入数据库,然后通知前端。这种…

2026/7/7 10:40:50 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻