【Python量化实战宝典 #29】基金定投、配置手册:定投回测与再平衡(Python 可跑)
手册定位:模块四第 5 篇。定投与配置是中长期资金的主战法——定投平滑成本、再平衡锁定比例。本篇讲怎么用 #07 的历史净值做定投回测与组合再平衡。
数据来源复用 #07 历史净值(/jh/hb/lsjz/{代码})。
1. 你将得到什么
- 周/月定投 的回测代码(累计份额、平均成本、收益率);
- 股债再平衡(固定比例、偏离阈值触发)的写法;
- 定投 vs 一次性买入的对比思路;
- 定投/配置的 4 个坑(净值日期、分红处理、再平衡频率、止盈)。
2. 取数约定(复用)
| 历史净值 | /jh/hb/lsjz/{代码} | #07 |
| ETF/基金列表 | /fund/list/etf | #07 |
3. 数据来源(复用,不重复罗列)
详见 #07 基金行情与净值接口手册(历史净值端点)。
4. 核心模板函数(自包含可跑)
import pandas as pd
import numpy as np
_MOCK = True
def dca_backtest(nav_series, amount=1000, every=1):
"""nav_series: 单位净值序列(升序)。每 every 期投入 amount。返回总份额/成本/收益。"""
s = pd.Series(nav_series)
shares = 0.0
cost = 0.0
for i in range(0, len(s), every):
shares += amount / s.iloc[i]
cost += amount
value = shares * s.iloc[–1]
return {"份额": shares, "成本": cost, "市值": value, "收益率": value / cost – 1}
def rebalance(weights, navs, threshold=0.05):
"""固定比例再平衡:偏离 threshold 则调回目标权重。返回当前权重。"""
values = np.array(navs)
total = values.sum()
cur = values / total
need_rebalance = np.any(np.abs(cur – np.array(weights)) > threshold)
return cur, need_rebalance
def run_check():
nav = [1.00, 1.02, 0.98, 1.05, 1.10, 1.08, 1.15] # 波动上行
r = dca_backtest(nav, amount=1000, every=1)
assert r["收益率"] > 0 and r["份额"] > 0
cur, reb = rebalance([0.5, 0.5], [1200, 800], threshold=0.05)
assert reb # 60/40 偏离>5% 需再平衡
print("校验通过 | 定投收益率=%.2f%% 再平衡触发=%s" % (r["收益率"] * 100, reb))
return r
if __name__ == "__main__":
run_check()
5. 跑通示例
r = run_check()
print("定投结果:", {k: round(v, 3) for k, v in r.items()})
6. 坑与注意事项
7. 小结与下一篇预告
定投/配置给「中长期稳健」的资金管理。下一篇讲盘口与高频数据处理——逐笔/五档怎么用,进入短线/高频视角。
下一篇预告:《【Python量化实战宝典 #30】盘口与高频数据处理手册:逐笔、五档怎么用(Python 可跑)》
8. 免责声明
本文为基金定投示例,演示数据为虚构,不构成投资建议。
网硕互联帮助中心





评论前必须登录!
注册