Skip to content

Latest commit

 

History

History
41 lines (26 loc) · 2 KB

File metadata and controls

41 lines (26 loc) · 2 KB

21、backtrader 的一些基本概念---市价单(market order)的创建和撮合逻辑

原文:https://yunjinqi.blog.csdn.net/article/details/111600964

在众多的订单中,首先分享一下,backtrader 的订单执行的两个假设,然后分享下市价单的创建及其成交逻辑,最后分享一个小案例测试市价单。

订单执行的两个假设

  1. backtrader 默认只能在每个 bar 结束的时候下单。在这个 bar 结束的时候,你已经有了这个 bar 和以前 bar 的 open,high,low,close,volume 等信息,然后进行判断是否要下单,如果要下单,就需要至少下个 bar 进行成交。
  2. 成交量不重要。这个假设在实际的交易中是不成立的,每个 bar 的交易量越小,你下市价单造成的市场冲击成本可能越高,下限价单全部成交的时间可能需要更长,所以,要尽可能选择流动性好的资产进行交易。

市价单的创建

backtrader 下市价单,简直是太容易了,只需要考虑两个问题就好:在哪个数据(data,可以是某一个股票、期货等资产)进行交易,以及每次交易多少(size)。

# 下市价单,下到默认数据上,即加载到 cerebro 中的第一个数据
order = self.buy()

# 市价单,将会忽略 valid 参数
order = self.buy(valid=datetime.datetime.now() + datetime.timedelta(days=3))

# 市价单,将会忽略 price
order = self.buy(price=self.data.close[0] * 1.02)

# 市价单,将会交易 25 股股票或者 25 手期货
order = self.buy(size=25)

# 取消订单
self.broker.cancel(order)

# 上面都默认的下到第一个数据上,也可以用参数指定数据,如
order = self.buy(data,size = 100)

# 下单比较不常用的一种方式,先继承一个 order,并编写好相应的参数,然后直接提交给 broker,这个可以忽略
order = self.broker.submit(order) 

市价单的成交逻辑

在收盘之后下一个市价单,会在下个 bar 开盘的时候成交,这是通常的逻辑。