backtrader概念(二)Trade

trade 交易

对于正常采用自由资金购买股票,不能做空的情况下。当针对某个行情数据对象下,一个订单使得仓位从0变为正值,则打开了一个交易,会触发 notify_trade();此后,当某个订单使仓位从正值变为0,则该交易关闭,会触发 notify_trade()

一个交易可以由多张订单组成
举个例子:
第一次下单,买100股,仓位从 0 变成 100。打开交易,触发notify_trade()
第二次下单,卖100股,仓位从 200 变成 100。不触发notify_trade()
第三次下单,买100股,仓位从 100 变成 0。关闭交易,触发notify_trade()

再加上可以做空的情况进行分析:
当仓位从0变成非0,则打开交易;此后仓位从非0,变为0,则关闭交易。

如果某个订单使得仓位从正值变到负值,或负值变到正值。则意味着两个动作,一个交易被关闭(非0->0),一个新的交易被打开(0->非0)。

打开交易,触发notify_trade,此时trade.status=1,open
关闭交易,触发notify_trade,此时trade.status=2,close

策略中 self.close():
不能做空的情况下,self.close()会一次性市价卖出全部仓位,关闭交易
可以做空的情况下,self.close()默认市价买回所有卖空仓位,关闭交易

trade对象的属性

ref:唯一交易标识符,int

data:交易涉及到行情数据对象

status:状态。0:Created、1:Open、2:Closed

tradeid:交易id,int,由创建订单时的参数tradeid设置, 如:self.buy(tradeid=1)。默认为0,用于区分不同类型的交易

size(int):交易当前的数量

price(float):交易的当前价格

value(float):交易的当前市值

commission(float):当前累计佣金

pnl(float):当前毛利或损失

pnlcomm(float):扣佣后的净利润

isclosed(boolen):交易是否关闭

isopen(boolen)::交易是否开放

justopened(boolen):交易是否刚刚打开

baropen(int):交易打开的bar

dtopen(float):交易打开的日期时间,使用方法open_datetime获取python的datetime.datetime,或使用backtrader提供的 num2date

barclose(int):交易关闭的bar

dtclose(float):交易关闭的日期时间

barlen(int):交易开放的bar数

historyon(boolen):是否记录交易历史

history(list):交易更新事件列表

trade对象的方法

getdataname(self,):获取涉及的行情数据对象名字

open_datetime(self, tz-None, naive=True):交易打开日期时间

close_datetime(self, tz-None, naive=True):交易关闭日期时间

update(self, order, size, price, value, commission, pnl, comminfo):更新当前交易

策略的 _trades 属性

作用:记录了发生过的交易trade列表
使用:

self._trades[self.data0][0]

含义:返回 与行情数据self.data0 相关的,tradeid为0 的trades列表

trade的history属性

一个记录每笔交易的详细历史。
使用:

首先创建cerebro时开启记录交易历史

cerebro = bt.Cerebro(tradehistory=True)

获取数据

def notify_trade(self, trade):
	for h in trade.history:

每个h中含有 status, event两个属性

h.status.status
h.status.dt
h.size
h.event.order
h.event.size
。。。

你可能感兴趣的:(量化,python)