python 網(wǎng)站開發(fā) 案例阿里云搜索引擎網(wǎng)址
文章目錄
- 8. plot 繪制金融圖
- 8.1 金融分析曲線
- 8.2 多曲線金融指標(biāo)
- 8.3 Observers 觀測子模塊
- 8.4 plot 繪圖函數(shù)的常用參數(shù)
- 8.5 買賣點(diǎn)符號和色彩風(fēng)格
- 8.6 vol 成交參數(shù)
- 8.7 多圖拼接模式
- 8.8 繪制 HA 平均 K 線圖
8. plot 繪制金融圖
8.1 金融分析曲線
BackTrader內(nèi)置的plot繪圖函數(shù), 通過style參數(shù)變量控制不同風(fēng)格的K線圖, 默認(rèn)有以下幾種風(fēng)格:
- line:線條圖
- candle:蠟燭圖,標(biāo)準(zhǔn) K 線圖
- ohlc:美式 K 線圖,和 bar 參數(shù)一樣
- bar:ohlc 曲線圖,美式 K 線圖,和 ohlc 參數(shù)一樣。
將style參數(shù)設(shè)置為bar或者ohlc, 生成的圖都是一樣的。 如果不設(shè)置 style ,默認(rèn)是line線條圖,或者上一次設(shè)置參數(shù)。下面使用代碼生成四種風(fēng)格的圖表,文件名稱為Plot.py
。
line 線條圖:
candle 圖:
OHLC 圖:
Bar 圖:
在K線圖中, 每天的圖標(biāo)信息都包含開盤價(jià)、 最高價(jià)、 最低價(jià)和收盤價(jià)四組價(jià)格數(shù)據(jù), 但曲線圖通常只有收盤價(jià)一組價(jià)格。 ohlc美式價(jià)格曲線也稱為美式K線, 每天的圖標(biāo)也包含開盤價(jià)、 最高價(jià)、 最低價(jià)和收盤價(jià)四組價(jià)格數(shù)據(jù), 這種格式相對比較少見。
8.2 多曲線金融指標(biāo)
常見的MACD指標(biāo)及PivotPoint(支撐點(diǎn)) 指標(biāo)都是復(fù)雜的多曲線金融指標(biāo), 包含多組指標(biāo)曲線。
BackTrader支持復(fù)雜的多曲線金融指標(biāo)曲線的繪制, 而且繪制模式非常靈活。
8.3 Observers 觀測子模塊
在BackTrader量化程序中, 自定義買賣點(diǎn)符號的修改調(diào)用都是在主流程中通過Observers觀測子模塊完成的, 代碼如下:
bt.observers.BuySell = MyBuySell
Observers觀測子模塊類似于傳統(tǒng)的Log日志模塊或者后臺(tái)監(jiān)控模塊, 主要用于記錄后臺(tái)交易數(shù)據(jù)及圖信息。
8.4 plot 繪圖函數(shù)的常用參數(shù)
下圖為 plot 模塊關(guān)系屬性示意圖:
從圖中可以看出,plot 模塊主要相關(guān)模塊有:LineBuffer、Cerebro、Strategy 等。
在BackTrader的指標(biāo)模塊Indicators和觀測模塊Observers中內(nèi)置了一個(gè)plotinfo繪圖參數(shù)變量, 用于控制指標(biāo)和觀測數(shù)據(jù)的繪制, 調(diào)用模式如下:
sma = bt.indicators.SimpleMovingAverage(self.data,period=15)
sma.plotinfo.plotname 'mysma'
plotinfo變量采用的是dict字典格式, 常用內(nèi)置參數(shù)設(shè)置如下:
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均線指標(biāo)、 vol成交量和主圖價(jià)格曲線會(huì)疊加顯示, 其他指標(biāo)(如rsi、 kdj等) 都采用獨(dú)立subplot子圖模式, 在主圖下方顯示。
8.5 買賣點(diǎn)符號和色彩風(fēng)格
買賣點(diǎn)符號是可以自定義的,案例代碼 PlotExt1.py 演示如何自定義買賣點(diǎn)符號,主要代碼修改有:
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
本案例使用對勾符號(√) 表示買入, 使用叉符號(×) 表示賣出, 同時(shí)這兩個(gè)符號的尺寸也更大一些。在源碼中, “√”和“×”符號需要用兩個(gè)“$”符號表示, 并括住符號代碼, 因?yàn)樾枰褂肬TF代碼符號。自定義買賣點(diǎn)符號的修改調(diào)用, 是在主流程中通過BackTrader的
Observers觀測子模塊完成的:
bt.observers.BuySell = MyBuySell
下面再看一下對圖表顏色的修改。
相對于修改買賣點(diǎn)符號而言, 對顏色進(jìn)行修改更加簡單。 在調(diào)用plot繪圖函數(shù)時(shí), 可以直接通過參數(shù)傳遞顏色參數(shù):
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)
程序代碼當(dāng)中的**tq_ksty10
變量參數(shù), 兩個(gè)星號“**”變量是Python的特有語法中字典模式的多變量, 這有些類似于C語言的“宏定義”.
barup和bardown是箭頭符號顏色, volup和voldown是成交量曲線顏色。
up(上漲) 、 down(下跌) 表示價(jià)格/成交量的變化。
在K線圖中有專門的規(guī)定, 比如, 當(dāng)天的成交量或者價(jià)格超過昨天的, 則使用up顏色。
在案例中預(yù)設(shè)了10種不同風(fēng)格的顏色組合, 大家還可以自己修改其他更多的顏色組合, 看看不同參數(shù)的繪制效果,最終顯示效果如下所示:
8.6 vol 成交參數(shù)
本示例代碼為 PlotExt2vol.py 。
默認(rèn)的繪圖函數(shù)代碼是:
cerebro.plot(style='candle')
這其中省略了兩個(gè)和 volume 成交了相關(guān)的參數(shù),這兩個(gè)參數(shù)都是布爾類型:
- volume:默認(rèn)為 True,表示繪制成交量圖形;若為 False,則不繪制成交量圖形;
- voloverlay:默認(rèn)為 True,表示使用疊加繪制模式;若為 False,則表示非疊加模式,采用獨(dú)立的 sub 子圖繪制成交量。
看看下面代碼生成的圖片:
cerebro.plot(style="candle", volume=True)
再看一下如下代碼生成的圖片:
cerebro.plot(style="candle", volume=True, voloverlay=False) # volume成交量:采用subplot子圖模式,默認(rèn)為voloverlay=True疊加模式
volume成交量曲線相對來說比較重要, 所以BackTrader量化軟件專門設(shè)計(jì)了一個(gè)plot_volume成交量曲線繪制子函數(shù), 其關(guān)系屬性示意圖如下所示:
8.7 多圖拼接模式
本實(shí)例代碼為 PlotExt3.py 。
在調(diào)用 plot 繪圖函數(shù)時(shí),使用 numfigs
設(shè)置圖形數(shù)目,本示例設(shè)置為 5,結(jié)果圖被切分為 5 張獨(dú)立圖片,而不是一張圖片:
# plot多圖拼接,BT版的股市:《清明上河圖》
# 注意修改其實(shí)日期參數(shù)為:空字符串
# numfigs,默認(rèn)值為:1
cerebro.plot(numfigs=5)
生成如下 5 張圖片:
注意, 各圖之間的時(shí)間指標(biāo)是連續(xù)的, 把圖拼起來就是一張很長的圖。當(dāng)數(shù)據(jù)太多時(shí),單張圖片的部分細(xì)節(jié)會(huì)模糊,影響顯示效果??梢允褂眠@種多圖拼接模式,使細(xì)節(jié)更清晰。
8.8 繪制 HA 平均 K 線圖
本實(shí)例代碼 PlotExt4hak.py
在 cerebro.adddata(data)
代碼行上面添加如下代碼設(shè)置過濾器:
# ----ha-k
data.addfilter(bt.filters.HeikinAshi)
生成圖片如下所示:
HA平均K線圖通過對數(shù)值進(jìn)行平均化處理, 更加容易發(fā)現(xiàn)買賣點(diǎn)信號, 即平均價(jià)格的波動(dòng), 更容易出現(xiàn)買賣的機(jī)會(huì)。 一般買賣點(diǎn)信號出現(xiàn)在連續(xù)顏色的突變時(shí), 而單個(gè)交易日顏色的變化可以忽略。