这是一个本地研究看板:WindPy 负责取数,Python 负责回测,Streamlit 负责浏览结果。第一版只做行业 ETF 多头轮动,不自动下单,也不做股指期货对冲。
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
streamlit run app.py打开浏览器里的 http://localhost:8501。如果使用 WindPy 数据源,需要先登录 Wind 终端,并在同一个 Python 环境里能 from WindPy import w。
示例数据:不依赖 Wind,用随机生成的类市场数据验证页面和策略逻辑。WindPy:读取data/universe_industry_etf.csv的 ETF 代码,然后用w.wsd拉取close和amt。
默认标的池在 data/universe_industry_etf.csv,可以自行增删 ETF。保留 code、name、enabled 三列即可。
- 调仓:默认周频,信号在调仓日收盘后计算,下一交易日生效。
- 打分:
20日动量 + 60日动量 + 120日动量 - 波动惩罚的横截面标准化得分。 - 过滤:上市历史充足、价格高于中期均线、平均动量为正、日均成交额达标。
- 持仓:默认选前 5 只等权;合格标的少于 3 只时降低总仓位,剩余持现金。
- 成本:默认单边 12.5bp,每次换仓按权重变化扣除。
每次运行会写入 outputs/:
signals.csv:每期入选 ETF、得分、目标权重。trades.csv:每期权重变化和估算成本。performance.csv:核心绩效指标。equity_curve.csv:日度净值、回撤、收益、换手。weights.csv:日度目标权重。
python3 -m unittest discover -s tests