如何在Backtrader中设置初始持仓?回测前能否持有股票?
回测前设置初始持仓的方法
可以在回测开始前设置初始股票持仓,但你提供的代码存在两个问题:
- 方法名错误:Backtrader的broker类没有
set_position()这个方法,正确方法是setposition() - 缺少必要参数:必须指定对应的标的数据(
data对象),否则broker无法识别要设置哪只股票的持仓
正确的实现方式
方式一:直接通过cerebro设置
先加载标的数据,再设置初始现金和持仓:
import backtrader as bt import datetime # 加载数据 data = bt.feeds.YahooFinanceData( dataname='AAPL', fromdate=datetime.datetime(2020, 1, 1), todate=datetime.datetime(2021, 1, 1) ) cerebro = bt.Cerebro() cerebro.adddata(data) # 设置初始现金 cerebro.broker.setcash(10000.0) # 设置初始持仓:10股AAPL,成本价100 cerebro.broker.setposition(data, size=10, price=100)
方式二:在策略的start方法中设置
如果需要更灵活的控制,可以在自定义策略的start方法中添加初始持仓:
class MyStrategy(bt.Strategy): def start(self): # 在回测启动前设置初始持仓 self.broker.setposition(self.data, size=10, price=100) # 加载数据、初始化cerebro并添加策略 cerebro.addstrategy(MyStrategy)
补充说明
- 设置初始持仓后,broker会自动从初始现金中扣除持仓市值(10*100=1000),剩余现金会相应减少
- 若要设置多只股票的初始持仓,只需对每只对应的
data对象调用setposition()即可
内容的提问来源于stack exchange,提问作者Alightor Li
相关产品推荐
相关产品推荐

