《BackTrader量化交易图解》第8章:plot 绘制金融图

2024-01-09 19:20

本文主要是介绍《BackTrader量化交易图解》第8章:plot 绘制金融图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 8. plot 绘制金融图
    • 8.1 金融分析曲线
    • 8.2 多曲线金融指标
    • 8.3 Observers 观测子模块
    • 8.4 plot 绘图函数的常用参数
    • 8.5 买卖点符号和色彩风格
    • 8.6 vol 成交参数
    • 8.7 多图拼接模式
    • 8.8 绘制 HA 平均 K 线图

8. plot 绘制金融图

8.1 金融分析曲线

BackTrader内置的plot绘图函数, 通过style参数变量控制不同风格的K线图, 默认有以下几种风格:

  • line:线条图
  • candle:蜡烛图,标准 K 线图
  • ohlc:美式 K 线图,和 bar 参数一样
  • bar:ohlc 曲线图,美式 K 线图,和 ohlc 参数一样。

将style参数设置为bar或者ohlc, 生成的图都是一样的。 如果不设置 style ,默认是line线条图,或者上一次设置参数。下面使用代码生成四种风格的图表,文件名称为Plot.py

line 线条图:

PlotLines

candle 图:

PlotCandle

OHLC 图:

PlotOHLC

Bar 图:

PlotBar

在K线图中, 每天的图标信息都包含开盘价、 最高价、 最低价和收盘价四组价格数据, 但曲线图通常只有收盘价一组价格。 ohlc美式价格曲线也称为美式K线, 每天的图标也包含开盘价、 最高价、 最低价和收盘价四组价格数据, 这种格式相对比较少见。

8.2 多曲线金融指标

常见的MACD指标及PivotPoint(支撑点) 指标都是复杂的多曲线金融指标, 包含多组指标曲线。

BackTrader支持复杂的多曲线金融指标曲线的绘制, 而且绘制模式非常灵活。

8.3 Observers 观测子模块

在BackTrader量化程序中, 自定义买卖点符号的修改调用都是在主流程中通过Observers观测子模块完成的, 代码如下:

bt.observers.BuySell = MyBuySell

Observers观测子模块类似于传统的Log日志模块或者后台监控模块, 主要用于记录后台交易数据及图信息。

8.4 plot 绘图函数的常用参数

下图为 plot 模块关系属性示意图:

btr_plot

从图中可以看出,plot 模块主要相关模块有:LineBuffer、Cerebro、Strategy 等。

在BackTrader的指标模块Indicators和观测模块Observers中内置了一个plotinfo绘图参数变量, 用于控制指标和观测数据的绘制, 调用模式如下:

sma = bt.indicators.SimpleMovingAverage(self.data,period=15)
sma.plotinfo.plotname 'mysma'

plotinfo变量采用的是dict字典格式, 常用内置参数设置如下:

plotinfo = dict(plot=True,subplot=True,plotname='',plotskip=False,plotabove=False,plotlinelabels=False,plotlinevalues=True,plotvaluetags=True,plotymargin=0.0,plotyhlines=[],plotyticks=[],plothlines=[],plotforce=False,plotmaster=None,plotylimited=True,)

通常, SMA均线指标、 vol成交量和主图价格曲线会叠加显示, 其他指标(如rsi、 kdj等) 都采用独立subplot子图模式, 在主图下方显示。

8.5 买卖点符号和色彩风格

买卖点符号是可以自定义的,案例代码 PlotExt1.py 演示如何自定义买卖点符号,主要代码修改有:

class MyBuySell(bt.observers.BuySell):plotlines = dict(# buy=dict(marker='$\u21E7$', markersize=12.0),  #arrow# sell=dict(marker='$\u21E9$', markersize=12.0)## buy=dict(marker='$++$', markersize=12.0),# sell=dict(marker='$--$', markersize=12.0)#buy=dict(marker="$✔$", markersize=12.0),sell=dict(marker="$✘$", markersize=12.0),)... ...
bt.observers.BuySell = MyBuySell

本案例使用对勾符号(√) 表示买入, 使用叉符号(×) 表示卖出, 同时这两个符号的尺寸也更大一些。在源码中, “√”和“×”符号需要用两个“$”符号表示, 并括住符号代码, 因为需要使用UTF代码符号。自定义买卖点符号的修改调用, 是在主流程中通过BackTrader的
Observers观测子模块完成的:

bt.observers.BuySell = MyBuySell

下面再看一下对图表颜色的修改。
相对于修改买卖点符号而言, 对颜色进行修改更加简单。 在调用plot绘图函数时, 可以直接通过参数传递颜色参数:

tq10_corUp, tq10_corDown = ["#7F7F7F", "#17BECF"]  # plotly
tq09_corUp, tq09_corDown = ["#B61000", "#0061B3"]
tq08_corUp, tq08_corDown = ["#FB3320", "#020AF0"]
tq07_corUp, tq07_corDown = ["#B0F76D", "#E1440F"]
tq06_corUp, tq06_corDown = ["#FF3333", "#47D8D8"]
tq05_corUp, tq05_corDown = ["#FB0200", "#007E00"]
tq04_corUp, tq04_corDown = ["#18DEF5", "#E38323"]
tq03_corUp, tq03_corDown = ["black", "blue"]
tq02_corUp, tq02_corDown = ["red", "blue"]
tq01_corUp, tq01_corDown = ["red", "lime"]
#
tq_ksty01 = dict(volup=tq01_corUp, voldown=tq01_corDown, barup=tq01_corUp, bardown=tq01_corDown
)
tq_ksty02 = dict(volup=tq02_corUp, voldown=tq02_corDown, barup=tq02_corUp, bardown=tq02_corDown
)
tq_ksty03 = dict(volup=tq03_corUp, voldown=tq03_corDown, barup=tq03_corUp, bardown=tq03_corDown
)
tq_ksty04 = dict(volup=tq04_corUp, voldown=tq04_corDown, barup=tq04_corUp, bardown=tq04_corDown
)
tq_ksty05 = dict(volup=tq05_corUp, voldown=tq05_corDown, barup=tq05_corUp, bardown=tq05_corDown
)
tq_ksty06 = dict(volup=tq06_corUp, voldown=tq06_corDown, barup=tq06_corUp, bardown=tq06_corDown
)
tq_ksty07 = dict(volup=tq07_corUp, voldown=tq07_corDown, barup=tq07_corUp, bardown=tq07_corDown
)
tq_ksty08 = dict(volup=tq08_corUp, voldown=tq08_corDown, barup=tq08_corUp, bardown=tq08_corDown
)
tq_ksty09 = dict(volup=tq09_corUp, voldown=tq09_corDown, barup=tq09_corUp, bardown=tq09_corDown
)
tq_ksty10 = dict(volup=tq10_corUp, voldown=tq10_corDown, barup=tq10_corUp, bardown=tq10_corDown
)......
cerebro.plot(style="candle", **tq_ksty10)

程序代码当中的**tq_ksty10变量参数, 两个星号“**”变量是Python的特有语法中字典模式的多变量, 这有些类似于C语言的“宏定义”.

barup和bardown是箭头符号颜色, volup和voldown是成交量曲线颜色。
up(上涨) 、 down(下跌) 表示价格/成交量的变化。
在K线图中有专门的规定, 比如, 当天的成交量或者价格超过昨天的, 则使用up颜色。
在案例中预设了10种不同风格的颜色组合, 大家还可以自己修改其他更多的颜色组合, 看看不同参数的绘制效果,最终显示效果如下所示:

BuySellPointStyle

8.6 vol 成交参数

本示例代码为 PlotExt2vol.py 。

默认的绘图函数代码是:

cerebro.plot(style='candle')

这其中省略了两个和 volume 成交了相关的参数,这两个参数都是布尔类型:

  • volume:默认为 True,表示绘制成交量图形;若为 False,则不绘制成交量图形;
  • voloverlay:默认为 True,表示使用叠加绘制模式;若为 False,则表示非叠加模式,采用独立的 sub 子图绘制成交量。

看看下面代码生成的图片:

cerebro.plot(style="candle", volume=True)

VolumeTrueVoloverlayTrue

再看一下如下代码生成的图片:

cerebro.plot(style="candle", volume=True, voloverlay=False)  # volume成交量:采用subplot子图模式,默认为voloverlay=True叠加模式

VolumeTrueVoloverlayFalse

volume成交量曲线相对来说比较重要, 所以BackTrader量化软件专门设计了一个plot_volume成交量曲线绘制子函数, 其关系属性示意图如下所示:

btr_plot_vol

8.7 多图拼接模式

本实例代码为 PlotExt3.py 。

在调用 plot 绘图函数时,使用 numfigs 设置图形数目,本示例设置为 5,结果图被切分为 5 张独立图片,而不是一张图片:

# plot多图拼接,BT版的股市:《清明上河图》
# 注意修改其实日期参数为:空字符串
# numfigs,默认值为:1
cerebro.plot(numfigs=5)

生成如下 5 张图片:

MultiPics

注意, 各图之间的时间指标是连续的, 把图拼起来就是一张很长的图。当数据太多时,单张图片的部分细节会模糊,影响显示效果。可以使用这种多图拼接模式,使细节更清晰。

8.8 绘制 HA 平均 K 线图

本实例代码 PlotExt4hak.py

cerebro.adddata(data) 代码行上面添加如下代码设置过滤器:

# ----ha-k
data.addfilter(bt.filters.HeikinAshi)

生成图片如下所示:

HAFilter

HA平均K线图通过对数值进行平均化处理, 更加容易发现买卖点信号, 即平均价格的波动, 更容易出现买卖的机会。 一般买卖点信号出现在连续颜色的突变时, 而单个交易日颜色的变化可以忽略。

这篇关于《BackTrader量化交易图解》第8章:plot 绘制金融图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/588172

相关文章

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

图解可观测Metrics, tracing, and logging

最近在看Gophercon大会PPT的时候无意中看到了关于Metrics,Tracing和Logging相关的一篇文章,凑巧这些我基本都接触过,也是去年后半年到现在一直在做和研究的东西。从去年的关于Metrics的goappmonitor,到今年在排查问题时脑洞的基于log全链路(Tracing)追踪系统的设计,正好是对这三个话题的实践。这不禁让我对它们的关系进行思考:Metrics和Loggi

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

使用matplotlib绘制散点图、柱状图和饼状图-学习篇

一、散点图 Python代码如下: num_points = 100x = np.random.rand(num_points) #x点位随机y = np.random.rand(num_points) #y点位随机colors = np.random.rand(num_points) #颜色随机sizes = 1000 * np.random.rand(num_points) # 大

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑

量化交易面试:什么是连贯风险度量?

连贯风险度量(Coherent Risk Measures)是金融风险管理中的一个重要概念,旨在提供一种合理且一致的方式来评估和量化风险。连贯风险度量的提出是为了克服传统风险度量方法(如VaR,风险价值)的一些局限性。以下是对连贯风险度量的详细解释: 基本概念: 连贯风险度量是指满足特定公理的风险度量方法,这些公理确保了风险评估的一致性和合理性。 这些公理包括:非负性、次可加性、同质性和单调

Matlab)实现HSV非等间隔量化--相似判断:欧式距离--输出图片-

%************************************************************************** %                                 图像检索——提取颜色特征 %HSV空间颜色直方图(将RGB空间转化为HS