50-50的定投策略回测

50-50策略

(1)把你准备用于投资的钱,50%定投给风险资产:指数基金(比如300ETF等),50%定投给低风险的固定收益产品(货币基金或者债券)。
(2)每隔固定的一段时间,对投资的资产进行一次再平衡(比如一年时间)。使得风险资产(指数基金)和低风险资产的比例始终保持在 50% 对 50%

下面回测一下看看效果

回测

我们从tushare上获取数据,回测个十年吧,标的选用沪深300

start_date = '20090101'
end_date = '20210808'
asset_name = '399300.SZ'
benchmark_df = pro.index_daily(ts_code=asset_name, start_date=start_date, end_date=end_date)
benchmark_df = benchmark_df.sort_values(by='trade_date').reset_index(drop=True)
benchmark_date_se = pd.to_datetime(benchmark_df['trade_date'].astype(str))
benchmark_date_se.name = 'datetime'
benchmark_df.index = benchmark_date_se
#修改一下columns
benchmark_df.columns = ['StockName', 'Date', 'Close', 'Open', 'High', 'Low', 'pre_close',
       'change', 'pct_chg', 'vol', 'amount']
benchmark_df['Adj_Factor'] = 1

我们取换仓周期为20天

interval_num = 20
op_df = pd.DataFrame(index=benchmark_df.index)
trading_date_lst = list(benchmark_df['Date'].astype(str))
op_df['Date'] = benchmark_df['Date'].astype(str)
operation_df = op_df.iloc[range(0,len(op_df),interval_num)]
operation_lst = list(operation_df['Date'])

假设买入和卖出滑点分别为0.2%和0.1%现在回测看看

trader = bac.Trader(initial_money=1000000, buy_slippage=2/1000, sell_slippage=1/1000)
stock_pool = bac.StockPool()
stock_pool._drop_day_len = 1
for today_date in trading_date_lst:
    print(today_date)
    # 是否要调仓
    if today_date in operation_lst:
        open_price = benchmark_df.loc[today_date]['Open']
        #先来看开盘的时候的持仓
        asset_dic = copy.copy(trader._asset_dic)
        money = money = trader._money
        if len(asset_dic) != 0:
            postition_num = asset_dic[asset_name]
        else:
            postition_num = 0
        position_value = postition_num*open_price
        #现在来进行50-50操作,差距在5% 就不操作了
        if position_value > 1.05*money:
            dif_money = position_value - money
            sell_amount = round(0.5*(dif_money/open_price))
            trader.SellAction(asset_name=asset_name, price=open_price, amount=sell_amount, date=today_date)
            print(today_date,'卖出止盈',asset_name,'价格',open_price)
        elif position_value < 0.95*money:
            dif_money = money - position_value
            buy_amount = round(0.5*(dif_money/open_price))
            trader.BuyAction(asset_name=asset_name, price=open_price, amount=buy_amount, date=today_date)
            print(today_date,'买入补仓',asset_name,'价格',open_price)
    # 更新总资产
    today_daybar = benchmark_df.loc[today_date:today_date]
    trader.UpdateTodayAsset(today_date=today_date,today_df=today_daybar)

结果如下图:
在这里插入图片描述
可以看到严重跑输指数,那么我们换一个调仓周期来看,将调仓周期拉长至60个交易日(一个季度)
在这里插入图片描述
好像基本没有变化。
将滑点设置为0看看?

在这里插入图片描述
因为换仓周期太长了,所以滑点无关紧要,也是跑输指数。
把指数换成中证500呢?
在这里插入图片描述

也是大幅跑输指数

结论

可以看到50-50策略只能降低持仓的波动,由于本身一直有一般的仓位持有低收益率的债券和现金,而长期来看,指数的收益一定是要跑赢这些固收类产品的,因此50-50的策略在没有办法提高夏普的情况下,降低波动的结果,就只能是降低收益,最终跑不赢指数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值