1 概述
在backtrader回测程序中,当交易trade状态发生改变时,会触发策略的notify_trade方法,这里头可以输出交易trade信息,例子如下:
记录交易收益情况(可省略,默认不输出结果)
def notify_trade(self, trade):
if trade.isclosed:
print('毛收益 %0.2f, 扣佣后收益 % 0.2f, 佣金 %.2f' %
(trade.pnl, trade.pnlcomm, trade.commission))
不仔细的话,你可能想当然以为你已经理解了trade的概念,但仔细想想,你真的理解了吗?trade状态核实发生改变?他有几个状态?它到底是什么意思?很快你就会模糊了!
在我们一般买卖股票时,只涉及向券商发订单,并无交易(trade)的概念。并不是下一个买单,就是一个交易,下一个卖单,又代表另一个交易。交易的概念实际是用户方的概念。
2 那么backtrader中是如何定义交易的呢?
对正常采用自有资金购买股票,不能做空的情况下,当一个订单使得仓位从0变为正值,则打开了一个交易,此后,当某订单使得仓位从正值变为0,则该交易关闭,这两种情况都会触发notify_trade方法。
一个交易可能由多个订单组成。不能做空的情况下,举个例子观察交易状态的变化,在next方法中:
第一次下买单买100股,此订单执行时,仓位从0变为正值(100),系统打开一个交易,会触发notify_trade方法,在notify_trade中检查交易状态status,为1 open。
然后下第二张买单100股,订单执行时不会触发notify_trade,仓位变为200。
然后下卖单卖100股,仍然不会触发notify_trade,仓位变为100。
再下一个卖单卖100股,执行时,仓位从10

本文围绕backtrader回测程序展开,介绍当交易trade状态改变时会触发策略的notify_trade方法。阐述了backtrader中交易的定义,包括不能做空和可以做空两种情况。还提及了高级用法,如记录交易对象、对交易分类等,可指定订单所属交易类型进行分析。
最低0.47元/天 解锁文章
1万+





