Skip to content

NNBotForAI/quant-trading-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

量化回测系统

基于 AKShare + 聚宽因子 的本地量化回测系统

功能特点

  • 数据层: 使用 AKShare 获取 A 股实时/历史行情、财务数据
  • 因子层: 落地实现聚宽因子库 200+ 因子计算
  • 策略层: 支持均值回归、多因子排序、动量等多种策略
  • 回测层: 完整的回测引擎,支持绩效分析
  • 可视化: 自动生成回测报告和因子分析图表

项目结构

quant_system/
├── data/
│   ├── __init__.py
│   └── data_fetcher.py      # AKShare 数据获取与缓存
├── factors/
│   ├── __init__.py
│   └── jq_factors.py        # 聚宽因子计算实现
├── backtest/
│   ├── __init__.py
│   └── backtest_engine.py   # 回测引擎
├── utils/
│   ├── __init__.py
│   └── visualization.py     # 可视化工具
├── main.py                  # 基础主程序
├── run.py                   # 增强版主程序(推荐)
├── strategies.py            # 策略模板与示例
├── config.py                # 配置文件
├── requirements.txt         # Python依赖
└── README.md               # 说明文档

快速开始

1. 安装依赖

cd quant_system
pip install -r requirements.txt

2. 运行回测

PSY心理线均值回归策略:

python run.py --mode full --strategy psy --symbols 000001,000002,600519

多因子综合策略:

python run.py --mode full --strategy multi --symbols 000001,000002,000333,600519,601318

动量策略:

python run.py --mode full --strategy momentum

因子分析(仅分析因子表现,不回测):

python run.py --mode analyze --symbols 000001,000002

3. 查看结果

运行后会生成:

  • report_{strategy}.png - 回测报告图表
  • returns_{strategy}.csv - 每日收益数据
  • cache/ - 数据缓存目录

已实现因子

情绪类因子

因子代码 名称 计算公式
PSY12 心理线指标 12日内上涨天数/12 × 100
VR26 成交量比率 (AVS+0.5CVS)/(BVS+0.5CVS)
AR26 人气指标 Σ(最高-开盘)/Σ(开盘-最低) × 100
BR26 意愿指标 Σ(最高-昨收)/Σ(昨收-最低) × 100
WVAD6 威廉变异离散量 Σ[(收盘-开盘)/(最高-最低)×成交量]
VROC12 量变动速率 (当日成交量-12日前成交量)/12日前成交量 × 100

风险类因子

因子代码 名称 说明
Variance20 20日收益方差 年化收益方差
Skewness20 20日收益偏度 收益率分布偏度
Kurtosis20 20日收益峰度 收益率分布峰度
Sharpe20 20日夏普比率 (年化收益-无风险利率)/年化波动率

动量类因子

因子代码 名称 计算公式
BIAS5/20 乖离率 (收盘价-N日均价)/N日均价 × 100
ROC12 变动速率 (当日收盘价-N日前收盘价)/N日前收盘价 × 100
CCI14 顺势指标 (TYP-MA)/(0.015×AVEDEV)

技术类因子

因子代码 名称 说明
MA5/20 移动均线 N日收盘价的简单平均
EMA12/26 指数移动平均 指数加权移动平均
ATR14 平均真实振幅 14日真实波幅的移动平均
MACD 平滑异同移动平均 EMA12-EMA26及其信号线
Bollinger 布林带 中轨±2倍标准差

策略开发指南

使用现有策略

from backtest.backtest_engine import BacktestConfig
from strategies import PSYMeanReversionStrategy

# 配置
config = BacktestConfig(
    start_date='20230101',
    end_date='20241231',
    initial_capital=1000000,
    commission_rate=0.0003,
    slippage=0.001,
    max_positions=5,
    rebalance_freq='W'  # 每周调仓
)

# 创建策略
strategy = PSYMeanReversionStrategy(
    config, 
    buy_threshold=25,   # PSY低于25买入
    sell_threshold=75   # PSY高于75卖出
)

# 运行回测
result = strategy.run(factor_data, price_data)

自定义策略

from strategies import BaseStrategy

class MyStrategy(BaseStrategy):
    def run(self, factor_data, price_data):
        self.engine.reset()
        dates = sorted(factor_data['date'].unique())
        
        for date in dates:
            self.engine.current_date = pd.to_datetime(date)
            
            # 获取当日因子数据
            day_data = factor_data[factor_data['date'] == date]
            
            # 自定义选股逻辑...
            selected_stocks = self.my_stock_selector(day_data)
            
            # 执行交易
            # ...
            
            # 更新组合市值
            self.engine.update_portfolio(market_data)
        
        return {
            'returns': self.engine.get_returns(),
            'metrics': self.engine.get_performance_metrics(),
            'trades': self.engine.trades
        }

聚宽因子公式来源

所有因子计算公式参考自聚宽官方文档: https://www.joinquant.com/help/api/help?name=factor_values

文档中包含了 200+ 个因子的详细计算说明,包括:

  • 质量因子(ROE、毛利率、周转率等)
  • 基础因子(营收TTM、净利润TTM等)
  • 成长因子(营收增长率、净利润增长率等)
  • 情绪因子(VR、PSY、AR、BR等)
  • 风险因子(夏普比率、方差、偏度等)
  • 技术因子(MACD、布林带、均线等)
  • 动量因子(乖离率、ROC、CCI等)

注意事项

  1. 数据缓存: 首次运行会下载数据并缓存到 cache/ 目录,后续从缓存读取,加快运行速度
  2. 回测限制: AKShare 数据有延迟,不适合高频交易回测
  3. 实盘风险: 回测结果仅供参考,实盘需考虑更多市场因素
  4. 财务因子: 当前版本主要实现了量价因子,财务因子需要接入财务报表数据

扩展开发

添加新因子

factors/jq_factors.py 中添加:

def my_factor(self, param: int = 10) -> FactorResult:
    """
    我的自定义因子
    计算公式: ...
    """
    values = self.price['close'].rolling(window=param).mean()
    return FactorResult(f"MyFactor{param}", values, self.price['date'])

添加新策略

strategies.py 中继承 BaseStrategy

class MyStrategy(BaseStrategy):
    def run(self, factor_data, price_data):
        # 实现策略逻辑
        pass

依赖库

  • akshare >= 1.14.0 (财经数据接口)
  • pandas >= 2.0.0 (数据处理)
  • numpy >= 1.24.0 (数值计算)
  • matplotlib >= 3.7.0 (可视化)
  • seaborn >= 0.12.0 (统计图表)

License

MIT

About

Multi-factor quantitative trading strategy with VROC12, AR26, BIAS20, BR26

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors