小白自己写,量化回测系统stock-quant
前言:一个程序员,半个月写了个量化回测系统,实现数据准备-策略实现-交易分析,代码已经开源,欢迎共建https://github.com/zhaoxusun/stock-quant,纯技术交流,不作为任何投资建议



#股票量化交易回测系统技术解析
## 1. 项目概述
这是一个基于Python和backtrader框架开发的股票量化交易回测系统,支持A股、H股和美股市场的历史数据回测与策略分析。该系统旨在为量化交易研究者和投资者提供一个灵活、高效的策略测试平台,能够快速验证交易思路的有效性并评估其风险收益特征。
系统核心功能包括:
- 多市场历史数据加载与管理
- 基于成交量的增强策略实现
- 完整的回测流程与收益分析
- 丰富的可视化图表展示
- 友好的Web前端操作界面
## 2. 项目架构设计
系统采用模块化架构设计,将数据处理、策略实现、回测执行和结果展示等功能清晰分离,便于维护和扩展。整体架构如下:
### 2.1 目录结构
```
stock-quant/
├── common/ # 通用工具模块
│ ├── logger.py # 日志管理
│ └── util_csv.py # CSV文件处理
├── core/ # 核心功能模块
│ ├── quant/ # 量化交易核心逻辑
│ ├── strategy/ # 交易策略实现
│ └── visualization/ # 可视化工具
├── frontend/ # Web前端界面
├── settings.py # 全局配置
└── requirements-13.txt # 项目依赖
```
### 2.2 核心模块职责
- **common模块**:提供日志记录、CSV文件读写等基础工具函数,为其他模块提供通用服务。
- **core/quant模块**:实现回测引擎的核心逻辑,包括策略初始化、数据加载、回测执行和结果分析。
- **core/strategy模块**:包含交易策略的实现,采用策略模式设计,支持策略的自动发现和管理。
- **core/visualization模块**:负责将回测结果转换为直观的可视化图表,支持多维度数据展示。
- **frontend模块**:基于Flask框架构建的Web界面,提供用户交互和结果展示功能。
- **settings模块**:集中管理项目配置,包括路径设置、交易参数、佣金设置等。
## 3. 核心功能实现
### 3.1 策略管理系统
策略管理系统采用了自动发现机制,能够动态加载所有继承自`StrategyBase`的策略类,大大提高了系统的扩展性。策略管理器的实现如下:
```python
class StrategyManager:
def __init__(self):
self.strategy_list = []
self.strategy_map = {}
self._auto_discover_strategies()
def _auto_discover_strategies(self):
# 自动发现并注册所有策略类
strategy_dir = os.path.join(os.path.dirname(__file__), 'trading')
# 遍历所有模块查找策略类
# ...
# 创建全局策略管理器实例
global_strategy_manager = StrategyManager()
```
<mcfile name="strategy_manager.py" path="/Users/romanzhao/PycharmProjects/stock-quant/core/strategy/strategy_manager.py"></mcfile>
这种设计使得添加新策略变得非常简单,只需创建新的策略类并继承`StrategyBase`,系统会自动识别并加载。
### 3.2 回测执行引擎
回测执行引擎是系统的核心,负责初始化回测环境、加载数据、运行策略并收集结果。以成交量增强策略为例,回测流程如下:
```python
def run_backtest_enhanced_volume_strategy(file_path, strategy_class, init_cash):
# 初始化Cerebro引擎
cerebro = bt.Cerebro()
cerebro.broker.setcash(init_cash)
# 添加数据
data = get_data_form_csv(file_path)
cerebro.adddata(data)
# 添加策略
cerebro.addstrategy(strategy_class)
# 添加分析器(计算收益率、回撤等)
cerebro.addanalyzer(bt.analyzers.TimeReturn, _name='time_return')
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='draw_down')
cerebro.addanalyzer(bt.analyzers.TradeAnalyzer, _name='trade_analyzer')
# 执行回测
results = cerebro.run()
# 处理回测结果
# ...
```
<mcfile name="quant_manage.py" path="/Users/romanzhao/PycharmProjects/stock-quant/core/quant/quant_manage.py"></mcfile>
回测引擎通过backtrader的分析器机制,自动计算总收益率、最大回撤、夏普率等关键指标,为策略评估提供全面的数据支持。
### 3.3 成交量增强策略
系统实现了基于成交量的增强交易策略,该策略通过分析成交量变化和价格走势,生成买卖信号。策略核心逻辑如下:
```python
class EnhancedVolumeStrategy(StrategyBase):
def __init__(self):
super().__init__()
# 初始化指标
# ...
def next(self):
# 计算增强买入/卖出信号
self.trading_strategy_buy()
self.trading_strategy_sell()
def trading_strategy_buy(self):
# 买入逻辑实现
# 计算可购买股数、可用资金
# 执行买入挂单
# ...
def trading_strategy_sell(self):
# 卖出逻辑实现
# ...
```
<mcfile name="enhanced_volume.py" path="/Users/romanzhao/PycharmProjects/stock-quant/core/strategy/trading/volume/enhanced_volume.py"></mcfile>
策略基类`StrategyBase`提供了交易记录管理、订单处理、佣金计算等通用功能,确保所有策略都能获得一致的交易环境和结果统计。
### 3.4 数据加载与管理
系统支持从CSV文件加载股票历史数据,并提供了统一的数据处理接口:
```python
def load_stock_data(csv_path):
"""
加载股票数据并设置日期索引
"""
df = pd.read_csv(
csv_path,
parse_dates=['date'], # 解析date列为datetime类型
index_col='date' # 将date列设为索引,方便按日期查询
)
return df
```
<mcfile name="util_csv.py" path="/Users/romanzhao/PycharmProjects/stock-quant/common/util_csv.py"></mcfile>
系统支持多种数据源,包括akshare、baostock和futu等,用户可以根据需要选择不同的数据源进行回测。
### 3.5 可视化展示系统
系统使用Plotly库实现了丰富的可视化功能,能够生成K线图、资产曲线、成交量柱状图等多种图表:
```python
def calculate_holdings(df_continuous, valid_trades, initial_capital):
"""
计算持仓量变化、总资产、持仓成本变化
"""
holdings_data = pd.DataFrame(index=df_continuous.index)
holdings_data['holdings'] = 0 # 持仓量
holdings_data['adjusted_cost'] = 0.0 # 持仓成本
# ...计算总资产和持仓变化
```
<mcfile name="visual_tools_plotly.py" path="/Users/romanzhao/PycharmProjects/stock-quant/core/visualization/visual_tools_plotly.py"></mcfile>
可视化系统能够将复杂的回测结果直观地呈现给用户,帮助用户更好地理解策略表现和风险特征。
### 3.6 Web前端界面
系统基于Flask框架构建了用户友好的Web界面,支持数据源选择、股票筛选、策略配置和回测执行等功能:
```python
@app.route('/run_backtest', methods=['POST'])
def run_backtest():
"""运行回测"""
try:
data = request.json
source = data.get('source')
stock_file = data.get('stock_file')
is_batch = data.get('is_batch', False)
init_cash = float(data.get('init_cash', 5000000))
strategy_name = data.get('strategy')
# 验证策略名称
strategy_class = global_strategy_manager.get_strategy(strategy_name)
if is_batch:
# 批量回测
folder_path = stock_data_root / source
run_backtest_enhanced_volume_strategy_multi(str(folder_path), strategy_class, init_cash)
else:
# 单个股票回测
file_path = stock_data_root / source / stock_file
run_backtest_enhanced_volume_strategy(str(file_path), strategy_class, init_cash)
# ...
```
<mcfile name="frontend_app.py" path="/Users/romanzhao/PycharmProjects/stock-quant/frontend/frontend_app.py"></mcfile>
前端界面不仅提供了便捷的操作方式,还能直接展示回测结果和可视化图表,大大提升了用户体验。
## 4. 技术栈与依赖
| 技术/依赖 | 用途 | 版本要求 |
|---------|------|---------|
| Python | 开发语言 | 3.13/3.7 |
| backtrader | 量化回测框架 | - |
| pandas | 数据处理 | - |
| matplotlib | 数据可视化基础 | - |
| plotly | 交互式可视化 | - |
| Flask | Web框架 | - |
| futu-api | 富途证券API | - |
| akshare | 金融数据接口 | - |
<mcfile name="requirements-13.txt" path="/Users/romanzhao/PycharmProjects/stock-quant/requirements-13.txt"></mcfile>
## 5. 配置与部署
### 5.1 环境配置
系统提供了完整的环境配置指南,用户只需按照以下步骤操作:
1. 安装Python 3.13
2. 创建虚拟环境:`python -m venv venv`
3. 激活虚拟环境:`source venv/bin/activate`
4. 安装依赖:`pip install -r requirements-13.txt`
### 5.2 数据准备
用户需要准备符合格式要求的CSV文件作为历史数据:
- A股数据存放路径:`./data/akshare`
- H股数据存放路径:`./data/futu`
- 美股数据存放路径:`./data/akshare`
CSV文件命名格式为`股票代码_股票名称_数据来源.csv`。
### 5.3 策略参数配置
系统在`settings.py`中集中管理所有配置参数,包括:
- 项目路径设置
- 交易参数(最小订单量、最大持仓比例等)
- 佣金、印花税、滑点等交易成本参数
- 初始交易本金设置
用户可以根据需要调整这些参数,以适应不同的回测场景。
## 6. 使用指南
### 6.1 前端界面使用
1. 启动Web服务:`python frontend/frontend_app.py`
2. 打开浏览器访问:`http://localhost:5000`
3. 选择数据源、股票和策略
4. 设置初始资金
5. 点击"运行回测"按钮
6. 查看回测结果和可视化图表
### 6.2 直接代码执行
用户也可以直接通过Python代码执行回测:
```python
from core.quant.quant_manage import run_backtest_enhanced_volume_strategy
from core.strategy.trading.volume.enhanced_volume import EnhancedVolumeStrategy
# 执行单个股票回测
file_path = "path/to/stock_data.csv"
run_backtest_enhanced_volume_strategy(file_path, EnhancedVolumeStrategy, 5000000)
# 执行批量回测
folder_path = "path/to/stock_folder"
run_backtest_enhanced_volume_strategy_multi(folder_path, EnhancedVolumeStrategy, 5000000)
```
## 7. 回测结果分析
### 7.1 收益指标
系统计算并展示多种收益指标,包括:
- 总收益率:策略整体盈利水平
- 年化收益率:将总收益年化,便于比较不同周期的策略表现
- 最大回撤:策略在回测期间的最大亏损幅度,衡量风险水平
- 夏普率:风险调整后的收益指标,综合考虑收益和风险
- 胜率:盈利交易占总交易的比例
### 7.2 可视化图表
回测结果通过多种图表直观展示:
- K线图:展示股票价格走势和交易信号
- 资产曲线:展示策略净值变化
- 成交量图:展示成交量变化和策略信号关系
- 回撤曲线:展示策略在不同时期的回撤情况
### 7.3 交易记录
系统详细记录每一笔交易的信息,包括:
- 交易日期和时间
- 交易价格和数量
- 交易方向(买入/卖出)
- 交易成本(佣金、印花税等)
- 交易盈亏情况
这些交易记录为策略优化提供了重要的参考依据。
## 8. 系统扩展性
系统设计充分考虑了扩展性,主要体现在以下几个方面:
### 8.1 策略扩展
用户可以通过继承`StrategyBase`类轻松创建新的交易策略,系统会自动发现并加载这些策略。新策略只需实现核心的买卖逻辑,其他通用功能由基类提供。
### 8.2 数据源扩展
系统支持多种数据源,用户可以根据需要添加新的数据源适配器,只需实现统一的数据接口即可。
### 8.3 分析器扩展
backtrader框架支持自定义分析器,用户可以根据需要开发新的分析指标,进一步丰富系统的分析能力。
## 9. 风险提示与免责声明
量化交易是一种高风险的投资方式,过往业绩不代表未来表现。本系统仅用于策略研究和回测,不构成任何投资建议。用户在实际投资中应充分考虑市场风险、流动性风险等因素,谨慎决策。
## 10. 总结与展望
本系统是一个功能完整、架构清晰的股票量化交易回测平台,为量化交易研究者和投资者提供了强大的工具支持。未来,系统可以在以下方面进一步完善:
1. 添加更多类型的交易策略
2. 支持实盘交易接口
3. 优化大数据量下的回测性能
4. 增强机器学习模型在策略中的应用
5. 提供更多的风险评估指标和分析工具
通过持续的优化和扩展,系统将为用户提供更加全面、高效的量化交易解决方案。
