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

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

1.代码

import talib as tb
import pandas as pd
import mplfinance as mpf

import matplotlib.pyplot as plt

plt.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'] = -1

    return 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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/401691.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Meta 发布 MMCSG (多模态智能眼镜对话数据集)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

LeetCode 热题 100 Day01

哈希模块 哈希结构&#xff1a; 哈希结构&#xff0c;即hash table&#xff0c;哈希表|散列表结构。 图摘自《代码随想录》 哈希表本质上表示的元素和索引的一种映射关系。 若查找某个数组中第n个元素&#xff0c;有两种方法&#xff1a; 1.从头遍历&#xff0c;复杂度&#xf…

Java 学习和实践笔记(15):面向过程和面象对象其实很简单!

学完这一节&#xff0c;才真正明白了什么叫面向对象和面向过程&#xff0c;其实很简单~ 第一个例子&#xff1a;怎样把大象装进冰箱 这个很清楚很容易地可以列出第一步。 第二个例子&#xff1a;怎样制造一台汽车 这个就很难确定哪一步做第一步。 面向过程和面向对象的区别 …

【二十六】【C++】Map和Set

K模型与KV模型 在数据结构中&#xff0c;二叉搜索树&#xff08;BST&#xff09;的应用通常围绕着两种基本模型&#xff1a;键模型&#xff08;K模型&#xff09;和键值对模型&#xff08;KV模型&#xff09;。这两种模型定义了树中节点存储数据的方式&#xff0c;以及如何通过…

区块链游戏解说:什么是 Planet IX

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;Planet IX Dashboard 什么是 Planet IX Planet IX&#xff0c;一个由原生 IX TOKEN 推动的 Web3 玩赚平台。作为一款 GameFi 策略游戏&#xff0c; Planet IX 上的每项资…

如何修改docker容器的端口映射

要修改 Docker 容器的端口映射&#xff0c;你需要停止并删除现有的容器&#xff0c;然后使用新的端口映射重新运行容器。以下是详细步骤&#xff1a; 停止容器&#xff1a; 使用 docker stop 命令停止正在运行的容器。替换 <container_id> 为你要停止的容器的 ID 或者容器…

浅谈消防设备电源监控系统在高层建筑中的应用

摘要&#xff1a;火灾发生后&#xff0c;非消防电源被切断&#xff0c;火灾报警系统应立即接通消防电源&#xff0c;满足消防设施 处于良好运行状态&#xff0c;对消防设备电源状态的监控是十分必要的。介绍消防设备电源的重要性 和三种类型&#xff0c;分析消防设备电源监控系…

Python中HTTP重定向和重定向链的处理:网络迷宫的导航专家

在网络世界里&#xff0c;有时候&#xff0c;我们访问的URL并不是直接指向我们想要的内容&#xff0c;而是像是一个神秘的迷宫&#xff0c;指引我们绕来绕去。这时候&#xff0c;HTTP重定向就像是迷宫里的路标&#xff0c;告诉我们“嘿&#xff0c;你要找的东西不在这里&#x…

这才是No.1的门禁管理技巧!赶紧抄作业

随着社会的不断发展和科技的飞速进步&#xff0c;安全管理成为各个领域不可或缺的重要环节。在这个背景下&#xff0c;门禁监控系统作为一种先进而高效的安全管理工具逐渐受到了广泛关注和应用。 客户案例 企业大厦管理 在江苏某繁忙的商业大厦中&#xff0c;管理人员常常面临…

【咕咕送书 | 第七期】世界顶级名校计算机专业,都在用哪些书当教材?

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 写在前面参与规则 ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论…

七、计算机视觉-图像的ROI区域

文章目录 1、什么是ROI2、ROI如何实现的3、一个案例总结 1、什么是ROI 在计算机视觉中&#xff0c;ROI代表感兴趣区域&#xff08;Region of Interest&#xff09;&#xff0c;它是指图像或视频中被指定为需要特别关注或处理的区域。ROI可以帮助减少计算量&#xff0c;并且在处…

基于JAVA springboot+mybatis 电商书城平台系统设计和实现

基于JAVA springbootmybatis 电商书城平台系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获…

初识VUE3

1.VUE3官网 https://cn.vuejs.org/ 2.通过Vite创建项目 全局安装vite npm config set registryhttps://registry.npmmirror.com 使用国内源npm install -g vitelatest 安装vite前要先查看镜像源地址并使用国内镜像源地址 //查看镜像源地址 npm config get registry //更…

Debug|百度OCR识别错误error_code: 216205

1. 什么错误 在使用百度OCR识别时遇到了错误error_code: 216205。 参照文档【百度OCR文字识别 - API文档 - 错误码】中的描述&#xff0c;是我的图片转base64后大于10M 测试两张图片&#xff1a;923k图片的Base64 大于 10M&#xff1b;2M图片的Base64 小于 10M。 # 电脑上看…

Maven的下载安装配置教程

一、简单了解一下什么是Maven Maven就是一款帮助程序员构建项目的工具&#xff0c;我们只需要告诉Maven需要哪些Jar 包&#xff0c;它会帮助我们下载所有的Jar&#xff0c;极大提升开发效率。 1.Maven翻译为“专家“&#xff0c; ”内行”的意思&#xff0c;是著名Apache公司下…

Day16_集合与泛型(泛型类与泛型接口,泛型方法,类型变量的上限与泛型的擦除,类型通配符)

文章目录 Day16 泛型学习目标1 泛型的概念1.1 没有泛型的问题1.2 泛型的引入1.2 泛型的好处1.3 泛型的定义 2 泛型类与泛型接口2.1 使用核心类库中的泛型类/接口案例一&#xff1a;Collection集合相关类型案例二&#xff1a;Comparable接口 2.2 自定义泛型类与泛型接口语法格式…

【成都游戏业:千游研发之都的发展与机遇】

成都游戏业&#xff1a; 千游研发之都的发展与机遇 作为我国西部游戏产业的龙头&#xff0c;成都这座城市正在高速发展&#xff0c;目标是崛起成为千亿级游戏研发之都。多年来&#xff0c;在政策扶持、人才汇聚以及文化底蕴等助力下&#xff0c;成都游戏业已经形成完整的产业链…

matlab代码--基于stbc编码的MIMO-OFDM系统的误码率分析

1 前言 空时分组编码STBC&#xff08;Space Time Block Coding&#xff09;用在无线通信中传输一个数据流的多个拷贝。通过许多天线来产生数据的多种接收版本&#xff0c;提高数据传输的可靠性。接收机接收到的数据拷贝中&#xff0c;存在一些比其它拷贝“更好”的拷贝。而这种…

git中将所有修改的文件上传到暂存区

案例&#xff1a; 我将本地的多个文件进行了修改&#xff0c;导致文件发生了变化。使用git status命令&#xff0c;查看文件的状态&#xff0c;发现有多个文件是modified&#xff0c;即被修改了。 本地文件发生了变化&#xff0c;需要将modified的文件添加到暂存区&#xff0c…

C语言第二十八弹---整数在内存中的存储

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、整数在内存中的存储 2、大小端字节序和字节序 2.1、什么是大小端&#xff1f; 2.2、为什么有大小端? 2.3、练习 2.3.1、练习1 2.3.2、练习2 2.…