整理 course 目录:原课程归入同名文件夹,新增学习资料/动手练习分类

This commit is contained in:
2026-09-28 11:52:44 +08:00
parent 5629d57ea7
commit cb211da473
51 changed files with 398 additions and 32 deletions
+36
View File
@@ -0,0 +1,36 @@
"""04 | 动量轮动策略
目标:从"单票择时"升级到"多标的轮动"。
策略:每月末看过去 N 日涨幅,持有最强的一只。
"""
import pandas as pd, numpy as np
from lib_quant import get_daily, net_value, stats
POOL = {"600519": "贵州茅台", "000001": "平安银行", "300750": "宁德时代",
"601318": "中国平安", "000858": "五粮液"}
LOOKBACK, FREQ = 20, 20 # 回看20日,每20个交易日调仓
px = {}
for c in POOL:
d = get_daily(c, "20200101", "20241231")[["日期", "收盘"]].set_index("日期")
px[c] = d["收盘"]
prices = pd.DataFrame(px).dropna()
mom = prices.pct_change(LOOKBACK)
rets = []
cur = None
for i in range(LOOKBACK, len(prices) - 1):
if (i - LOOKBACK) % FREQ == 0: # 调仓日
cur = mom.iloc[i].idxmax() # 动量最强
if cur is not None:
r = prices[cur].iloc[i + 1] / prices[cur].iloc[i] - 1
rets.append(r)
else:
rets.append(0.0)
s = pd.Series(rets)
print("== 动量轮动 ==", stats(s))
print("== 等权买入持有 ==", stats(prices.pct_change().mean(axis=1).iloc[LOOKBACK:]))
# 思考题:
# 1) 换 LOOKBACK (10/60/120) 看结果——动量在A股有效吗?
# 2) 为什么不持有全部、按动量加权?(提示: 集中 vs 分散)