在 backtrader 开发者眼里,trade 只是含有一定的信息,并且还是策略编写者不能够直接调用的,并且给出了 trade 的定义以及 trade 包含的信息。
不管我们是做多做空或者平多平空,只要一个品种上的持仓量从 0 变为不为 0,backtrader 就认为一个 trade 开始了。当一个品种上的持仓量从不为 0 的一个数字变为了 0,backtrader 就认为一个 trade 关闭了。
当一个品种的持仓从正的 x 变为负的 y 的话,经历了两个 trade 的变化,第一个是 trade 的关闭,从持仓 x 变为 0,第二个变化是 trade 的开始,从 0 变为持仓 y。由空转多的过程也一样。
我们使用 trade 的时候,基本上可能只有两处,一个是在 notify_trade 里面,一个可能是在 analyzer 里面编写指标的时候使用。
在 notify_trade 里面,我们已经使用过很多次了,在每个策略中都有使用,基本按照固定的模板就行,当然,大家也可以根据自己的需要进行自定义。
def notify_trade(self, trade):
# 一个 trade 结束的时候输出信息
if trade.isclosed:
self.log('closed symbol is : {} , total_profit : {} , net_profit : {}' .format(
trade.getdataname(),trade.pnl, trade.pnlcomm))
# self.trade_list.append([self.datas[0].datetime.date(0),trade.getdataname(),trade.pnl,trade.pnlcomm])
if trade.isopen:
self.log('open symbol is : {} , price : {} ' .format(
trade.getdataname(),trade.price)) 上面在 notify_trade 里面只使用了 trade 的一部分信息,还有更多的信息.
ref: trade 的 id 标识符号,每个 trade 都不一样status(int): trade 的状态,包含三个状态,Created, Open, Closedtradeid: 把 tradeid 传递给 order,当创建的时候,order 里面默认的是 0 (grouping tradeid passed to orders during creation )size(int): 当前 trade 的大小price(float): 当前 trade 的价格value(float): 当前 trade 的价值commission(float): 当前累计的交易费用pnl(float):交易现在的盈利和损失pnlcomm(float): 交易现在的净的盈利和损失,是总的盈利和损失减去交易费用后的值isclosed(bool): 判断交易是否是结束了isopen(bool):判断交易是否是开始了justopened(bool): 判断交易是否是刚刚开始baropen(int): 这个交易是在哪个 bar 上发生的dtopen(float): 交易开始的时间,这个时间是转化成数字的,需要使用 num2date 来转换成 python 的时间格式,或者使用 open_datetimebarclose(int): 交易是在哪个 bar 结束的dtclose(float): 交易结束的时间,这个时间是转化成数字的,需要使用 num2date 来转换成 python 的时间格式,或者使用 close_datetimebarlen(int): 这个交易从开仓到现在经历了多少个 barhistoryon(bool): 历史交易信息是否记录history(list): 保存所有的历史交易信息,列表中的最开始一个,是一个交易的开始的事件,列表中最后一个,是一个交易结束的事件
吐槽一下,感觉 backtrader 关于 trade 和 position 的设计没有达到利用信息最大化,后期,如果可能,看是否对 trade 和 position 改进一下。
至于在 analyzer 里面,使用 trade 信息,稍后会在一个 analyzer 的应用里面做详细的分享。
智慧、心灵、财富,总要有一个在路上,愿我们能在人生的道路上,不断成长、不断成熟~~~
感兴趣可以关注我的专栏:
my_quant_study_note:分享一些关于量化投资、量化交易相关的思考
backtrader 量化投资回测与交易:本专栏免费,分享 backtrader 相关的内容。
量化投资神器-backtrader 源码解析-从入门到精通:本专栏目前收费 99 元,预计更新 100 篇策略+20 篇 backtrader 讲解+80 篇源代码分析。