文章目录
- 8. plot 绘制金融图
- 8.1 金融分析曲线
- 8.2 多曲线金融指标
- 8.3 Observers 观测子模块
- 8.4 plot 绘图函数的常用参数
- 8.5 买卖点符号和色彩风格
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观测子模块完成的, 代码如下:
bt.observers.BuySell = MyBuySell
Observers观测子模块类似于传统的Log日志模块或者后台监控模块, 主要用于记录后台交易数据及图信息。
8.4 plot 绘图函数的常用参数
下图为 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种不同风格的颜色组合, 大家还可以自己修改其他更多的颜色组合, 看看不同参数的绘制效果,最终显示效果如下所示: