iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0
AI & Data

量化交易30天系列 第 13

量化交易30天 Day13 - backtrader回測框架實作(四) Observers模組

量化交易30天
本系列文章是紀錄一位量化交易新手的學習過程,除了基礎的Python語法不說明,其他金融相關的東西都會一步步地說明,希望讓更多想學習量化交易但是沒有學過相關金融知識的朋友們,透過這系列的文章,能夠對量化交易略知一二,也歡迎量化交易的高手們多多交流。

還記得在Day10均線交叉策略看到的這張圖嗎?從上到下分成4個區塊(Cash and Value/Trade/BuySell/CrossOver),之前有分別講一下這4個區塊的功能,這篇則是說明這些區塊是怎麼呼叫出來的,以及這些區塊是否可以增加更多資訊或是刪減一些區塊。

先來看一下document

All backtrader sample charts have so far had 3 things plotted which seem to be taken for granted because they are not declared anywhere:

  • Cash and Value (what’s happening with the money in the broker)
  • Trades (aka Operations)
  • Buy/Sell Orders

They are Observers and exist within the submodule backtrader.observers. They are there because Cerebro supports a parameter to automatically add (or not) them to the Strategy:

  • stdstats (default: True)

所以如果要把Cash & Value/Trades/BuySell的內容刪除,只要在cerebro的部份修改成下面這行就好:

cerebro = bt.Cerebro(stdstats=False)

就會得到下面這張圖,只剩下股價走勢、長短均線、均線交叉訊號。

那如果想要把Cash & Value的部份也納入觀察,可以單獨增加這個區塊,只要在cerebro的部份改成:

import math
cerebro = bt.Cerebro(stdstats=False)
# 加上下面這一行
cerebro.addobserver(bt.observers.Broker)
cerebro.adddata(data)
cerebro.addstrategy(SmaCross)
cerebro.run()
cerebro.plot()

或是再加上DrawDown圖(每日損失):

...
cerebro.addobserver(bt.observers.Broker)
# 加上下面這行
cerebro.addobserver(bt.observers.DrawDown)
...

如果想把Drawdown的部份,用文字印出來,則可以在strategy的部份,加上兩行code:

class SmaCross(bt.Strategy):
    ...
    def next(self):
        ...
        # 加上下面這兩行
        self.log('DrawDown: %.2f' % self.stats.drawdown.drawdown[-1])
        self.log('MaxDrawDown: %.2f' % self.stats.drawdown.maxdrawdown[-1])
        ...

執行回測時就會印出每日DrawDon及MaxDrawDown,如下

2019-01-16, DrawDown: 0.00
2019-01-16, MaxDrawDown: 0.00
2019-01-17, DrawDown: 0.00
2019-01-17, MaxDrawDown: 0.00
...
2019-03-29, DrawDown: 1.26
2019-03-29, MaxDrawDown: 1.97
2019-04-01, DrawDown: 1.26
2019-04-01, MaxDrawDown: 1.97
...
2019-12-27, DrawDown: 0.00
2019-12-27, MaxDrawDown: 4.60
2019-12-30, DrawDown: 0.00
2019-12-30, MaxDrawDown: 4.60

從上面幾個例子來看,backtrader可以根據個人需求去調整觀測數據的模板,算是蠻彈性的機制,因為不同策略要看的指標往往會有些不同。

本篇總結
那這篇就先寫到這,backtrader這幾篇寫了交易策略、下單部位控制、數據觀測模板,接下來就可以來介紹python串接券商API下單,因為我自己是用IB(Interactive Brokers)交易,所以會以IB的API作為範例,請繼續收看囉。

P.S.
如果大家對於量化交易有興趣的話,我自己有上過以下這門課,課程內容從串接股市資料API、儲存至資料庫、將自己的策略轉化成程式碼、自動下單,並且可以把整個流程自動化,每天早上執行一次,一整天就不用看盤了,覺得是蠻實戰的,可以參考看看。

筆者 Sean
奈米戶投資人 / Python愛用者
喜歡用Python玩轉金融數據,從個股基本面、技術面、籌碼面相關資料,一直到總體經濟數據,都是平常接觸到的素材;對於投資,除了研究歷史數據,也喜歡瞭解市場上大家在玩些什麼。


上一篇
量化交易30天 Day12 - backtrader回測框架實作(三)Sizers模組
下一篇
量化交易30天 Day14 - 串接券商API做交易(一) IB + IbPy
系列文
量化交易30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言