打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
backtrader框架学习:交易配置篇

原创文章第72篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。

backtrader最大的优点,它是面向交易的。

市面上很多开源的框架,更是学术的,面向研究和学习的。离生产环境还比较远,包括qlib。

国内的vnpy算是功能完善度比较高的,口号是“by traders, for traders”,大致就是这样的目标,但vnpy的代码有点重,安装和使用较复杂。

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 # 防止特殊情况下size0.
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)

有了这些准备工作,明天可以开始写策略。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Backtrader量化平台教程(一):backtrader的整体框架
Backtrader库 | 均线买入卖出策略实现
Backtrader量化平台教程(七)Optimizer
使用Backtrader对股票历史数据进行指标回测
Backtrader 基本使用教程 — 量化投资实战教程(1)
Backtrader来啦:交易篇(下)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服