Metadata-Version: 2.4
Name: fwquant
Version: 1.0.132
Summary: 一个功能完整的福纹量化交易系统，支持多交易所连接、策略回测与实盘交易
Home-page: https://github.com/fwquant/fwquant
Author: FWQuant Team
Author-email: fwquant <fuwenquant@gmail.com>
Maintainer-email: fwquant <fuwenquant@gmail.com>
Project-URL: Homepage, https://www.yaluo.com
Project-URL: Repository, https://github.com/fwquant/fwquant
Project-URL: Documentation, https://github.com/fwquant/fwquant/wiki
Keywords: 量化交易,fwquant,crypto,bot,trading
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Office/Business :: Financial :: Investment
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: aiosqlite
Requires-Dist: passlib
Requires-Dist: idna
Requires-Dist: torch
Requires-Dist: lightgbm
Requires-Dist: tzlocal
Requires-Dist: urllib3
Requires-Dist: idna
Requires-Dist: certifi
Requires-Dist: colorama
Requires-Dist: polymarket-client
Requires-Dist: nicegui
Requires-Dist: apscheduler
Requires-Dist: streamlit
Requires-Dist: pybind11
Requires-Dist: gradio
Requires-Dist: polars
Requires-Dist: hatchling
Requires-Dist: babel
Requires-Dist: pyzmq
Requires-Dist: twine
Requires-Dist: python-dotenv>=1.0.0
Requires-Dist: setuptools>=70.0
Requires-Dist: six>=1.16
Requires-Dist: typing_extensions>=4.12
Requires-Dist: sqlalchemy
Requires-Dist: win32_setctime; sys_platform == "win32"
Requires-Dist: pandas<3.0,>=2.0
Requires-Dist: numpy
Requires-Dist: numba>=0.60.0
Requires-Dist: pandas-stubs
Requires-Dist: TA-Lib
Requires-Dist: QuantStats>=0.0.77
Requires-Dist: backtrader>=1.9.78
Requires-Dist: futu-api
Requires-Dist: akshare>=1.18
Requires-Dist: tqsdk>=3.9
Requires-Dist: tushare
Requires-Dist: composio_crewai
Requires-Dist: ccxt>=4.0
Requires-Dist: loguru>=0.7.2
Requires-Dist: pyyaml>=6.0
Requires-Dist: requests>=2.31
Requires-Dist: tabulate>=0.9.0
Requires-Dist: tzlocal
Requires-Dist: pytz
Requires-Dist: tzdata
Requires-Dist: toml
Requires-Dist: aiohttp>=3.9
Requires-Dist: aiohappyeyeballs>=2.6
Requires-Dist: fastapi>=0.115
Requires-Dist: uvicorn>=0.22
Requires-Dist: python-multipart>=0.0.9
Requires-Dist: pydantic>=2.0
Requires-Dist: Flask>=3.0
Requires-Dist: flask_cors>=6.0
Requires-Dist: Werkzeug>=3.0
Requires-Dist: starlette==0.50.0
Requires-Dist: PySide6
Requires-Dist: pyqtgraph>=0.13
Requires-Dist: qdarkstyle>=3.1
Requires-Dist: qtpy>=2.4
Requires-Dist: matplotlib>=3.8
Requires-Dist: plotly>=6.5
Requires-Dist: seaborn>=0.13
Requires-Dist: deap
Requires-Dist: crewai
Requires-Dist: langchain>=0.1
Requires-Dist: langchain-openai>=0.1
Requires-Dist: litellm==1.83.7
Requires-Dist: celery>=5.3
Requires-Dist: celery-types
Requires-Dist: django-celery-beat
Requires-Dist: redis>=7.0
Requires-Dist: Django>=5.0
Requires-Dist: djangorestframework
Requires-Dist: django-timezone-field
Requires-Dist: django-crontab
Requires-Dist: pyobjc-core; sys_platform == "darwin"
Requires-Dist: pyobjc-framework-Cocoa; sys_platform == "darwin"
Requires-Dist: pyobjc-framework-Quartz; sys_platform == "darwin"
Requires-Dist: pyobjc-framework-Security; sys_platform == "darwin"
Requires-Dist: pywebview; sys_platform == "darwin"
Requires-Dist: black
Requires-Dist: flake8
Requires-Dist: isort
Requires-Dist: mypy
Requires-Dist: pytest
Requires-Dist: pytest-html
Requires-Dist: pytest-asyncio>=0.23
Requires-Dist: httpx>=0.27
Provides-Extra: core
Requires-Dist: python-dotenv>=1.0.0; extra == "core"
Requires-Dist: setuptools>=70.0; extra == "core"
Requires-Dist: six>=1.16; extra == "core"
Requires-Dist: typing_extensions>=4.12; extra == "core"
Requires-Dist: pandas; extra == "core"
Requires-Dist: numpy; extra == "core"
Requires-Dist: numba>=0.60.0; extra == "core"
Requires-Dist: pandas-stubs; extra == "core"
Requires-Dist: TA-Lib; extra == "core"
Requires-Dist: QuantStats>=0.0.77; extra == "core"
Requires-Dist: backtrader>=1.9.78; extra == "core"
Requires-Dist: futu-api; extra == "core"
Requires-Dist: akshare>=1.18; extra == "core"
Requires-Dist: tqsdk>=3.9; extra == "core"
Requires-Dist: tushare; extra == "core"
Requires-Dist: composio_crewai; extra == "core"
Requires-Dist: ccxt>=4.0; extra == "core"
Requires-Dist: loguru>=0.7.2; extra == "core"
Requires-Dist: pyyaml>=6.0; extra == "core"
Requires-Dist: requests>=2.31; extra == "core"
Requires-Dist: tabulate>=0.9.0; extra == "core"
Requires-Dist: tzlocal; extra == "core"
Requires-Dist: pytz; extra == "core"
Requires-Dist: tzdata; extra == "core"
Requires-Dist: aiohttp>=3.9; extra == "core"
Requires-Dist: aiohappyeyeballs>=2.6; extra == "core"
Provides-Extra: web
Requires-Dist: fwquant[core]; extra == "web"
Requires-Dist: fastapi>=0.115; extra == "web"
Requires-Dist: uvicorn>=0.25; extra == "web"
Requires-Dist: Flask>=3.0; extra == "web"
Requires-Dist: flask_cors>=6.0; extra == "web"
Requires-Dist: Werkzeug>=3.0; extra == "web"
Requires-Dist: starlette==0.50.0; extra == "web"
Provides-Extra: gui
Requires-Dist: fwquant[core]; extra == "gui"
Requires-Dist: PySide6; extra == "gui"
Requires-Dist: pyqtgraph>=0.13; extra == "gui"
Requires-Dist: qdarkstyle>=3.1; extra == "gui"
Requires-Dist: qtpy>=2.4; extra == "gui"
Requires-Dist: matplotlib>=3.8; extra == "gui"
Requires-Dist: plotly>=6.5; extra == "gui"
Requires-Dist: seaborn>=0.13; extra == "gui"
Provides-Extra: ai
Requires-Dist: fwquant[core]; extra == "ai"
Requires-Dist: deap; extra == "ai"
Requires-Dist: crewai; extra == "ai"
Requires-Dist: langchain>=0.1; extra == "ai"
Requires-Dist: langchain-openai>=0.1; extra == "ai"
Requires-Dist: litellm==1.83.7; extra == "ai"
Provides-Extra: task
Requires-Dist: fwquant[core]; extra == "task"
Requires-Dist: celery>=5.3; extra == "task"
Requires-Dist: celery-types; extra == "task"
Requires-Dist: django-celery-beat; extra == "task"
Requires-Dist: redis>=7.0; extra == "task"
Provides-Extra: django
Requires-Dist: fwquant[core]; extra == "django"
Requires-Dist: Django>=5.0; extra == "django"
Requires-Dist: djangorestframework; extra == "django"
Requires-Dist: django-timezone-field; extra == "django"
Requires-Dist: django-crontab; extra == "django"
Provides-Extra: macos
Requires-Dist: fwquant[core]; extra == "macos"
Requires-Dist: pyobjc-core; sys_platform == "darwin" and extra == "macos"
Requires-Dist: pyobjc-framework-Cocoa; sys_platform == "darwin" and extra == "macos"
Requires-Dist: pyobjc-framework-Quartz; sys_platform == "darwin" and extra == "macos"
Requires-Dist: pyobjc-framework-Security; sys_platform == "darwin" and extra == "macos"
Requires-Dist: pywebview; sys_platform == "darwin" and extra == "macos"
Provides-Extra: dev
Requires-Dist: fwquant[core]; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: flake8; extra == "dev"
Requires-Dist: isort; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-html; extra == "dev"
Provides-Extra: minimal
Requires-Dist: fwquant[ai,core,web]; extra == "minimal"
Dynamic: author
Dynamic: home-page
Dynamic: requires-python

# FWQuant · 福纹量化交易系统

一个从 0 到 1 完全自建的开源量化交易平台。

> **定位**：面向未来的企业级量化交易基础设施。底层交易网关兼容 **vn.py 4.0** 规范（CTA 模板、网关接口），在此之上构建了一套完整的 **Web 化量化交易系统** —— 涵盖网关接入、手动/自动交易、策略研发/回测、风控管理、AI 智能对话等全链路功能。

<div style="text-align: center;">
  <img src="https://github.com/fwquant/fwquant/raw/develop/fw_web/fuwen.jpg" alt="fuwen" width="600">
</div>

---

## 快速开始

### 脚本安装（一键全套：Python / UV / Node / FWQuant / OKX Skills / OpenClaw 等）

**Ubuntu**

```bash
curl -fsSL https://www.yaluo.com/install/fwquant/install/fw_install.sh | tr -d '\r'  | bash -s
```

**Windows**

```powershell
powershell -c "irm https://www.yaluo.com/install/fwquant/install/fw_install.ps1 | iex"
```

<details>
<summary>📦 独立包安装（仅 fwquant）</summary>

```bash
uv pip install fwquant -U
# 清华镜像
uv pip install fwquant -U -i https://pypi.tuna.tsinghua.edu.cn/simple/
```

**手动启动服务**

```bash
# Ubuntu
nohup fwquant web run &

# Windows
start /b fwquant web run >web.log 2>&1
```

</details>

安装完成后，浏览器访问 `http://127.0.0.1:15881` 即可进入 Web 控制台。

---

## ⚡ 系统功能全景

FWQuant 的 Web 控制台是一个功能完备的量化交易系统，**远不止 vn.py GUI 替代品**。它将交易、策略、风控、AI 全部搬到了浏览器中。

### 🔌 交易网关层（Gateway）

| 网关 | 说明 | 状态 |
|:---|:---|:---|
| **OKX** | 现货 / 合约 / 期权，REST + WebSocket 双通道 | ✅ 已完善 |
| **Binance** | 现货 / U本位合约 / 币本位 / 组合保证金 | ✅ 已完善 |
| **CTP** | 国内期货（上期所/大商所/郑商所/中金所/广期所） | ✅ 已完善 |
| **Polymarket** | 预测市场（polymarket-client SDK） | 🚧 开发中 |

---

### 💹 交易平台（Trading Desk）—— 三大交易入口

这是 FWQuant Web 的核心功能区，提供三种不同场景的下单方式：

#### 1. 交易平台（Trading Desk）
多面板专业交易台，类似 Bloomberg / vn.py 主界面的 Web 版本：
- 左侧：合约搜索 + 行情列表（实时 WebSocket 推送）
- 中央：K 线图表 + 盘口深度 + 下单面板（限价/市价/止盈止损）
- 右侧：当前持仓 + 委托订单 + 成交记录
- 底部：交易日志 + 风控提示
- 支持多 Tab 并行查看不同品种

#### 2. 快速下单（Quick Order）
极简开仓入口，适合高频操作：
- 单品种快进快出
- 一键全平 / 半仓 / 加减仓
- 预设止盈止损比例

#### 3. K 线行情（Market Data）
以图表为中心的分析 + 交易界面：
- 多周期 K 线叠加（1m / 5m / 15m / 1H / 4H / 1D）
- 技术指标叠加（MA / EMA / BOLL / MACD / RSI / ATR 等）
- 图表上直接画线下单

#### 配套查询工具

| 功能 | 说明 |
|:---|:---|
| 📉 **行情列表** | 全品种实时报价、涨跌幅、成交量排行 |
| 📜 **合约信息** | 合约规格、最小变动价位、保证金率 |
| 📋 **订单管理** | 挂单撤单、历史委托查询 |
| 📝 **交易记录** | 成交明细导出、盈亏归因 |
| 📊 **K线管理** | 历史数据下载 / 清洗 / 回放 |

---

### ⚙️ 自动策略系统（Auto Strategy）

FWQuant 的自动策略不是简单的定时脚本，而是一套完整的 **策略 → 任务 → 日志 → 排行榜** 闭环：

```
策略文件 (.py)  →  创建自动任务  →  调度执行（APScheduler）
      ↑                                  ↓
      └── 信号验证 ←── 交易日志 ←── 下单 + 风控拦截
```

核心能力：
- **策略管理**：在线查看 / 编辑 / 管理策略 `.py` 文件，支持策略模板继承（CTA 模板、信号工厂模板）
- **自动任务**：为策略绑定执行周期、交易账户、风控规则，任务化运行
- **策略日志**：实时查看每个任务的信号内容、下单操作、成交回报、止盈止损结算
- **策略排行榜**：基于胜率 / 盈亏比 / 最大回撤的任务表现排行榜
- **信号验证平台**（🔬 Signal Validator）：用历史 K 线批量回测策略信号的命中率，类似 TradingView 的 Strategy Tester 但专为信号级验证设计

---

### 📈 策略回测（Backtest）

兼容 vn.py CTA 策略模板的回测引擎，同时支持：
- 单策略回测（指定品种 + 时间区间 + 初始资金）
- 多策略并行回测（一次跑 N 个策略对比）
- 回测报告：权益曲线、胜率、Sharpe、最大回撤、交易明细
- 回测 → 实盘 一键切换（复用同一份策略代码）

---

### 🛡️ 风险管理（Risk Manager）

| 规则 | 说明 |
|:---|:---|
| 单日最大亏损 | 账户级 / 策略级熔断 |
| 单笔止损止盈 | 固定金额 / 波动率（ATR）自适应 |
| 仓位上限 | 单品种 / 总仓位限制 |
| 下单频率限制 | 防连亏保护 |

风控可在 **手动下单拦截** 和 **自动策略调度** 两个层面同时生效。

---

### 💬 AI 智能对话（Chat / OpenClaw）

内置 LLM 驱动的对话面板：
- **意图识别**：自动识别用户是要「查行情」、「开仓」、「写策略」还是「看日志」
- **策略代码生成**：用自然语言描述策略逻辑 → 生成可运行的 `.py` 策略文件
- **交易指令执行**：聊天窗口内直接说「买 1 BTC」即可下单（需鉴权）
- **OpenClaw 集成**：本地 AI Agent 运行环境，可调度外部工具（浏览器、代码执行）
- **技能系统（Skills）**：可扩展的 AI 技能包，已内置交易、OKX 操作、量化分析等技能

---

### 🎯 辅助工具

| 模块 | 说明 |
|:---|:---|
| 🗄️ **数据库管理** | 内置 SQLite 可视化管理，一键重置 / 备份 |
| 📡 **服务监控** | 网关连接状态、CPU/内存占用、WebSocket 推送延迟 |
| 🧩 **插件 / 技能** | 可插拔扩展点，支持自定义网关、策略、AI 技能 |
| 🤖 **大模型管理** | 配置 LLM Provider（OpenAI / 本地模型 / LiteLLM），切换模型 |
| 📢 **频道管理** | 交易信号推送到微信 / Telegram / Webhook |
| 💬 **微信管理** | 微信机器人接入，接收指令 / 推送日报 |
| 🧑‍💻 **命令终端** | Web 内的 Python REPL，直接调用 fwquant API |
| 🧪 **FWUI 演示** | 前端组件库展示（FWUI 是项目自建的 Web UI 组件库） |
| ⏰ **定时任务** | APScheduler 调度器管理（独立于自动策略的通用定时任务） |
| 🏆 **排行榜系统** | 菜单使用排行 + 策略表现排行，辅助发现高频功能 |
| ❓ **帮助中心** | 内置文档浏览器 + F1 全局帮助入口 + 字段级 `?` 图标帮助 |

---

## 🧱 架构说明

### 与 vn.py 的关系

FWQuant **不是 vn.py 的简单二次封装**。准确地说：

```
┌─────────────────────────────────────────────┐
│           FWQuant Web 控制台（自研）           │
│  ┌───────┐ ┌───────┐ ┌───────┐ ┌─────────┐ │
│  │交易台 │ │自动策略│ │  AI   │ │策略回测 │ │
│  └───┬───┘ └───┬───┘ └───┬───┘ └────┬────┘ │
│      │         │         │          │       │
│  ┌───┴─────────┴─────────┴──────────┴────┐ │
│  │      FWQuant 核心引擎（事件驱动）        │ │
│  └──────────────────┬────────────────────┘ │
├─────────────────────┼──────────────────────┤
│  FWQuant 网关层（兼容 vn.py Gateway 接口规范）│
│  ┌────────┐ ┌────────┐ ┌──────────┐        │
│  │  OKX   │ │ Binance│ │   CTP    │  ...   │
│  └────────┘ └────────┘ └──────────┘        │
├─────────────────────────────────────────────┤
│          vn.py 4.0 兼容层（共享部分基类）       │
└─────────────────────────────────────────────┘
```

- 网关接口（`connect / send_order / subscribe` 等）遵循 vn.py Gateway 规范，已有现成的 OKX、CTP、Binance 实现
- CTA 策略模板（`CtaTemplate`）继承自 vn.py，保证策略代码可移植
- **Web 控制台、自动策略系统、AI 对话、信号验证平台** 是 FWQuant **100% 自研**的扩展，在 vn.py GUI 中并不存在
- 整体功能上，FWQuant 已经超出 vn.py 4.0 的 GUI 能力范畴

### 技术栈速览

| 类别 | 技术 |
|:---|:---|
| 语言 | Python 3.10+ |
| Web 服务 | FastAPI + Flask（双栈共存，逐步迁移到 FastAPI） |
| 前端 | 原生 JS + FWUI 组件库 + ECharts / Plotly |
| 异步 | asyncio + aiohttp + WebSocket |
| 数据库 | SQLite（默认） / MySQL（可选） |
| 缓存 | Redis |
| 回测 | backtrader + 自研多策略并行引擎 |
| 技术指标 | TA-Lib |
| AI | CrewAI + LangChain + LiteLLM + OpenClaw |
| GUI（可选） | PySide6 + pyqtgraph |

---

## 📁 项目结构

```
fwquant/
├── fw_core/          ← 核心模块（网关、策略、回测、风控、数据、AI 等）
├── fw_web/           ← Web 层（路由、引擎、前端静态资源）
├── fw_config/        ← 配置管理 + 默认模板
├── fw_cli/           ← CLI 入口（fwquant web run / install 等）
├── fw_tools/         ← 运维工具（端口管理、更新日志生成等）
├── fuwen/            ← 旧版兼容入口
├── examples/         ← 示例脚本
├── tests/            ← 测试
└── temp/             ← 临时文件（截图、调试输出，.gitignore）
```

---

## 📖 文档入口

| 类别 | 内容 | 路径 |
|:---|:---|:---|
| **安装指南** | 一键脚本安装 / 手动安装 | [fwquant_defaults/docs/用户安装.md](fw_config/fwquant_defaults/docs/用户安装.md) |
| **运维手册** | 服务部署 / 升级 / 备份 | [fwquant_defaults/docs/运维手册.md](fw_config/fwquant_defaults/docs/运维手册.md) |
| **运行服务** | 启动 / 停止 / 调试 | [fwquant_defaults/docs/运行服务.md](fw_config/fwquant_defaults/docs/运行服务.md) |
| **模块文档** | 各核心模块详解 | [fwquant_defaults/docs/module_docs/](fw_config/fwquant_defaults/docs/module_docs/) |
| **开发日志** | 迭代记录 | [fwquant_defaults/docs/开发日志.md](fw_config/fwquant_defaults/docs/开发日志.md) |
| **帮助文档** | 系统帮助总览 | [fwquant_defaults/docs/help.md](fw_config/fwquant_defaults/docs/help.md) |

---

## 📦 内置策略

| 策略 | 类型 | 说明 |
|:---|:---|:---|
| **双均线（Double MA）** | 趋势 | 快慢均线金叉死叉 |
| **Dual Thrust** | 趋势 | 日内突破策略 |
| **ATR-RSI** | 震荡 | 自适应阈值的均值回归 |
| **布林带（Boll Channel）** | 震荡 | 带回归突破 |
| **七福策略** | 多规则组合 | FWQuant 自研信号工厂，多维度评分 |
| **定海三针** | 形态 | K 线形态识别 |
| **随机策略** | 测试 | 用于回测 / 联调 |

---

## 🛠️ 可选依赖安装

```bash
pip install fwquant              # 完整版（含所有功能）
pip install fwquant[core]        # 仅核心网关 + 数据
pip install fwquant[web]         # 核心 + Web 服务
pip install fwquant[gui]         # 核心 + PySide6 桌面 GUI
pip install fwquant[ai]          # 核心 + AI 智能体
pip install fwquant[minimal]     # 核心 + Web + AI（最小常用集）
```

---

## 🧰 运维速查

```bash
# 启动 Web 服务
fwquant web run

# 查看端口
netstat -ano | findstr :15881

# 查看服务状态
fwquant service status

# 版本信息
fwquant version
```

---

## 卸载

```bash
# Ubuntu
curl -fsSL https://www.yaluo.com/install/fwquant/install/fw_uninstall.sh | tr -d '\r' | bash -s -- -f

# Windows
powershell -c "irm https://www.yaluo.com/install/fwquant/install/fw_uninstall.ps1 | iex"
```

---

## 参考 & 致谢

| 项目 | 角色 |
|:---|:---|
| **vn.py** | 网关接口规范来源，部分基类复用 |
| **backtrader** | 回测引擎参考 |
| **CrewAI** | AI 智能体协作 |
| **LangChain** | LLM 应用框架 |
| **ccxt** | 通用交易网关库 |

---

**License**: MIT  
**Homepage**: [https://www.yaluo.com](https://www.yaluo.com)  
**Issues**: [https://github.com/fwquant/fwquant/issues](https://github.com/fwquant/fwquant/issues)
