【答读者问5】如何实现以当天收盘价交易?
作者:yunjinqi   类别:    日期:2021-12-23 17:29:19    阅读:1422 次   消耗积分:0 分    

backtrader本身提供了一个close order,这个能够以收盘价买入,但是,这个收盘价是第二天的收盘价,用于买卖基金没什么问题,但是用到正常的交易,如尾盘选股买入的方法,就不能够实现了。

首先,在提供如何做的时候,先声明一下,这样做是有风险的,是存在逻辑上的不合理的。因为这个信号本身是要根据当天的收盘价来产生,收盘价没有确定的时候,是没有办法产生交易信号的,但是,在收盘价确定了之后,这个周期也往往结束了,不能在这个bar上进行交易了,这就是最核心的矛盾。所以,在实盘的时候,使用这种模式,可能会产生信号闪烁,即如果实际当中,是在2:55分来选股,用2:55分的价格作为收盘价,产生的交易信号与3:00产生的交易信号是可能不同的。

实现以当天收盘价交易的方法:

在next当中,正常产生的交易信号是在close[0],即当前bar的时刻,可以尝试使用未来数据,在close[1],即使用下个bar收盘的时候的数据,来产生交易信号,并且使用close order来下单,这样,在下个bar的收盘出现交易信号的时候,也在下个bar的收盘的时候成交了。

注意,如果使用close[1]需要注意index error,很可能会在最后一个bar报错,可以使用try except 避免。

还有一种方法是设置coc这个参数,coc代表cheat_on_close
这种方法我自己没有使用过,是在源码中找到的,使用前请核对。

import backtrader as bt
cerebro = bt.Cerebro()
cerebro.broker = bt.brokers.BackBroker(coc=True)

————————————————

版权声明:本文为CSDN博主「云金杞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_26948675/article/details/116142356


版权所有,转载本站文章请注明出处:云子量化, http://www.woniunote.com/article/34
上一篇:【答读者问4】如何实现all-in(每次下单使用全部资金)
下一篇:【答读者问6】如何获取哪些股票有持仓?