OxQuant is a cutting-edge AI-powered quantitative trading platform that combines traditional quantitative finance with modern machine learning techniques. The platform enables systematic trading strategy development, backtesting, risk management, and live trading across multiple asset classes.
- AI-Driven Strategy Development: Leverage LLMs for strategy ideation and code generation
- Multi-Asset Support: Equities, Futures, Options, Crypto, Forex
- High-Performance Backtesting: Comprehensive backtesting engine with Walk Forward Analysis
- Risk Management Suite: Advanced portfolio optimization, position limits, and drawdown control
- RESTful API: Complete CRUD APIs for strategies, portfolios, and backtesting
- Live Trading Integration: Connect to major brokers and exchanges
- Research Environment: Jupyter notebooks with pre-built templates
- Collaboration Tools: Team workflow management and version control
- Order status tracking (PENDING, FILLED, PARTIALLY_FILLED, CANCELLED, REJECTED)
- Automatic unique order ID generation
- Real-time remaining quantity calculation
- Asset class categorization
- Direction tracking (LONG/SHORT/FLAT)
- Unrealized P&L calculation with percentage metrics
- Initial capital tracking
- Total return calculation
- Risk exposure metrics
- Multi-position management
- Position size limits
- Portfolio concentration limits
- Maximum drawdown protection
- Daily loss limits
- Signal type management (LONG/SHORT/FLAT/EXIT)
- Strategy context management
- Signal filtering mechanism
- Performance metrics calculation
┌─────────────────────────────────────────────────────────────┐
│ OxQuant Platform │
├─────────────────────────────────────────────────────────────┤
│ Frontend Layer │ API Gateway │
│ • Web Dashboard │ • REST/WebSocket APIs │
│ • Strategy Studio │ • Authentication │
│ • Research Notebooks │ • Rate Limiting │
├─────────────────────────────────────────────────────────────┤
│ Core Engine Layer │ Data Layer │
│ • Strategy Engine │ • Market Data Pipeline │
│ • Backtesting Engine │ • Feature Store │
│ • Risk Engine │ • Model Registry │
│ • Execution Engine │ • Results Database │
├─────────────────────────────────────────────────────────────┤
│ AI/ML Layer │ Infrastructure Layer │
│ • LLM Integration │ • Container Orchestration │
│ • Feature Engineering │ • Monitoring & Alerting │
│ • Model Training │ • CI/CD Pipeline │
│ • Model Serving │ • Security & Compliance │
└─────────────────────────────────────────────────────────────┘
- Python 3.11+
- (可选) Docker & Docker Compose
- Git
# 克隆项目
git clone https://github.com/candy-frankie/OxQuant.git
cd OxQuant
# 安装依赖
./start.sh --install
# 本地启动API服务
./start.sh --localWindows用户:
start.bat --install
start.bat --local| 方式 | 命令 | 说明 |
|---|---|---|
| 本地启动 | ./start.sh --local |
最简单,直接运行(推荐) |
| Docker简化版 | ./start.sh --docker |
轻量容器,SQLite数据库 |
| Docker完整版 | ./start.sh --docker-full |
完整服务,PostgreSQL+Redis |
| Jupyter | ./start.sh --jupyter |
启动研究环境 |
| 运行测试 | ./start.sh --test |
执行测试用例 |
# 安装依赖
pip install -r requirements.slim.txt
# 设置环境变量
export ENVIRONMENT=development
export DATABASE_URL=sqlite:///./data/oxquant.db
# 启动API服务
uvicorn src.api.main:app --host 0.0.0.0 --port 8000- API Documentation: http://localhost:8000/docs
- Jupyter Notebooks: http://localhost:8888 (password: oxquant)
- PostgreSQL (完整版): localhost:5432
- Redis (完整版): localhost:6379
oxquant/
├── docs/ # Documentation
├── src/ # Source code
│ ├── api/ # FastAPI backend
│ │ ├── routers/ # API endpoints
│ │ │ ├── auth.py # Authentication routes
│ │ │ ├── backtesting.py # Backtesting routes
│ │ │ ├── portfolio.py # Portfolio management
│ │ │ ├── data.py # Market data routes
│ │ │ └── strategies.py # Strategy management
│ │ ├── schemas/ # Pydantic models
│ │ ├── utils/ # Utility functions
│ │ └── main.py # Application entry
│ ├── core/ # Core trading engine
│ │ ├── engine.py # Order/Position/Portfolio/Strategy classes
│ │ ├── backtesting.py # Backtest engine and Walk Forward analyzer
│ │ ├── config.py # Configuration management
│ │ ├── database.py # Database connections
│ │ └── models.py # SQLAlchemy models
│ ├── strategies/ # Trading strategies
│ │ └── examples.py # Strategy implementations
│ └── data/ # Data pipelines
├── notebooks/ # Research notebooks
├── tests/ # Test suite
├── deployment/ # Docker, Kubernetes configs
└── tools/ # Development utilities
- Backend: Python 3.11+, FastAPI, PostgreSQL, Redis
- Frontend: React 18, TypeScript, Tailwind CSS
- Data: Dask, Polars, TimescaleDB
- ML: PyTorch, Scikit-learn, XGBoost, LangChain
- Infra: Docker, Kubernetes, Terraform, Prometheus
- Brokers: Interactive Brokers, Alpaca, Binance, etc.
| Strategy | Description | Parameters |
|---|---|---|
ma_crossover |
Moving Average Crossover | short_window, long_window |
mean_reversion |
Bollinger Bands Mean Reversion | window, num_std |
macd |
MACD Crossover | fast_period, slow_period, signal_period |
rsi |
RSI Overbought/Oversold | window, oversold, overbought |
atr_exit |
ATR Trailing Stop | atr_window, atr_multiplier |
from src.strategies.examples import (
MovingAverageCrossover,
MeanReversion,
MACDStrategy,
RSIStrategy,
ATRExitStrategy,
create_strategy
)
import pandas as pd
import numpy as np
# Generate sample data
np.random.seed(42)
dates = pd.date_range('2023-01-01', '2023-12-31', freq='D')
prices = 100 + np.cumsum(np.random.randn(len(dates)) * 0.5)
data = pd.DataFrame({'close': prices}, index=dates)
# Test all strategies
strategies = [
MovingAverageCrossover(10, 30),
MeanReversion(20, 2.0),
MACDStrategy(12, 26, 9),
RSIStrategy(14, 30, 70),
ATRExitStrategy(14, 1.5)
]
for strategy in strategies:
result = strategy.generate_signals(data)
print(f"\n{strategy.name}:")
print(f" Total Return: {result.metrics['total_return']:.2%}")
print(f" Sharpe Ratio: {result.metrics['sharpe_ratio']:.2f}")
print(f" Max Drawdown: {result.metrics['max_drawdown']:.2%}")
print(f" Win Rate: {result.metrics['win_rate']:.1%}")
print(f" Total Trades: {result.metrics['total_trades']}")POST /api/v1/auth/register- Register new userPOST /api/v1/auth/token- Get access tokenPOST /api/v1/auth/refresh- Refresh tokenGET /api/v1/auth/me- Get current user
GET /api/v1/strategies- List strategiesPOST /api/v1/strategies- Create strategyGET /api/v1/strategies/{id}- Get strategyPUT /api/v1/strategies/{id}- Update strategyDELETE /api/v1/strategies/{id}- Delete strategy
POST /api/v1/backtesting/run- Run backtestGET /api/v1/backtesting/results- List resultsPOST /api/v1/backtesting/optimize- Optimize parametersPOST /api/v1/backtesting/walkforward- Walk Forward Analysis
GET /api/v1/portfolio- List portfoliosPOST /api/v1/portfolio- Create portfolioGET /api/v1/portfolio/{id}- Get portfolioGET /api/v1/portfolio/{id}/positions- Get positionsGET /api/v1/portfolio/{id}/trades- Get trades
GET /api/v1/data/symbols- Get available symbolsGET /api/v1/data/prices/{symbol}- Get price historyGET /api/v1/data/prices/{symbol}/latest- Get latest priceGET /api/v1/data/market/indices- Get market indicesGET /api/v1/data/market/news- Get market news
pytest tests/black src/
isort src/
flake8 src/# Initialize database
python -c "from src.core.database import init_db; import asyncio; asyncio.run(init_db())"Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- Issues: GitHub Issues
- Email: 644743502@qq.com
- Phase 1: Core architecture and basic backtesting
- Phase 1.5: API development and strategy library expansion
- Phase 2: AI integration and strategy generation
- Phase 3: Multi-broker execution and risk management
- Phase 4: Enterprise features and scaling
The backtesting engine calculates the following metrics:
| Metric | Description |
|---|---|
total_return |
Total portfolio return |
annual_return |
Annualized return |
cagr |
Compound annual growth rate |
volatility |
Annualized volatility |
sharpe_ratio |
Risk-adjusted return (with risk-free rate) |
sortino_ratio |
Downside risk-adjusted return |
calmar_ratio |
Return-to-max-drawdown ratio |
max_drawdown |
Maximum peak-to-trough decline |
win_rate |
Percentage of profitable trades |
profit_factor |
Gross profits / gross losses |
expectancy |
Expected value per trade |
risk_reward_ratio |
Average win / average loss |
avg_trade_duration_days |
Average trade holding period |
OxQuant提供完整的A股交易链路,从数据获取到实盘交易:
数据获取 → 因子挖掘 → 多因子模型 → 策略开发 → 回测分析 → 模拟交易 → 实盘交易 → 风控监控
│ │ │ │ │ │ │ │
AKShare QLib思路 IC加权 策略基类 A股专用 实时模拟 同花顺/QMT VaR/CVaR
Tushare 12+因子 回归方法 信号生成 交易规则 历史回放 券商接口 风险告警
支持AKShare和Tushare两种数据源:
from src.data.data_providers import data_manager, DataProviderType
# 获取股票价格数据
data = data_manager.get_price_data(
symbol="000001",
start_date="20230101",
end_date="20231231",
provider=DataProviderType.AKSHARE
)
# 获取指数成分股
universe = data_manager.get_universe("000300") # 沪深300from src.factors.factor_engine import factor_engine, FactorAnalyzer
# 计算所有因子
factors = factor_engine.compute_all_factors(data)
# 因子分析
analyzer = FactorAnalyzer()
ic = analyzer.calculate_ic(factors['momentum_20'], data['close'].pct_change().shift(-1))
ir = analyzer.calculate_ic_ir(factors['momentum_20'], data['close'].pct_change().shift(-1))
print(f"IC: {ic:.4f}, IR: {ir:.4f}")支持的因子类型:
| 因子名称 | 类型 | 描述 |
|---|---|---|
| momentum_20/60/120 | 动量 | 多周期动量因子 |
| rsi_14 | 动量 | 相对强弱指数 |
| macd | 动量 | MACD指标 |
| pe/pb/ps | 估值 | 市盈率/市净率/市销率 |
| volatility_20/60 | 波动率 | 多周期波动率 |
| volume_20/turnover_20 | 流动性 | 均量和换手率 |
| beta/alpha | 风险 | 风险因子 |
from src.factors.multi_factor_model import (
MultiFactorModel, FactorCombinationMethod, SignalGenerator
)
# 创建多因子模型
model = MultiFactorModel(
factors=factors_df,
returns=returns_series,
method=FactorCombinationMethod.IC_WEIGHTED
)
model.fit()
# 生成交易信号
generator = SignalGenerator(model)
signals = generator.generate_signals(factors_df, top_n=10)from src.core.a_stock_backtester import AStockBacktestEngine
backtester = AStockBacktestEngine(
initial_capital=1000000,
commission=0.0003,
slippage=0.0001,
stamp_tax=0.001
)
result = backtester.run(
symbols=universe[:20],
start_date="20230101",
end_date="20231231",
strategy_type="multi_factor"
)
print(result.metrics)from src.trading.simulation import SimulationEngine, SimulationMode
engine = SimulationEngine(
initial_capital=100000,
mode=SimulationMode.REALTIME_SIM
)
engine.set_strategy(MyStrategy())
engine.start()from src.trading.live_trading import LiveTradingEngine, BrokerType
engine = LiveTradingEngine(broker_type=BrokerType.EASYTRADER)
engine.connect(user="your_user", password="your_password")
engine.set_strategy(MyStrategy())
engine.start()from src.risk.risk_management import RiskManager
risk_manager = RiskManager(
max_position_size_pct=0.1,
max_drawdown_pct=0.1,
max_daily_loss_pct=0.05
)
result = risk_manager.check_all(
order_value=150000,
portfolio_value=1000000
)- 最小交易单位: 100股(1手)
- 涨跌幅限制: ±10%(ST股±5%)
- T+1交易: 当日买入,次日卖出
- 印花税: 卖出时收取0.1%
- 佣金: 双向收取,约0.03%-0.05%
- 最低佣金: 5元/笔
- 上午: 09:30 - 11:30
- 下午: 13:00 - 15:00
- 集合竞价: 09:15 - 09:25