Backtrader(十) - 经纪行 Broker

简述

现实交易中,用户在经纪行(如 证券公司)开设交易账户,然后向Backtrader提供broker对象模拟现实世界的经济行。broker对象支持各种订单类型,它的主要功能有,检查库存现金能否满足已提交订单的现金需求、在策略的每次迭代中跟踪现金与市值余额、维护各个标的资产的仓位信息、维护佣金和滑点。在类似期货这样的资产交易中,broker会自动在每次迭代时调整现金,因为资产价格变化意味着现金的增加或减少。

默认的经纪行对象类型是 backtrader.brokers.backbroker.BackBroker,主要用于回测,故称为回测broker。
中国用户要实盘交易,则必须开发自己的实盘broker类。

在next中访问broker

self.log(
     f'cash {self.broker.getcash()}, value {self.broker.getvalue()}'
 )

自定义佣金规则,中国股市印花税

'''自定义佣金类,考虑中国印花税'''

import backtrader as bt
from feed import feed
from logger import lg



class stampCommissionScheme(bt.CommInfoBase):
    '''
    本佣金模式下,买入股票仅支付佣金,卖出股票支付佣金和印花税
    '''

    params = (
        ('stamp_duty', 0.005),  # 印花税率
        ('percabs', 'True')
    )


    def _getcommission(self, size, price, pseudoexec):
        # size > 0, 买入,不考虑印花税
        if size > 0:
            return size * price * self.p.commission
        # size < 0, 卖出, 考虑印花税
        elif size < 0:
            return size * price * (self.p.stamp_duty + self.p.commission)

        else:
            return 0

注意:佣金类stampDutyCommissionScheme 的参数percabs默认设为True。则意味着backtrader将佣金率 0.001理解为设定值0.001,若设为False,则理解为 0.001%

使用自定义的佣金规则

cerebro = bt.Cerebro()
cerebro.adddata(feed)
cerebro.addstrategy(SmaCross)

comminfo = stampCommissionScheme(stamp_duty=0.005, commission=0.001)
cerebro.broker.addcommissioninfo(comminfo)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值