
2026年重磅升级已全面落地!欢迎加入专注财经数据与量化投研的【数据科学实战】知识星球!您将获取持续更新的《财经数据宝典》与《量化投研宝典》,双典协同提供系统化指引;星球内含300篇以上独有高质量文章,深度覆盖策略开发、因子分析、风险管理等核心领域,内容基本每日更新;同步推出的「量化因子专题教程」系列(含完整可运行代码与实战案例),系统详解因子构建、回测与优化全流程,并实现日更迭代。我们持续扩充独家内容资源,全方位赋能您的投研效率与专业成长。无论您是量化新手还是资深研究者,这里都是助您少走弯路、事半功倍的理想伙伴,携手共探数据驱动的投资未来!
在量化交易的世界里,回测(Backtesting)是验证交易策略是否有效的关键步骤。很多 Python 初学者想要入门量化交易,却被复杂的框架和繁琐的数据处理劝退。今天给大家介绍一个简洁易用的 Python 量化交易库——Lumibot,并通过一个经典的均值回归策略(Mean Reversion Strategy)来演示如何用它完成策略回测。
本文将带你了解均值回归策略的核心思想,并手把手教你用 Lumibot 框架实现一个基于移动平均线的交易策略,最终对 Tesla(TSLA)股票进行历史回测。
想象一个钟摆在摆动:当它偏离中心(均值)太远时,重力会将它拉回中心。股票价格也有类似的特性——当价格偏离长期均值过多时,往往会出现"回归"的趋势。
均值回归策略正是基于这一思想,利用统计指标(如 RSI、移动平均线等)来判断买卖时机。其核心逻辑如下:
该策略因为简单直观,被广泛应用于股票、外汇和大宗商品等金融产品的交易中。
确认市场或资产处于上升趋势。例如,检查价格是否在 200 日简单移动平均线(SMA)之上。
利用 SMA 识别潜在的入场点。例如,当价格大幅低于 50 日 SMA 时,可能处于超卖状态。
当价格跌至 50 日 SMA 下方且出现回归迹象时买入;当价格反弹并突破 50 日 SMA 时卖出。
首先安装 Lumibot:
pip install lumibot接下来需要获取 Alpaca 券商的 API 凭证。前往 Alpaca 官网注册账户后,在控制面板的 API Keys 部分生成你的 API Key 和 API Secret。
创建一个 config.py 文件,保存你的 API 凭证:
# config.py —— 保存 Alpaca 券商的 API 配置信息
ALPACA_CONFIG = {
"API_KEY": "你的 API Key",
"API_SECRET": "你的 API Secret",
"ENDPOINT": "https://paper-api.alpaca.markets",
# 如果要进行实盘交易,使用:https://api.alpaca.markets
}# 导入 Alpaca 配置
from config import ALPACA_CONFIG
# 导入 Lumibot 相关模块
from lumibot.brokers import Alpaca
from lumibot.backtesting import YahooDataBacktesting
from lumibot.strategies import Strategy
from lumibot.traders import Trader
# 导入日期和数值计算库
from datetime import datetime
import numpy as npclass MeanReversionStrategy(Strategy):
def initialize(self):
self.signal = None # 交易信号,初始为空
self.start = "2022-01-01" # 策略起始日期
self.sleeptime = "1D" # 每天检查一次交易信号
self.short_window = 5 # 短期移动平均线窗口(5 天)
self.long_window = 20 # 长期移动平均线窗口(20 天)
self.position_size = 100 # 每次交易的股数这里定义了两个关键参数:short_window(短期均线,5 天)和 long_window(长期均线,20 天)。策略每天运行一次(sleeptime = "1D"),每次交易 100 股。
def on_trading_iteration(self):
# 获取 TSLA 的历史价格数据
historical_prices = self.get_historical_prices(
"TSLA", max(self.short_window, self.long_window) + 1
)
stock_data = historical_prices.df
# 计算短期和长期移动平均线
stock_data[f'{self.short_window}-day'] = (
stock_data['close'].rolling(self.short_window).mean()
)
stock_data[f'{self.long_window}-day'] = (
stock_data['close'].rolling(self.long_window).mean()
)
# 生成买入信号:短期均线从下方穿越长期均线(金叉)
stock_data['Signal'] = np.where(
np.logical_and(
stock_data[f'{self.short_window}-day'] > stock_data[f'{self.long_window}-day'],
stock_data[f'{self.short_window}-day'].shift(1) < stock_data[f'{self.long_window}-day'].shift(1)
), "BUY", None
)
# 生成卖出信号:短期均线从上方穿越长期均线(死叉)
stock_data['Signal'] = np.where(
np.logical_and(
stock_data[f'{self.short_window}-day'] < stock_data[f'{self.long_window}-day'],
stock_data[f'{self.short_window}-day'].shift(1) > stock_data[f'{self.long_window}-day'].shift(1)
), "SELL", stock_data['Signal']
)
# 获取最新一天的交易信号
self.signal = stock_data.iloc[-1].Signal
symbol = "TSLA"
# 如果信号为买入
if self.signal == 'BUY':
pos = self.get_position(symbol)
if pos is not None:
self.sell_all() # 先清仓已有持仓
# 创建并提交买单
order = self.create_order(symbol, self.position_size, "buy")
self.submit_order(order)
# 如果信号为卖出
elif self.signal == 'SELL':
pos = self.get_position(symbol)
if pos is not None:
self.sell_all() # 清仓已有持仓
# 创建并提交卖单
order = self.create_order(symbol, self.position_size, "sell")
self.submit_order(order)if __name__ == "__main__":
real_trade = False # 设为 True 则进行实盘交易
if real_trade:
# 实盘模式:连接 Alpaca 券商
broker = Alpaca(ALPACA_CONFIG)
strategy = MeanReversionStrategy(broker=broker)
trader = Trader()
trader.add_strategy(strategy)
trader.run_all()
else:
# 回测模式:使用 Yahoo 历史数据
start = datetime(2022, 1, 1) # 回测起始日期
end = datetime(2024, 5, 1) # 回测结束日期
MeanReversionStrategy.backtest(
YahooDataBacktesting,
start,
end
)将 real_trade 设为 False 即可使用 Yahoo 历史数据进行回测,时间范围为 2022 年 1 月 1 日至 2024 年 5 月 1 日。
整个策略的运行流程可以概括为以下几步:
Lumibot 是一个对 Python 初学者非常友好的量化交易框架。通过继承 Strategy 类并实现 initialize 和 on_trading_iteration 两个方法,就可以快速搭建一个完整的交易策略。结合 Yahoo 历史数据,我们无需实盘账户即可完成策略回测。
均值回归策略虽然逻辑简单,但它是理解量化交易入门概念的绝佳起点。在实际应用中,你可以尝试调整移动平均线的窗口参数、更换标的股票、加入止损止盈逻辑,甚至结合 RSI 等其他技术指标来优化策略效果。
需要注意的是,回测结果仅代表历史表现,不能保证未来收益。在进行实盘交易前,请充分了解市场风险。
加入专注于财经数据与量化投研的知识星球【数据科学实战】,获取本文完整研究解析、代码实现细节。
2026年全面升级已落地!【数据科学实战】知识星球核心权益如下:
星球已沉淀丰富内容生态——涵盖量化文章专题教程库、因子日更系列、高频数据集、PyBroker实战课程、专家深度分享与实时答疑服务。无论您是初探量化的学习者,还是深耕领域的从业者,这里都是助您少走弯路、高效成长的理想平台。诚邀加入,共探数据驱动的投资未来!
好文推荐
1. 用 Python 打造股票预测系统:Transformer 模型教程(一)
2. 用 Python 打造股票预测系统:Transformer 模型教程(二)
3. 用 Python 打造股票预测系统:Transformer 模型教程(三)
4. 用 Python 打造股票预测系统:Transformer 模型教程(完结)
6. YOLO 也能预测股市涨跌?计算机视觉在股票市场预测中的应用
9. Python 量化投资利器:Ridge、Lasso 和 Elastic Net 回归详解
好书推荐