当前位置: 首页 > news >正文

mplfinance 使用make_addplot做复杂股票走势图

mplfinance 使用make_addplot做复杂股票走势图

1.代码

import talib as tb
import pandas as pd
import mplfinance as mpfimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['simHei'] # 以黑体显示中文
plt.rcParams['axes.unicode_minus']=False # 解决保存图像符号“-”显示问题def find_signal(df):# 收盘价上穿布林带上轨做多,增加signal_long 列df.loc[(df['close'].shift(1) <= df['upper'].shift(1)) & (df['close'] > df['upper']), 'signal_long'] = 1# 收盘价下穿布林带中轨平仓,增加signal_short 列df.loc[(df['close'].shift(1) >= df['middler'].shift(1)) & (df['close'] < df['middler']), 'signal_short'] = -1return df#df = df.loc['2020-06-01':'2020-12-31']
#df.rename(columns={'vol': 'volume'}, inplace=True)df['upper'], df['middler'], df['lower'] = tb.BBANDS(df['close'], timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
df.fillna(method='bfill',inplace=True) # 用下一个非空值向上填充df=find_signal(df)df.loc[df['signal_short'].notna(),'signal_short']=df['high']my_color=mpf.make_marketcolors(up='red',down='green',edge='black',wick='i',volume={'up':'red','down':'green'},ohlc='black',inherit=False)
my_style=mpf.make_mpf_style(base_mpf_style='sas',marketcolors=my_color,gridaxis='both',gridstyle='-.',y_on_right=False,rc={'font.family':'SimHei'})add_plot=[mpf.make_addplot(df[['upper']].values,linestyle='dashdot'),mpf.make_addplot(df[['middler']].values,linestyle='dashdot'),mpf.make_addplot(df[['lower']].values,linestyle='dashdot'),mpf.make_addplot(df[['signal_short']].values,type='scatter',markersize=20,marker='v',color='g'),mpf.make_addplot(df[['close']].values,panel=2,color='y',secondary_y='auto')]mpf.plot(df,type='candle',volume=True,addplot=add_plot,main_panel=0,volume_panel=1,num_panels=3,panel_ratios=(2,1,1),style=my_style, title='布林线',ylabel='价格',ylabel_lower='成交量',figratio=(9,6),figscale=1.2,show_nontrading=False)

2.图示效果

在这里插入图片描述

3.说明

1.make_mpf_style()函数
make_mpf_style(base_mpf_style,base_mpl_style,marketcolors,mavcolors,facecolor,edgecolor,figcolor,gridcolor,gridaxis,gridstyle,y_on_right,rc)

函数部分参数如下:

  • 1).base_mpf_style设置需要继承的系统样式;
  • 2).base_mpl_style设置同时使用matplotlib中的式样seaborn;
  • 3).marketcolor设置K线的颜色,可以使用make_marketcolors()函数进行定义;
  • 4).mavcolors设置均线的颜色,必须使用列表传参;
  • 5).facecolor设置前景色;
  • 6).edgecolor设置边缘线颜色;
  • 7).figcolor设置图像外周围填充色;
  • 8).gridcolor设置网格线颜色;
  • 9).gridaxis设置网格线的位置,gridaxis=‘both’/‘horizontal’/‘vertical’;
  • 10).gridstyle设置网格线线型,gridstyle=‘solid’/‘dashed’/‘dashdot’/‘dotted’;
  • 11).y_on_right设置y轴位置是否在右,y_on_right=True设为右边;
  • 12).rc使用rcParams的dict设置格式;

2.关于make_mpf_style()函数中的marketcolors参数
make_marketcolors(up,down,edge,wick,volume,ohlc,inherit)
函数部分参数如下:

  • 1).up设置阳线柱填充颜色;
  • 2).down设置阴线线柱填充颜色;
  • 3).edge设置蜡烛线边缘颜色,edge='i’代表继承K线主体颜色;
  • 4).wick设置蜡烛线上下影线的颜色,wick='i’代表继承K线主体的颜色;
  • 5).volume设置成交量的颜色,volume='i’代表继承K线主体颜色;
  • 6).ohlc设置均线颜色,代表继承K线主体的颜色;
  • 7).inherit设置是否继承,如果设置了继承inherit=True,那么edge/wick/volume/ohlc 四个参数即便设置了颜色也会无效,其中edge/wick/volume/ohlc四个参数除了设置’i’ 自动继承up和down的颜色外,也可以使用dict模式定义。

参考:
https://blog.csdn.net/malishizu222/article/details/124484598
https://blog.csdn.net/qq_39065491/article/details/130010354

4. 问题

make_addplot函数的一些主要参数说明:

数据参数:

  • Ndarray、list:make_addplot可以接受这些格式的数据作为输入。这意味着你可以传递一个pandas DataFrame、numpy Ndarray或一个Python list来包含你想要在主图上展示的额外数据。
  • 特殊参数:
    **kwargs:这是一个可变关键字参数,意味着你可以传递任何额外的关键字参数给make_addplot。这些参数随后将被传递到绘图方法(如plot)中。
  • 注意事项:
    传递给make_addplot的数据参数行数必须与将来传递给plot方法的数据行数相同。这是因为make_addplot是为了在主价格图下方同步地添加额外的图表或数据。
  • 标记参数:
    marker:用于设置标记的形状,例如^表示正三角形,v表示倒三角形。
    markersize:用于设置标记点的大小。
    color:用于设置标记点的颜色。请注意,这个颜色设置是针对标记点的,而不是线条的颜色。
    布局参数:
  • panel:当设置为"lower"时,可以让线条显示在附图的成交量上方。

make_addplot()必须使用Ndarray,否则报错

print(type(df[['upper']]))
print(type(df['upper']))
print(type(df['close'].values))

结果是:

<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>
<class 'numpy.ndarray'>

必须用 df[‘close’].values !!!
不是ndarray类型,直接把报错,折腾了半天才找到原因!!!

ValueError: Multi-dimensional indexing (e.g. obj[:, None]) is no longer supported. Convert to a numpy array before indexing instead.

相关文章:

  • dell r740服务器黄灯闪烁维修现场解决
  • 167基于matlab的根据《液体动静压轴承》编写的有回油槽径向静压轴承的程序
  • vant-search确定按钮变成了“换行”文字
  • 05.STLvector、list、stack、queue
  • (done) 两个矩阵 “相似” 是什么意思?
  • 多维时序 | Matlab实现基于VMD-DBO-LSTM、VMD-LSTM、LSTM的多变量时间序列预测
  • Rust ?运算符 Rust读写txt文件
  • ChatGPT高效提问—prompt实践(白领助手)
  • Unity3D xLua开发环境搭建详解
  • 玩转网络抓包利器:Wireshark常用协议分析讲解
  • 物联网和人工智能的融合
  • 【鸿蒙系统学习笔记】TypeScript开发语言
  • go-zero/grpc的rpc服务间传递额外数据
  • 前端架构: 实现脚手架终端UI样式之ANSI escape code, Chalk, Ora介绍
  • 在VS里使用C#制作窗口应用
  • ➹使用webpack配置多页面应用(MPA)
  • angular组件开发
  • es6要点
  • idea + plantuml 画流程图
  • LeetCode18.四数之和 JavaScript
  • magento2项目上线注意事项
  • Python中eval与exec的使用及区别
  • Redux 中间件分析
  • Tornado学习笔记(1)
  • Vue 动态创建 component
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 从零开始学习部署
  • 番外篇1:在Windows环境下安装JDK
  • 什么软件可以剪辑音乐?
  • 项目管理碎碎念系列之一:干系人管理
  • 用mpvue开发微信小程序
  • # C++之functional库用法整理
  • #{}和${}的区别?
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (06)金属布线——为半导体注入生命的连接
  • (2)Java 简介
  • (floyd+补集) poj 3275
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (万字长文)Spring的核心知识尽揽其中
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)大型网站的系统架构
  • (转)可以带来幸福的一本书
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net framework profiles /.net framework 配置
  • .net 无限分类
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .netcore 获取appsettings
  • .NET开源快速、强大、免费的电子表格组件
  • .net中调用windows performance记录性能信息
  • @angular/cli项目构建--Dynamic.Form