返回
用 Python 回测定投策略,解开上证指数定投赚钱之谜
前端
2023-10-07 09:07:12
「定投」是近几年非常流行的投资策略,号称能够让投资者在震荡市中胜券在握,实现长期、稳健的收益。然而,定投策略真的像它宣传的那么好吗?作为一名追求实事求是的技术博主,我决定用数据说话,用 Backtrader 回测一下「定投策略」是否真的能赚钱。
什么是定投策略?
定投策略是一种长期投资策略,其核心思想是:在一个相对长的周期中,定期(如每月或每季度)定额投资于某项资产。这种策略可以帮助投资者平均成本,分散投资风险,并克服择时困难的困扰。
定投策略真的有效吗?
理论上,定投策略确实是一种有效的投资策略。因为它可以帮助投资者平均成本,分散投资风险,并克服择时困难的困扰。然而,在实际操作中,定投策略也存在一些问题。
定投策略存在的问题
- 定投策略无法避免市场风险。 如果市场持续下跌,定投策略也会亏损。
- 定投策略的收益率可能会比较低。 因为定投策略是一种长期投资策略,所以其收益率可能会比一些短期的投资策略要低。
- 定投策略需要耐心和纪律。 定投策略是一种长期投资策略,需要投资者有耐心和纪律。如果投资者在市场下跌时失去信心,可能会中途退出,从而错失投资机会。
用 Backtrader 回测定投策略
为了评估定投策略的有效性和局限性,我使用 Backtrader 对定投策略进行了回测。回测数据来自上证指数,时间范围为 2000 年 1 月 1 日至 2022 年 12 月 31 日。
回测结果显示,定投策略在过去 20 多年的时间里确实取得了正收益。然而,定投策略的收益率并不算很高,年化收益率只有 8% 左右。
结论
综上所述,定投策略是一种有效的投资策略,但它也存在一些问题。投资者在使用定投策略时,需要对这些问题有清醒的认识。
附录:Backtrader 回测代码
import backtrader as bt
# 创建一个策略类
class MyStrategy(bt.Strategy):
# 初始化策略
def __init__(self):
self.cerebro = bt.Cerebro() # 创建一个 Cerebro 实例
# 加载数据
self.data = bt.feeds.YahooFinanceData(
dataname='^SSE',
fromdate=datetime.datetime(2000, 1, 1),
todate=datetime.datetime(2022, 12, 31)
)
# 将数据添加到 Cerebro 实例中
self.cerebro.adddata(self.data)
# 设置交易手续费
self.cerebro.broker.setcommission(commission=0.001)
# 设置仓位规模
self.cerebro.addsizer(bt.sizers.FixedSizeSizer, stake=100000)
# 设置定投策略
self.cerebro.addstrategy(bt.strategies.DoublingUp, stake=100000)
# 策略逻辑
def next(self):
pass
# 创建一个 Cerebro 实例
cerebro = bt.Cerebro()
# 创建一个策略实例
strategy = MyStrategy()
# 将策略添加到 Cerebro 实例中
cerebro.addstrategy(strategy)
# 运行回测
cerebro.run()
# 打印回测结果
print('最终资金:', cerebro.broker.get_value())
print('年化收益率:', cerebro.analyzers.annualreturn.get_analysis()['annreturn'])