量化因子挖掘策略开发回测python环境
所属分类 quant
浏览量 11
一、核心环境配置
1. 基础Python环境
# 推荐使用 conda 创建独立环境
conda create -n quant python=3.9
conda activate quant
# 或者使用 venv
python -m venv quant_env
source quant_env/bin/activate # Linux/Mac
# 或 quant_env\Scripts\activate # Windows
2. 核心包安装
# 基础数据分析
pip install numpy pandas scipy statsmodels scikit-learn
# 量化金融专用
pip install ta-lib # 技术指标库(需要单独安装依赖)
pip install empyrical # 绩效分析
pip install pyfolio # 组合分析
pip install riskfolio-lib # 组合优化
# 替代ta-lib的简便方案
pip install ta # 纯Python实现的技术指标
二、回测框架选择
1. Backtrader - 功能全面
import backtrader as bt
class MyStrategy(bt.Strategy):
def __init__(self):
self.sma = bt.indicators.SimpleMovingAverage(self.data, period=20)
def next(self):
if self.data.close[0] > self.sma[0]:
self.buy()
elif self.data.close[0] < self.sma[0]:
self.sell()
# 安装
pip install backtrader
2. Zipline - 专业量化
from zipline import run_algorithm
from zipline.api import order, symbol
def initialize(context):
context.asset = symbol('AAPL')
def handle_data(context, data):
order(context.asset, 10)
# 安装较复杂,推荐使用conda
conda install -c conda-forge zipline
3. VectorBT - 向量化快速回测
import vectorbt as vbt
price = vbt.YFData.download('AAPL').get('Close')
fast_ma = vbt.MA.run(price, 10)
slow_ma = vbt.MA.run(price, 20)
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
pf = vbt.Portfolio.from_signals(price, entries, exits)
pf.stats()
# 安装
pip install vectorbt
4. Qlib - 微软开发的AI量化平台
from qlib.contrib.strategy import TopkDropoutStrategy
from qlib.contrib.evaluate import backtest
# 安装
pip install pyqlib
三、因子挖掘工作流
1. 数据获取模块
# 数据源配置
import pandas as pd
import yfinance as yf
import akshare as ak # 国内数据
import tushare as ts # 替代选择
import baostock as bs # 免费数据源
# 安装
pip install yfinance akshare tushare baostock
2. 因子计算示例
import numpy as np
import pandas as pd
class FactorGenerator:
def __init__(self, data):
self.data = data
def calculate_momentum(self, period=20):
"""动量因子"""
return self.data['close'].pct_change(period)
def calculate_volatility(self, window=20):
"""波动率因子"""
return self.data['close'].pct_change().rolling(window).std()
def calculate_rsi(self, period=14):
"""RSI因子"""
delta = self.data['close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=period).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
rs = gain / loss
return 100 - (100 / (1 + rs))
3. 因子检验模块
from alphalens import performance, plotting
import alphalens as al
def analyze_factor(factor_data, prices):
"""
因子分析
"""
# 因子数据预处理
factor_data = al.utils.get_clean_factor_and_forward_returns(
factor_data,
prices,
quantiles=5,
periods=(1, 5, 10)
)
# IC分析
ic = al.performance.factor_information_coefficient(factor_data)
# 分组收益
mean_return_by_q, std_err_by_q = al.performance.mean_return_by_quantile(factor_data)
return ic, mean_return_by_q
# 安装
pip install alphalens
四、完整项目结构示例
quant_project/
├── config/
│ ├── __init__.py
│ └── settings.py # 配置文件
├── data/
│ ├── fetcher.py # 数据获取
│ ├── processor.py # 数据处理
│ └── storage.py # 数据存储
├── factors/
│ ├── __init__.py
│ ├── technical.py # 技术因子
│ ├── fundamental.py # 基本面因子
│ └── custom.py # 自定义因子
├── backtest/
│ ├── engine.py # 回测引擎
│ ├── strategies.py # 策略
│ └── analyzer.py # 绩效分析
├── utils/
│ ├── helpers.py
│ └── metrics.py # 评估指标
└── main.py
五、推荐开发环境
1. Jupyter Lab - 交互式研究
pip install jupyterlab
# 量化相关扩展
pip install jupyterlab-dash
2. VS Code配置
{
"python.pythonPath": "quant_env/bin/python",
"python.analysis.extraPaths": ["./quant_project"],
"jupyter.notebookFileRoot": "${workspaceFolder}"
}
3. Docker环境(可选)
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "main.py"]
六、快速开始的模板代码
# requirements.txt
numpy>=1.21.0
pandas>=1.3.0
backtrader==1.9.76.123
vectorbt==0.25.0
yfinance==0.1.70
empyrical==0.5.5
matplotlib>=3.4.0
seaborn>=0.11.0
jupyterlab>=3.0.0
# quick_start.py
import pandas as pd
import numpy as np
import vectorbt as vbt
import yfinance as yf
import matplotlib.pyplot as plt
# 1. 获取数据
data = yf.download('AAPL', start='2020-01-01', end='2023-01-01')
# 2. 计算简单因子
price = data['Close']
returns = price.pct_change()
sma_short = price.rolling(10).mean()
sma_long = price.rolling(30).mean()
# 3. 生成交易信号
entries = sma_short > sma_long
exits = sma_short < sma_long
# 4. 回测
pf = vbt.Portfolio.from_signals(
price,
entries,
exits,
fees=0.001, # 交易费用
freq='1D'
)
# 5. 分析结果
print(pf.stats())
pf.plot().show()
七、进阶工具推荐
机器学习集成
lightgbm / xgboost - 梯度提升树
scikit-learn - 传统机器学习
tensorflow / pytorch - 深度学习
优化工具
optuna - 超参数优化
hyperopt - 分布式超参数优化
风险分析
pyfolio - 组合绩效分析
arch - 波动率建模
八、注意事项
数据质量:确保数据清洗和复权处理
过拟合:使用交叉验证、避免未来函数
交易成本:考虑佣金、滑点、冲击成本
样本外测试:严格区分训练集和测试集
上一篇
下一篇
AI与量化投资
Backtrader使用简介
量化行情与因子数据存储数据库选型
量化投资十八问
quantstats 简介及使用例子
QLib核心概念和术语