返回

用 Python 回测定投策略,解开上证指数定投赚钱之谜

前端

「定投」是近几年非常流行的投资策略,号称能够让投资者在震荡市中胜券在握,实现长期、稳健的收益。然而,定投策略真的像它宣传的那么好吗?作为一名追求实事求是的技术博主,我决定用数据说话,用 Backtrader 回测一下「定投策略」是否真的能赚钱。

什么是定投策略?

定投策略是一种长期投资策略,其核心思想是:在一个相对长的周期中,定期(如每月或每季度)定额投资于某项资产。这种策略可以帮助投资者平均成本,分散投资风险,并克服择时困难的困扰。

定投策略真的有效吗?

理论上,定投策略确实是一种有效的投资策略。因为它可以帮助投资者平均成本,分散投资风险,并克服择时困难的困扰。然而,在实际操作中,定投策略也存在一些问题。

定投策略存在的问题

  1. 定投策略无法避免市场风险。 如果市场持续下跌,定投策略也会亏损。
  2. 定投策略的收益率可能会比较低。 因为定投策略是一种长期投资策略,所以其收益率可能会比一些短期的投资策略要低。
  3. 定投策略需要耐心和纪律。 定投策略是一种长期投资策略,需要投资者有耐心和纪律。如果投资者在市场下跌时失去信心,可能会中途退出,从而错失投资机会。

用 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'])