一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

「手把手教你」入門量化回測最強(qiáng)神器backtrader(三)

 老農(nóng)2020 2021-01-04

1 引言

關(guān)于backtrader,前兩篇推文《【手把手教你】入門量化回測最強(qiáng)神器backtrader(一)》和《【手把手教你】入門量化回測最強(qiáng)神器backtrader(二)》分別介紹了整個框架的組成部分和回測系統(tǒng)的運(yùn)行,以及策略模塊交易日志的編寫和策略參數(shù)的尋優(yōu)。本文在這兩篇文章的基礎(chǔ)上,著重介紹backtrader的Analyzers模塊,并對策略的業(yè)績評價指標(biāo)進(jìn)行可視化分析。Analyzers模塊涵蓋了評價一個量化策略的完整指標(biāo),如常見的夏普比率、年化收益率、最大回撤、Calmar比率等等。Analyzers模塊原生代碼能獲取的評價指標(biāo)如下圖所示,其中TradeAnalyzer和PeriodStats又包含了不少指標(biāo)。由于采用元編程,Analyzers的擴(kuò)展性較強(qiáng),可以根據(jù)需要添加自己的分析指標(biāo),如獲取回測期間每一時刻對應(yīng)的總資金。

 

「手把手教你」入門量化回測最強(qiáng)神器backtrader(三)

 

 

2 Python實現(xiàn)代碼

01 策略模塊編寫

再次回顧一下交易策略模塊(Strategy)的組成部分。交易策略類代碼通常包含參數(shù)或函數(shù)名如下:

(1)params-全局參數(shù),可選:更改交易策略中變量/參數(shù)的值,可用于參數(shù)調(diào)優(yōu)。

(2)log:日志,可選:記錄策略的執(zhí)行日志,可以打印出該函數(shù)提供的日期時間和txt變量。

(3) init:用于初始化交易策略的類實例的代碼。

(4)notify_order,可選:跟蹤交易指令(order)的狀態(tài)。order具有提交,接受,買入/賣出執(zhí)行和價格,已取消/拒絕等狀態(tài)。

(5)notify_trade,可選:跟蹤交易的狀態(tài),任何已平倉的交易都將報告毛利和凈利潤。

(6)next,必選:制定交易策略的函數(shù),策略模塊最核心的部分。

(7)其他,包括start()、nextsstart()、stop()、prenext()、notify_fund()、notify_store()和notify_cashvalue。

 

下面以技術(shù)分析指標(biāo)RSI(不了解的請自行百度)的擇時策略為例,當(dāng)RSI<30時買入,RSI>70時賣出。為了簡便起見,策略模塊中只包含最核心的交易信號。

 

import pandas as pd
import backtrader as bt
from datetime import datetime
class MyStrategy(bt.Strategy):
    params=(('short',30),
            ('long',70),)
    def __init__(self):
        self.rsi = bt.indicators.RSI_SMA(
                   self.data.close, period=21)
    def next(self):
        if not self.position:
            if self.rsi < self.params.short:
                self.buy()
        else:
            if self.rsi > self.params.long:
                self.sell()

02 回測設(shè)置

回測系統(tǒng)設(shè)置與之前一樣,主要是數(shù)據(jù)加載、交易本金、手續(xù)費(fèi)、交易數(shù)量的設(shè)置,此處以tushare的舊接口獲取股票002537的交易數(shù)據(jù)進(jìn)行量化回測。

from __future__ import (absolute_import, division, print_function,  
                        unicode_literals) 
import tushare as ts
#以股票002537為例
df=ts.get_k_data('002537',start='2010-01-01')
df.index=pd.to_datetime(df.date)
#df['openinterest'] = 0
df=df[['open','high','low','close','volume']]
data = bt.feeds.PandasData(dataname=df,                               
                            fromdate=datetime(201311),                               
                            todate=datetime(2020417) )
# 初始化cerebro回測系統(tǒng)設(shè)置                           
cerebro = bt.Cerebro()  
# 加載數(shù)據(jù)
cerebro.adddata(data) 
# 將交易策略加載到回測系統(tǒng)中
cerebro.addstrategy(MyStrategy) 
# 設(shè)置初始資本為100,000
cerebro.broker.setcash(100000.0
#每次固定交易數(shù)量
cerebro.addsizer(bt.sizers.FixedSize, stake=1000
#手續(xù)費(fèi)
cerebro.broker.setcommission(commission=0.001

03 運(yùn)行回測

這里重點(diǎn)是Analyzers模塊的調(diào)用與結(jié)果輸出,調(diào)用模塊是cerebro.addanalyzer(),再從模塊中獲取分析指標(biāo),如夏普比率是bt.analyzers.SharpeRatio,然后是給該指標(biāo)重命名方便之后調(diào)用,即 _name='SharpeRatio'。要獲取分析指標(biāo),需要先執(zhí)行回測系統(tǒng),cerebro.run(),并將回測結(jié)果賦值給變量results,分析指標(biāo)存儲在results[0]里 (strat變量代替),通過strat.analyzers.SharpeRatio.get_analysis()即可獲取相應(yīng)數(shù)據(jù),其他指標(biāo)操作方法類似。

 

print('初始資金: %.2f' % cerebro.broker.getvalue())
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name = 'SharpeRatio')
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='DW')
results = cerebro.run()
strat = results[0]
print('最終資金: %.2f' % cerebro.broker.getvalue())
print('夏普比率:', strat.analyzers.SharpeRatio.get_analysis())
print('回撤指標(biāo):', strat.analyzers.DW.get_analysis())

 

輸出結(jié)果:
初始資金: 100000.00
最終資金: 110215.33
夏普比率: OrderedDict([('sharperatio', 0.094)])
回撤指標(biāo): AutoOrderedDict([('len', 280), ('drawdown', 1.01), ('moneydown', 1126.60), ('max', AutoOrderedDict([('len', 280), ('drawdown', 3.61), ('moneydown', 4016.60)]))])

 

04 回測結(jié)果可視化

下面輸出回測圖表,一張大圖上包含了三張圖:

(1)資金變動圖:可以看到在實施交易策略的數(shù)據(jù)期內(nèi),資金的盈利/損失。
(2)交易收益/虧損。藍(lán)色(紅色)點(diǎn)表示獲利(虧損)交易以及獲利(虧損)多少。
(3)價格圖表。綠色和紅色箭頭分別表示交易策略的進(jìn)入點(diǎn)和退出點(diǎn)。黑線是交易標(biāo)的隨時間變化的價格, 條形圖表示每個條形圖期間資金的交易量。

 

%matplotlib inline 
cerebro.plot()

 

「手把手教你」入門量化回測最強(qiáng)神器backtrader(三)

 

 

05 Analyzers模塊指標(biāo)可視化

 

下面是對Analyzers模塊涵蓋的策略評價指標(biāo)進(jìn)行可視化。通過Analyzers獲取的評價指標(biāo)返回的是字典形式,為更好地展示結(jié)果,本文將其這些分析指標(biāo)的值進(jìn)行表格和圖形化,采用plotly和dash進(jìn)行動態(tài)可視化(也可以使用pyecharts)。 下圖中用到的所有評價指標(biāo)的獲取方法與上述的夏普比率和最大回撤是一樣的,由于這部分內(nèi)容涉及的代碼較多,此處省略(完整代碼見【金融量化】知識星球)。通過圖形和績效評價指標(biāo)可以直觀的看出量化策略的表現(xiàn),輸出結(jié)果如下:

 

「手把手教你」入門量化回測最強(qiáng)神器backtrader(三)

 

 

「手把手教你」入門量化回測最強(qiáng)神器backtrader(三)

 

 

「手把手教你」入門量化回測最強(qiáng)神器backtrader(三)

 

 

「手把手教你」入門量化回測最強(qiáng)神器backtrader(三)

 

 

3結(jié)語

本文以RSI技術(shù)指標(biāo)構(gòu)建擇時策略為例,著重介紹了Analyzers模塊的調(diào)用方法和結(jié)果報告,并對回測的評價指標(biāo)進(jìn)行可視化。通過上述圖表可見backtrader作為一個本地開源框架的強(qiáng)大之處,只需適當(dāng)?shù)脑O(shè)置,便可得到與量化平臺類似的回測效果。最后,學(xué)習(xí)沒有捷徑,要想全面而深入地學(xué)習(xí)backtrader,最好是研讀其官方文檔。當(dāng)然,編程能力較強(qiáng)的可以直接研究其安裝包的原生代碼,了解各個模塊的構(gòu)成,并進(jìn)行功能擴(kuò)展和數(shù)據(jù)源對接等。

參考資料:backtrader官方文檔和安裝包原生代碼

https://www./docu/

關(guān)于Python金融量化

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美日本道一区二区三区| 国内九一激情白浆发布| 精品少妇一区二区视频| 丝袜诱惑一区二区三区| 人妻少妇久久中文字幕久久| 国语久精品在视频在线观看| 欧美日韩一区二区三区色拉拉| 精品国产品国语在线不卡| 亚洲av一区二区三区精品| 不卡一区二区高清视频| 国产精品免费视频视频| 久久精品国产在热亚洲| 日本高清二区视频久二区| 91在线播放在线播放观看| 国产精品欧美一区两区| 欧美欧美欧美欧美一区| 久久中文字幕中文字幕中文| 少妇一区二区三区精品| 在线欧美精品二区三区| 日本熟妇熟女久久综合| 日本熟妇熟女久久综合| 在线观看视频国产你懂的| 免费播放一区二区三区四区| 老外那个很粗大做起来很爽| 国内精品伊人久久久av高清| 四季精品人妻av一区二区三区| 国产一区二区三区草莓av| 中文字幕在线区中文色| 国产成人精品久久二区二区| 福利视频一区二区在线| 又黄又色又爽又免费的视频| 日韩在线精品视频观看| 日韩性生活视频免费在线观看 | 国产欧美日韩一级小黄片| 深夜日本福利在线观看| 国产老熟女超碰一区二区三区| 成人精品视频一区二区在线观看| 亚洲中文字幕人妻系列| 夫妻激情视频一区二区三区| 国产欧美高清精品一区| 日韩精品一级一区二区|