量化交易入门:从一个简单的均线策略说起

用 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

回测框架

可以用 backtradervectorbt 或者自己写一个简单的:

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]

真实场景下的注意事项

⚠️ 回测 ≠ 实盘。一个策略在历史数据上赚钱,不代表未来能赚钱。

需要考虑:

  1. 滑点手续费:每笔交易扣除的成本
  2. 过拟合:在历史数据上反复调参,可能只是拟合了噪声
  3. 幸存者偏差:回测时只看到「还活着的股票」
  4. 黑天鹅:极端行情下模型可能完全失效

小结

  • 量化交易入门不难,Python 几十行代码就能跑起来
  • 深入很难:金融、数学、工程三方面都要懂
  • 风险第一:永远不要用你亏不起的钱去交易

下期会讲怎么用 MT5QMT 接入真实行情,做模拟盘。

📌 觉得有用? 获取最新文章