从 research_results 抽出纯回测核心能力,形成独立成员仓。 ## 模块(10 个核心) | 模块 | 内容 | |---|---| | alpha_factors | 158 alpha 公式 + 24 基础算子(移植自 qlib alpha158)+ JSONB 工具 | | execution | 执行仿真(成本/滑点/T+1/涨跌停/部分成交/价差)+ 多日 NAV + PnL 拆解 | | indicators | 50+ 技术指标(MACD/KDJ/布林/ATR/ADX/等) | | data_adapter | 桥接 qtdb_pro 长表与新模块(rename/long-wide/复权/vwap 代理) | | backtest | weight-based 多日仿真 | | metrics / perf_stats | 绩效指标 | | factor_library | 通用方法(turnover/IC/winsorize/OLS) | | portfolio_decomp / risk | 组合分解 + 风险指标 | | logging | 统一 logger(标准库 + 可选 loguru) | ## 设计原则 - 零重型依赖(numpy/pandas/scipy) - mypy strict 0 errors(12 source files) - 394 tests passed(从 research_results 复制 + 适配) - ruff clean ## 与 research_results 的关系 - research_results 通过 re-export wrapper 保持向后兼容(src.shared.X → quant_engine.X) - 47 proj 的 import 路径暂时不变,后续逐步迁移 - 本仓角色:researchhub_workspace 引擎层 Co-Authored-By: Mavis <noreply@mavis.local>
67 lines
1.7 KiB
TOML
67 lines
1.7 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=68", "wheel"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "quant_engine"
|
|
version = "0.1.0"
|
|
description = "量化研究引擎 —— alpha 因子库 + 执行仿真 + 技术指标 + 数据适配 + 回测工具(v1.2.0 从 research_results 抽出)"
|
|
readme = "README.md"
|
|
requires-python = ">=3.11"
|
|
license = { text = "MIT" }
|
|
authors = [
|
|
{ name = "researchhub team" },
|
|
]
|
|
keywords = ["quant", "alpha", "backtest", "qlib-style", "execution", "indicators"]
|
|
|
|
# 仅必要依赖(零重型依赖原则)
|
|
dependencies = [
|
|
"numpy>=1.24",
|
|
"pandas>=2.0",
|
|
"scipy>=1.10",
|
|
"loguru>=0.7", # logging.py 可选 loguru fallback(标准库 logging 是默认)
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8.0",
|
|
"pytest-asyncio>=0.23",
|
|
"pytest-cov>=4.1",
|
|
"ruff>=0.4",
|
|
"mypy>=1.10",
|
|
]
|
|
|
|
[project.urls]
|
|
Homepage = "https://github.com/your-org/quant_engine"
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["src"]
|
|
|
|
[tool.ruff]
|
|
line-length = 100
|
|
target-version = "py311"
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "W", "I", "N", "UP", "B", "A", "C4", "PT", "RUF"]
|
|
ignore = [
|
|
"E501", # line too long
|
|
"B008", # function call in default argument
|
|
"RUF001", "RUF002", "RUF003", # ambiguous unicode
|
|
# 遗留 88 errors 待 v0.2.x 清理(与 research_results 对齐)
|
|
"F401", "I001", "N806", "N803", "N999",
|
|
"UP035", "RUF022", "B905", "B007", "B023", "F841", "A005",
|
|
"PT006", # legacy parametrize list 风格
|
|
]
|
|
|
|
[tool.mypy]
|
|
python_version = "3.11"
|
|
strict = true
|
|
ignore_missing_imports = true
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
addopts = "-v --tb=short"
|
|
markers = [
|
|
"integration: 需要真实数据库或网络",
|
|
]
|