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

文章目录

  • [8. plot 绘制金融图](#8. plot 绘制金融图)
    • [8.1 金融分析曲线](#8.1 金融分析曲线)
    • [8.2 多曲线金融指标](#8.2 多曲线金融指标)
    • [8.3 Observers 观测子模块](#8.3 Observers 观测子模块)
    • [8.4 plot 绘图函数的常用参数](#8.4 plot 绘图函数的常用参数)
    • [8.5 买卖点符号和色彩风格](#8.5 买卖点符号和色彩风格)
    • [8.6 vol 成交参数](#8.6 vol 成交参数)
    • [8.7 多图拼接模式](#8.7 多图拼接模式)
    • [8.8 绘制 HA 平均 K 线图](#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 线条图:

candle 图:

OHLC 图:

Bar 图:

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

8.2 多曲线金融指标

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

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

8.3 Observers 观测子模块

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

python 复制代码
bt.observers.BuySell = MyBuySell

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

8.4 plot 绘图函数的常用参数

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

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

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

python 复制代码
sma = bt.indicators.SimpleMovingAverage(self.data,period=15)
sma.plotinfo.plotname 'mysma'

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

python 复制代码
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 演示如何自定义买卖点符号,主要代码修改有:

python 复制代码
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观测子模块完成的:

python 复制代码
bt.observers.BuySell = MyBuySell

下面再看一下对图表颜色的修改。

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

python 复制代码
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种不同风格的颜色组合, 大家还可以自己修改其他更多的颜色组合, 看看不同参数的绘制效果,最终显示效果如下所示:

8.6 vol 成交参数

本示例代码为 PlotExt2vol.py

默认的绘图函数代码是:

python 复制代码
cerebro.plot(style='candle')

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

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

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

python 复制代码
cerebro.plot(style="candle", volume=True)

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

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

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

8.7 多图拼接模式

本实例代码为 PlotExt3.py

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

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

生成如下 5 张图片:

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

8.8 绘制 HA 平均 K 线图

本实例代码 PlotExt4hak.py

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

python 复制代码
# ----ha-k
data.addfilter(bt.filters.HeikinAshi)

生成图片如下所示:

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

相关推荐
sleepybear11136 分钟前
在Ubuntu上从零开始编译并运行Home Assistant源码并集成HACS与小米开源的Ha Xiaomi Home
python·智能家居·小米·home assistant·米家·ha xiaomi home
纪伊路上盛名在11 分钟前
(鱼书)深度学习入门1:python入门
人工智能·python·深度学习
Shuai@14 分钟前
VILA-M3: Enhancing Vision-Language Models with Medical Expert Knowledge
人工智能·语言模型·自然语言处理
动亦定16 分钟前
AI与物联网(IoT)的融合
人工智能·物联网
夏末蝉未鸣0128 分钟前
python transformers笔记(TrainingArguments类)
python·自然语言处理·transformer
德育处主任Pro33 分钟前
「py数据分析」04如何将 Python 爬取的数据保存为 CSV 文件
数据库·python·数据分析
咸鱼鲸42 分钟前
【PyTorch】PyTorch中数据准备工作(AI生成)
人工智能·pytorch·python
停走的风1 小时前
二刷(李宏毅深度学习,醍醐灌顶,长刷长爽)
人工智能·深度学习
qinyia1 小时前
Wisdom SSH:探索AI助手在复杂运维任务中的卓越表现
运维·人工智能·ssh
TY-20251 小时前
二、深度学习——损失函数
人工智能·深度学习