数据:上证指数(2020-01-02 至 2026-06-30,共 1571 个交易日)
策略:双均线交叉(MA10 × MA30),95%资金入场,万2.5手续费
上图展示了大盘走势(黑色)、短期均线MA10(蓝色)、长期均线MA30(红色),以及策略的买入信号(🟢 绿色箭头)和卖出信号(🔴 红色箭头)。中图为账户净值变化,下图为回撤走势。
5组不同均线参数的回测结果对比。每个参数组合代表不同的交易频率和风险收益特征。
| 参数 | 总收益率 | 最大回撤 | 交易次数 | 特点 |
|---|---|---|---|---|
| MA5×MA20 | +6.62% | -32.69% | 55次 | 收益最高,但回撤也大,短期均线更敏感 |
| MA5×MA30 | +8.11% | -20.36% | 42次 | 综合最佳,收益正且回撤可控 |
| MA10×MA30 ← 本次 | -0.72% | -14.02% | 23次 | 回撤最小,但几乎不赚不亏 |
| MA10×MA60 | -0.37% | -19.78% | 12次 | 交易频率低,信号少 |
| MA20×MA60 | -4.76% | -31.27% | 14次 | 长期均线反应太慢,错过行情也躲不开大跌 |
共 45 笔交易(23次买入,22次卖出),以下为最近部分交易:
核心策略不到40行,可以直接在服务器上运行和修改。
class GoldenCrossStrategy(bt.Strategy):
params = (
("short_period", 10), # 短期均线天数
("long_period", 30), # 长期均线天数
("target_pct", 0.95), # 每次用95%资金买入
)
def __init__(self):
self.short_ma = bt.ind.SMA(self.data.close,
period=self.params.short_period)
self.long_ma = bt.ind.SMA(self.data.close,
period=self.params.long_period)
self.crossover = bt.ind.CrossOver(self.short_ma, self.long_ma)
self.order = None
def next(self):
if self.order:
return
if not self.position:
if self.crossover > 0: # 金叉 → 买入
self.order = self.order_target_percent(
target=self.params.target_pct)
else:
if self.crossover < 0: # 死叉 → 清仓
self.order = self.order_target_percent(target=0.0)
/root/quant-tutorial/source /root/quant-tutorial/.venv/bin/activatepython /root/quant-tutorial/demo_strategy.py
| 平台 | 特点 | 适合 |
|---|---|---|
| 聚宽 JoinQuant | 在线回测,无需本地安装 | 零基础入门 |
| 掘金量化 MyQuant | 客户端软件,多品种 | 进阶 |
| 米筐 RiceQuant | 数据质量高,社区活跃 | 进阶 |
| QMT / PTrade | 券商自带量化终端 | 有实盘需求 |
前3个月的目标是理解量化是怎么回事,不是跑赢市场。