量化交易入门:从一个简单的均线策略说起
用 Python 实现一个 5 日/20 日均线交叉策略,聊聊量化交易的基本流程。
📅 2026/06/26· ✍️ 慧鑫量化
#Python#均线#策略#入门
量化交易入门:从一个简单的均线策略说起
很多朋友对量化交易的第一印象是「神秘」和「高深」,其实入门门槛没想象中那么高。今天用一个最简单的均线交叉策略,带你走完量化交易的基本流程。
策略思路
双均线交叉(Golden Cross / Death Cross):
- 短期均线上穿长期均线 → 买入信号(金叉)
- 短期均线下穿长期均线 → 卖出信号(死叉)
这里用 5 日和 20 日均线。
Python 实现
import pandas as pd
import numpy as np
def moving_average_crossover(prices, short=5, long=20):
short_ma = prices.rolling(short).mean()
long_ma = prices.rolling(long).mean()
signals = pd.DataFrame({
'price': prices,
'short_ma': short_ma,
'long_ma': long_ma,
})
# 1 = 持仓, 0 = 空仓
signals['position'] = 0
signals.loc[short_ma > long_ma, 'position'] = 1
# 状态保持:把 position 向前填充
signals['position'] = signals['position'].replace(0, np.nan).ffill().fillna(0)
return signals
回测框架
可以用 backtrader、vectorbt 或者自己写一个简单的:
def backtest(signals, initial_cash=100_000):
cash = initial_cash
position = 0
for i, row in signals.iterrows():
if row['position'] == 1 and position == 0:
# 买入
position = cash / row['price']
cash = 0
elif row['position'] == 0 and position > 0:
# 卖出
cash = position * row['price']
position = 0
return cash + position * signals['price'].iloc[-1]
真实场景下的注意事项
⚠️ 回测 ≠ 实盘。一个策略在历史数据上赚钱,不代表未来能赚钱。
需要考虑:
- 滑点和手续费:每笔交易扣除的成本
- 过拟合:在历史数据上反复调参,可能只是拟合了噪声
- 幸存者偏差:回测时只看到「还活着的股票」
- 黑天鹅:极端行情下模型可能完全失效
小结
- 量化交易入门不难,Python 几十行代码就能跑起来
- 深入很难:金融、数学、工程三方面都要懂
- 风险第一:永远不要用你亏不起的钱去交易
下期会讲怎么用 MT5 或 QMT 接入真实行情,做模拟盘。