Backtrader(十二)- 订单 Order -buy、sell、close
时间:2023-10-25 08:07:00
简介
订单代表发送给经纪行的指令,触发经纪行(使用)broker对象模拟经纪行)执行相关行动。通常在战略类别中next在方法中创建订单。
下订单(买卖)的方法
self.buy()、self.sell()、self.close()、self.order_target_size()、self.order_target_value()、self.order_target_percent() 等
buy()
def buy(self, data=None, size=None, price=None, plimit=None, exectype=None, valid=None, tradeid=0, oco=None, trailamount=None, trailpercent=None, parent=None, transmit=True, **kwargs):
参数解释:
data: 要操作的市场数据,即标的资产数据。None,使用策略self.datas[0]市场数据
size:下单量,size是正数size=None,通过订单量管理者sizer确定订单量。
price:交易价格。默认值None适用于Market、Close订单。具体的交易价格由市场决定Limit、Stop、StopLimit订单必须显式给出price赋值,price价值决定了交易的触发点。对于 StopTrail、StopTrailLimit 订单,是否设置为显式price,不同的交易触发点将决定
plimit:只适用于StopLimit , StopTrailLimit 订单。plimit 和price触发订单价格
exectype:该字段指示了创建订单的类型,可取值如下:
bt.Order.Market 市价单(默认)
bt.Order.Close 收盘价单
bt.Order.Limit 限价单
bt.Order.Stop 止损单
bt.Order.StopLimit 止损限价单
bt.Order.StopTrail 止损跟踪单
bt.Order.StopTrailLimit 止损跟踪限价单
bt.Order.Historical:未知
valid:
可能的取值
None 生成的订单不会过期,将在市场上等待满足条件后执行或手动取消
datetime.datetime / datetime.date 创建的订单直到日期有效。如果订单超过日期,且未满足执行条件,则取消订单过期
Order.DAY / 0 / timedelta() 生成单日订单,有效期为1天,单日不符合执行条件,订单过期取消,通常用于bar是日内交易的分钟级别。日线级别bar不适用
numeric value 对应于matplotlib作为订单有效期的截止日期格式的值
tradeid:这是backtrader应用程序的内部值用于跟踪同一资产的重叠交易。当通知订单状态的变化时,此tradeid发送回策略
** kwargs:用于其他broker可支持的额外参数。backtrader将kwargs传递给创造order对象,供这些broker使用,如Interactive Brokers支持:orderType、lmtPrice、auxPrice
返回值:
被创建的订单对象
sell()
def sell(self, data=None, size=None, price=None, plimit=None, exectype=None, valid=None, tradeid=0, oco=None,
trailamount=None, trailpercent=None,
parent=None, transmit=True,
**kwargs):
参数:与buy完全相同
close()
介绍:
close方法首先检查当前的持仓情况,然后根据持仓情况对应地使用buy或者sell方法来清空仓位,即平仓。也就是对长仓,用sell方法,对短仓用buy方法来平仓,如果用户不指定具体的size值,size会被自动计算,完全平仓。如果指定来size值,且size比持仓量少,那么将实现部分平仓。
参数:与 buy 完全相同。