今天开始尝试接触回测框架backtrader。
pandas#py内一个强大的分析结构化数据的工具集,基础是Numpy。openpyxl#打开excel文件报错,需要安装这个库支持excel文件打开matplotlib#绘
按文章中源码绘会报错,即使安装的是matplotlib2版本。
解决办法plot加个参数:
cerebro.plot(volume=False)
跟着走一遍,基本能通。excel数据我用tushare的数据工具随意导了一份出来另存为excel格式,date_trade要按升序事先排序好,否则程序不报错,但是结果不对。
至此,算是对backtrader有个大致了解了。
问题解决:目前学习打算针对的是大陆A股市场。A股市场除了收取手续费外,还有印花税。且手续费有最小值。上文没有提及如何设置。
通过百度找到的答案:
backtrader貌似不支持直接设置印花税,可以通过继承bt.CommInfoBase,然后自己写计算逻辑,自定义卖出佣金叠加印花税。
class MyStockCommissionScheme(bt.CommInfoBase):
"""1.佣金按照百分比。 2.每一笔交易有一个最低值,比如5块,当然有些券商可能会免5.
3.卖出股票还需要收印花税。 4.可能有的平台还需要收平台费。 """
params = (
("stampduty", 0.005), # 印花税率
("commission", 0.005), # 佣金率,bt内置参数
("stocklike", True),#股票类资产,不考虑保证金
("commtype", bt.CommInfoBase.COMM_PERC),#按百分比
("minCommission", 6),#最小佣金
("platFee", 0),#平台费用
)
def _getcommission(self, size, price, pseudoexec):
""" size>0,买入操作。 size<0,卖出操作。 """
if size > 0: # 买入,不考虑印花税,需要考虑最低收费
return max(size * price * self.p.commission*100,self.p.minCommission)+platFee
elif size < 0: # 卖出,考虑印花税。
return max(abs(size) * price * self.p.commission*100,self.p.minCommission)+abs(size) * price * self.p.stampduty+platFee
else:
return 0 # 防止特殊情况下size为0.
#cerebro.broker.setcommission(0.0003)
cerebro.broker.addcommissioninfo(MyStockCommissionScheme())
#backtrader有些混乱,commission是backtrader内置的参数。设置0.005,通过def _getcommission中得到的值是0.00005,所以需要*100修正。stampduty是自定义参数,通过def _getcommission中得到的值就是设定值,所以不需要*100
离成功更进一步了,加油!下一步就是找个成熟的量化策略解剖研究下了
文章为作者独立观点,不代表股票配资公司观点