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

news2024/10/6 10:34:29

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.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通俗易懂分析:Vite和Webpack的区别

1、对项目构建的理解 先从浏览器出发&#xff0c; 浏览器是由浏览器内核和JS引擎组成&#xff1b;浏览器内核编译解析html代码和css代码&#xff0c;js引擎编译解析JavaScript代码&#xff1b;所以从本质上&#xff0c;浏览器只能识别运行JavaScript、CSS、HTML代码。 而我们在…

基于CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 CNN&#xff08;卷积神经网络&#xff09;部分 4.2 GRU&#xff08;门控循环单元&#xff09;部分 4.3 Attention机制部分 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版…

STM32基于寄存器编程

在51中让一个引脚输出高低电平只需要一个步骤&#xff0c;而在32中至少需要三个步骤。 开启对应GPIO的时钟配置对应IO口设置IO口 本文将一步步进阶的讲解&#xff0c;三种寄存器编程的方法。 使用地址赋值进行配置使用ST的宏进行配置只控制需要的位&#xff08;位运算&#…

无/自监督去噪(2)——Noise2Noise (N2N) 理论分析(从损失函数入手)

目录 读前须知1. 前置知识——L1和L2 loss的特性2. additive Gaussian noise (spatial independent noise), L 2 L_2 L2​首杀3. brown Gaussian noise (spatial dependent noise), L 2 L_2 L2​双杀4. blind text removal, L 2 L_2 L2​导致结果偏灰, L 1 L_1 L1​前来破局…

刚开的抖店怎样推广?找主播带货,积累资源/渠道,拉动自然流量成交

我是王路飞。 2024年&#xff0c;依旧有很多人想入局抖音小店。 刚复工没几天&#xff0c;我就已经收到好多粉丝朋友的私信了&#xff0c;纷纷表示自己已经开通了抖店了&#xff0c;但是不会运营&#xff0c;现在新店应该怎样进行推广呢&#xff1f; 这篇内容就给你们详细说…

交换瓶子【第七届】【省赛】【A组】

题目描述 有N个瓶子&#xff0c;编号 1 ~ N&#xff0c;放在架子上。 比如有5个瓶子&#xff1a; 2 1 3 5 4 要求每次拿起2个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5 对于这么简单的情况&#xff0c;显然&#…

stm32——hal库学习笔记(DAC)

这里写目录标题 一、DAC简介&#xff08;了解&#xff09;1.1&#xff0c;什么是DAC&#xff1f;1.2&#xff0c;DAC的特性参数1.3&#xff0c;STM32各系列DAC的主要特性 二、DAC工作原理&#xff08;掌握&#xff09;2.1&#xff0c;DAC框图简介&#xff08;F1&#xff09;2.2…

用结构减法比较平面上4点结构的顺序

( A, B )---6*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有6个节点&#xff0c;AB训练集各由6张二值化的图片组成&#xff0c;A有4个点&#xff0c;B全是0.收敛误差7e-4&#xff0c;收敛199次&#xff0c;统计迭代次数平均值并排序。 如果行和列自由变换&#xff0c;迭代次数不…

英伟达推出免训练,可生成连贯图片的文生图模型

目前&#xff0c;多数文生图模型皆使用的是随机采样模式&#xff0c;使得每次生成的图像效果皆不同&#xff0c;在生成连贯的图像方面非常差。 例如&#xff0c;想通过AI生成一套图像连环画&#xff0c;即便使用同类的提示词也很难实现。虽然DALLE 3和Midjourney可以对图像实现…

【UI自动化】使用poco框架进行元素唯一定位

直接选择&#xff1a; 1.poco(text买入).click() 2.poco("android.widget.ImageView").click()相对选择、空间选择&#xff1a; 3.poco(text/name).parent().child()[0].click()正则表达式&#xff1a; 4.listpoco(textMatches".*ETF")今天主要想记录下…

门控时钟基础知识

什么是门控时钟 RTL中的门控时钟 通常情况下&#xff0c;时钟树由大量的缓冲器和反相器组成&#xff0c;时钟信号为设计中翻转率最高的信号&#xff0c;时钟树的功耗可能高达整个设计功耗40%。 加入门控时钟电路后&#xff0c;由于减少了时钟树的翻转&#xff0c;节省了翻转功…

windows下采用 nginx配置websocket支持wss流程

第一步、安装OpenSSL &#xff08;1&#xff09;下载OpenSSL软件包 地址&#xff1a;https://slproweb.com/products/Win32OpenSSL.html OpenSSL版本说明&#xff1a; Win64 OpenSSL v1.1.1wLight&#xff0c;安装Win64 OpenSSL v1.1.1w最常用的软件包 Win64 OpenSSL v1.1…

真实的数据如何获取

数据 在信息过载的互联网信息中挖掘有价值的信息是非常难的。 我自己退一步&#xff0c;要想寻求真实的信息也是非常难的。 那么关于个人博客具体浏览量的真实信息到底如何呢&#xff1f; 请看下图&#xff1a; 真相残酷&#xff0c;现实骨感。 核心 如果要抛开自欺欺人&a…

第二证券:5天骤降14!转融券市场再降温

转融券存量在快速下降。 到2月21日&#xff0c;转融券的存量股数为50.36亿股&#xff0c;近5个交易日内下降超20%。券商两融人士向券商我国记者表明&#xff0c;2月6日&#xff0c;证监会表明暂停转融券新增规划&#xff0c;存量逐渐了断&#xff0c;从目前的数据来看&#xf…

[corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape

前言 题目来源&#xff1a;竞赛官网 – 建议这里下载&#xff0c;文件系统/带符号的 vmlinux 给了 参考 [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape Exploiting poll_list Objects In The Linux Kernel – 原作者文章&#xff0c;poll_list 利用方式…

7 数据迁移至达梦数据库

无论使用哪种解决方案很大可能性都需要进行数据迁移&#xff0c;即将旧的非 达梦数据库的数据迁移到达梦数据库。 我们要把 Nacos 的数据或者 SQL 语句迁移到达梦数据库。借助 DM 数据迁移工具 &#xff0c;完成 Nacos 配置数据表迁移到达梦数据库。

ros自定义action记录

文章目录 自定义action1. 定义action文件2. 修改 package.xml3. 修改 CMakeLists.txt4. 运行 catkin build5. simple_action_server.py6. simple_action_client.py 测试 自定义action ros 版本&#xff1a;kinetic 自定义test包的文件结构如下 |-- test | |-- CMakeLists.t…

【9-1】实验——Neo4j实战操作

目录 一、Neo4j操作——CQL 1、常用CQL命令 2.常用CQL函数 3.图数据的形式 二、实战代码1.create命令 2. MATCH命令 三、使用neo4j工具导入知识图谱 1、工具&#xff1a;neo4j-admin 2、图谱导入&#xff1a; 3、更新图谱&#xff1a; 一、Neo4j操作——CQL 1、常用…

RMAN备份与恢复

文章目录 一、RMAN介绍二、全量备份三、增量备份0级备份1级增量备份累积性差量备份总结 四、压缩备份压缩备份介绍压缩备份操作压缩备份优缺点 五、异常恢复1、恢复前的准备2、恢复数据库 六、RMAN相关参数 一、RMAN介绍 RMAN&#xff08;Recovery Manager&#xff09;是Oracl…

啤酒:精酿啤酒与炸鸡的香脆搭配

炸鸡与啤酒&#xff0c;这对美食界的黄金搭档&#xff0c;早已成为了人们心目中的经典。而当Fendi Club啤酒遇上炸鸡&#xff0c;一场味觉的狂欢就此展开。 Fendi Club啤酒&#xff0c;以其醇厚的口感和淡淡的麦芽香气而著称。这款啤酒在酿造过程中采用了特别的工艺&#xff0c…