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
系统当前共有 427 篇文章