首頁/ 汽車/ 正文

backtrader框架學習:交易配置篇

原創文章第72篇,專注“個人成長與財富自由、世界運作的邏輯, AI量化投資”。

backtrader最大的優點,它是面向交易的。

市面上很多開源的框架,更像是學術的,面向研究和學習的。離生產環境還比較遠,包括qlib。

國內的vnpy算是功能完善度比較高的,口號是“by traders, for traders”,大致就是這樣的目標,但vnpy的程式碼有點重,安裝和使用較複雜。

backtrader框架學習:交易配置篇

01 交易條件

交易條件的設定要儘可能“高度模擬”真實交易場景。交易條件設定,最常見的有初始資金、交易稅費、滑點、期貨保證金比率等。對成交量做限制、對漲跌幅做限制、對訂單生成和執行時機做限制。交易條件可以透過 Broker來管理

方式1:透過設定backtrader。brokers。BackBroker() 類中的引數,生成新的broker例項,再將新的例項賦值給cerebro。broker ;

方式2:透過呼叫broker中的”set_xxx“ 方法來修改條件,還可透過”get_xxx“ 方法檢視當前設定的條件取值。

一般推薦使用方式2:

def next(self): print(‘當前可用資金’, self。broker。getcash()) print(‘當前總資產’, self。broker。getvalue()) print(‘當前持倉量’, self。broker。getposition(self。data)。size) print(‘當前持倉成本’, self。broker。getposition(self。data)。price) # 也可以直接獲取持倉 print(‘當前持倉量’, self。getposition(self。data)。size) print(‘當前持倉成本’, self。getposition(self。data)。price)

02 滑點

一般滑點在所難免,由於網路延時、市場波動等原因。

滑點分為百分比、固定兩種。以高於+p的價格買,以低於-P的價格賣出。

若二者均設定,則百分比優先順序高。

cerebro。broker。set_slippage_perc(0。0001)cerebro。broker。set_slippage_fixed(0。03)

03 交易費用

交易費用不可忽視,尤其是在交易頻率比較高的策略中。

bt中簡單配置交易費用很容易,但如果要更真實的模擬市場,則需要了解一些細節。

比如交易費率為“萬分之三”,買賣都收,直接setcommission即可。

cerebro。broker。setcommission(0。0003)

但A股實際上還有一個單筆不低於5元,且賣出還有印花稅。

這就需要繼承bt。CommInfoBase,然後自己寫計算邏輯。

class MyStockCommissionScheme(bt。CommInfoBase): ‘’‘ 1。佣金按照百分比。 2。每一筆交易有一個最低值,比如5塊,當然有些券商可能會免5。 3。賣出股票還需要收印花稅。 4。可能有的平臺還需要收平臺費。 ’‘’ params = ( (‘stampduty’, 0。005), # 印花稅率 (‘commission’, 0。005), # 佣金率 (‘stocklike’, True),#股票類資產,不考慮保證金 (‘commtype’, bt。CommInfoBase。COMM_PERC),#按百分比 (‘minCommission’, 5),#最小佣金 (‘platFee’, 0),#平臺費用 ) def _getcommission(self, size, price, pseudoexec): ‘’‘ size>0,買入操作。 size<0,賣出操作。 ’‘’ if size > 0: # 買入,不考慮印花稅,需要考慮最低收費 return max(size * price * self。p。commission,self。p。minCommission)+platFee elif size < 0: # 賣出,考慮印花稅。 return max(abs(size) * price * self。p。commission,self。p。minCommission)+abs(size) * price * self。p。stampduty+platFee else: return 0 # 防止特殊情況下size為0。cerebro。broker。setcommission(0。0003)cerebro。broker。addcommissioninfo(MyStockCommissionScheme())

04 交易訂單型別

回測中使用比較多的還是

市價單和限價單

bt支援

市值,限價,止損,止損限價,止損追蹤,止損追蹤限價

預設是市價單,就是使用下一個Bar的open來交易。

self。buy(exectype=bt。Order。Market)

05 交易函式

策略的核心就是依照計算好的規則,向broker釋出交易指令。

指令有

常規的買或賣

,或

有按目標下單

常規買賣就是 buy, sell, close。買、賣和平倉。

而目標下單函式會根據交易目標自動確定買賣方向。

1, order_target_size,成交後到多少份

2,order_target_value,成交後倉位到多少

3, order_target_percent,成交後倉位佔比

# 按目標數量下單self。order = self。order_target_size(target=size)# 按目標金額下單self。order = self。order_target_value(target=value)# 按目標百分比下單self。order = self。order_target_percent(target=percent)

有了這些準備工作,明天可以開始寫策略。

相關文章

頂部