backtrader股票量化回测超省力必须入门系列(7):佣金、滑点,输出调试用执行信息

看了我的必须入门连载系列,如果你还不能入门,算我白写哈! 全文见这里

本次介绍backtrader技术教程的1.6节,介绍佣金、滑点的设置,以及怎样输出调试用执行信息,这个非常重要。我发现很多同学不会调试,当你不理解一些运行结果时,要多用print或log来输出信息,帮助自己理解和调试策略运行逻辑。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个backtrader股票回测示例,考虑手续费、滑点、资金管理: ```python import backtrader as bt class MyStrategy(bt.Strategy): params = ( ('sma_period', 15), ('atr_period', 14), ('atr_multiplier', 2), ('commission', 0.001), ('slippage', 0.001), ('initial_capital', 100000), ) def __init__(self): self.sma = bt.indicators.SimpleMovingAverage( self.data.close, period=self.params.sma_period) self.atr = bt.indicators.ATR( self.data.high, self.data.low, self.data.close, period=self.params.atr_period) self.position_size = None def next(self): if self.position: if self.data.close[0] < self.sma[0]: self.close() else: if self.data.close[0] > self.sma[0] + \ self.params.atr_multiplier * self.atr[0]: self.position_size = self.params.initial_capital * \ self.params.risk / self.atr[0] self.buy(size=self.position_size) def notify_order(self, order): if order.status in [order.Submitted, order.Accepted]: return if order.status in [order.Completed]: if order.isbuy(): self.log( 'BUY EXECUTED, Size: %.2f, Price: %.2f, Cost: %.2f, Comm: %.2f' % (order.executed.size, order.executed.price, order.executed.value, order.executed.comm)) self.position_size = order.executed.size else: self.log('SELL EXECUTED, Price: %.2f, Cost: %.2f, Comm: %.2f' % (order.executed.price, order.executed.value, order.executed.comm)) self.position_size = None elif order.status in [order.Canceled, order.Margin, order.Rejected]: self.log('Order Canceled/Margin/Rejected') def notify_trade(self, trade): self.log('Trade Profit/Loss: %.2f' % trade.pnl) if __name__ == '__main__': cerebro = bt.Cerebro() cerebro.addstrategy(MyStrategy, risk=0.01) data = bt.feeds.YahooFinanceData( dataname='AAPL', fromdate=datetime.datetime(2010, 1, 1), todate=datetime.datetime(2020, 12, 31)) cerebro.adddata(data) cerebro.broker.setcash(100000) cerebro.broker.setcommission(commission=self.params.commission, margin=0, mult=1) cerebro.broker.set_slippage_fixed( size=self.params.slippage, price=None) cerebro.run() ``` 这个策略使用了SMA和ATR指标来进行交易决策。如果当前没有持仓且价格上穿SMA加上ATR乘以一个倍数,则进行买入;如果当前持仓且价格下穿SMA,则进行卖出。其中,ATR用于计算每次交易的头寸大小。 在`notify_order`方法中,我们输出了每次交易的成本和手续费,用于计算总体的交易成本。在`notify_trade`方法中,我们输出了每次交易的盈亏情况。 在主程序中,我们使用了YahooFinanceData作为数据源,设置了回测时间和初始资金,并设置了手续费、滑点等交易参数。回测时,我们将risk参数设置为0.01,表示每次交易风险不过总资金的1%。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扫地僧量化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值