量化交易学习(三十九)backtrader文档——绘图(2)线的绘图选项

今天这篇是backtrader文档的学习笔记。主要介绍了绘图。

官方文档链接:https://www.backtrader.com/docu/plotting/plotting/

线的绘图选项

指标/观察者有线条,这些线条的绘制方式可能会受到plotlines对象的影响。大多数plotlines中指定的选项都是在绘图时直接传递给matplotlib的。

重要提示:这些选项是按行指定的。

一些选项由backtrader直接控制。这些都以下划线 (_) 开头:

  • _plotskip ( boolean ) 设置为则True跳过特定线的绘制

  • _plotvalue ( boolean ) 控制该行的图例是否包含最后绘制的值(默认为True

  • _plotvaluetag ( boolean ) 控制是否绘制带有最后一个值的右侧标签(默认为True

  • _name ( string ) 更改特定线的绘图名称

  • _skipnan(bool,默认值:False):在绘图时跳过NaN值,并允许例如在指标生成的 2 个远点之间绘制一条线,其中所有中间值均为NaN(新创建的数据点的默认值)

  • _samecolor( boolean )这会强制下一行与前一行具有相同的颜色,从而避免了matplotlib为每个新绘制的元素循环使用颜色图的默认机制

  • _method ( string ) 选择matplotlib将为元素使用的绘图方法。如果未指定,则将选择最基本plot的方法。

示例来自MACDHistohisto线采用业内惯例用条形图绘制。在MACDHisto的定义中可以找到以下定义:

1
2
3

lines = ('histo',)
plotlines = dict(histo=dict(_method='bar', alpha=0.50, width=1.0))

alphawidth是matplotlib的选项

  • _fill_gt/_fill_lt

允许在给定行和以下内容之间进行填充:

  • 另一条线
  • 一个数值

参数是由 2 个元素组成的可迭代对象,其中:

  • 第一个参数是一个字符串(参考线的名称)或一个数值

将在自身值和另一行的值或某一数值之间完成填充

  • 第二个参数是:

    • 具有颜色名称(与matplotlib兼容)或十六进制规范的字符串(请参阅matloplit示例)

    或者:

    • 一个可迭代对象,其中第一个元素是颜色的字符串/十六进制值,第二个元素是指定 alpha 透明度的数值(默认值:0.20通过fillalpha参数控制)

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Fill for myline when above other_line with colour red
plotlines = dict(
myline=dict(_fill_gt('other_line', 'red'))
)

# Fill for myline when above 50 with colour red
plotlines = dict(
myline=dict(_fill_gt(50, 'red))
)

# Fill for myline when above other_line with colour red and 50%
# transparency (1.0 means "no transparency")

plotlines = dict(
myline=dict(_fill_gt('other_line', ('red', 0.50)))
)

将选项传递给未知行

  • 使用name_X,其中X代表从零开始的索引中的数字。这意味着选项适用于线X

一个来自OscillatorMixIn用例:

1
plotlines = dict(_0=dict(_name='osc'))

顾名思义,这是一个混合类,旨在用于多重继承方案(特别是在右侧)。mixin不知道来自其他指标的将成为多重继承一部分的的第一条线(索引从零开始)的实际名称。

这就是为什么选项被指定为_0。子类化发生后,生成的类的第一行将在图中具有名称osc

一些plotlines的示例

BuySell观察者具有以下plotlines

1
2
3
4
plotlines = dict(
buy=dict(marker='^', markersize=8.0, color='lime', fillstyle='full'),
sell=dict(marker='v', markersize=8.0, color='red', fillstyle='full')
)

buysell线具有直接传递给matplotlib来定义markermarkersizecolorfillstyle的选项。所有这些选项都在matplotlib中定义。

Trades观察者具有以下plotlines

1
2
3
4
5
6
7
8
9
10
11
12
...
lines = ('pnlplus', 'pnlminus')
...

plotlines = dict(
pnlplus=dict(_name='Positive',
marker='o', color='blue',
markersize=8.0, fillstyle='full'),
pnlminus=dict(_name='Negative',
marker='o', color='red',
markersize=8.0, fillstyle='full')
)

这里线的名称已被重新定义,例如pnlplus重新定义为Positive。其余选项适用于matplotlib

DrawDown观察者:

1
2
3
4
5
lines = ('drawdown', 'maxdrawdown',)

...

plotlines = dict(maxdrawdown=dict(_plotskip='True',))

这定义了两条线,让最终用户不仅可以访问当前drawdown值,还可以访问其最大值 ( maxdrawdown)。但后者没有被绘制,因为_plotskip=True

BollingerBands指标:

1
2
3
4
5
plotlines = dict(
mid=dict(ls='--'),
top=dict(_samecolor=True),
bot=dict(_samecolor=True),
)

这里的mid线条将具有虚线样式,并且topbot线条将具有与mid线条相同的颜色。

Stochastic类(在_StochasticBase中定义并继承):

1
2
3
4
lines = ('percK', 'percD',)
...
plotlines = dict(percD=dict(_name='%D', ls='--'),
percK=dict(_name='%K'))

较慢的线percD以虚线样式绘制。并且线的名称已更改为包含%符号 (%K%D),这些符号不能在Python 的名称定义中使用


这一篇就到这里啦。欢迎大家点赞、转发、私信。还没有关注我的朋友可以关注 江达小记

江达小记