☰
二、Python量化回测实战:双均线策略从数据获取到绩效评估
2026/10/11 19:53:42 网站建设 项目流程

一、这篇解决什么问题

做量化研究时,很多人卡在第一步:知道策略逻辑,但不知道怎么把它变成可运行、可验证的代码。

双均线是量化里最经典的入门策略,逻辑只有一句话:短期均线上穿长期均线时买入,下穿时卖出。它足够简单,能把“数据获取 → 信号生成 → 回测 → 评估”整条链路跑通,而且每个环节都看得见、改得动。

本文用一只 ETF 的日频数据,完整实现这个流程。读完你可以得到:

  • 一份可运行的双均线回测代码
  • 一张带买卖点标记的价格图
  • 一份绩效指标对比(策略 vs 基准)
  • 一张参数敏感性表格

二、环境与数据准备

2.1 依赖库

pipinstallpandas numpy matplotlib akshare
  • pandas:数据处理
  • numpy:数值计算
  • matplotlib:绘图
  • akshare:免费数据源,获取 ETF 日频行情

2.2 获取数据

importpandasaspdimportnumpyasnpimportakshareasak# 获取沪深300ETF日频数据(前复权)df=ak.fund_etf_hist_em(symbol="510300",period="daily",start_date="20200101",end_date="20241231",adjust="qfq"# 前复权,避免除权跳空造成假信号)df=df.rename(columns={'日期':'date','开盘':'open','最高':'high','最低':'low','收盘':'close','成交量':'volume'})df['date']=pd.to_datetime(df['date'])df=df.sort_values('date').reset_index(drop=True)print(df.head())print(df.shape)

检查点:

  • 数据是否按日期升序
  • 是否有缺失值
  • 复权方式是否为前复权
  • 时间范围是否覆盖至少一轮牛熊

关于复权处理的详细说明,见本系列第1期《Python量化交易入门:用Pandas做数据清洗与复权处理》。

三、核心实现

3.1 策略规则先写清楚

写代码之前,先把规则用文字定义好。这一步不能跳。

项目设定
标的沪深300ETF(510300)
短期均线5日
长期均线20日
买入条件短期均线上穿长期均线(金叉),次日开盘买入
卖出条件短期均线下穿长期均线(死叉),次日开盘卖出
仓位满仓买入,空仓卖出,不加杠杆
成本佣金万分之三 + 滑点千分之一

为什么用次日开盘:均线是用当日收盘价算的,收盘后才知道信号,最早只能次日开盘执行。这是避免未来函数的基本要求。

3.2 计算均线与信号

# 计算均线df['ma5']=df['close'].rolling(5).mean()df['ma20']=df['close'].rolling(20).mean()# 金叉:当日 ma5 > ma20 且前一日 ma5 <= ma20df['golden_cross']=((df['ma5']>df['ma20'])&(df['ma5'].shift(1)<=df['ma20'].shift(1)))# 死叉:当日 ma5 < ma20 且前一日 ma5 >= ma20df['death_cross']=((df['ma5']<df['ma20'])&(df['ma5'].shift(1)>=df['ma20'].shift(1)))# 持仓信号:金叉后为1,死叉后为0df['signal']=np.nan df.lo

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询