1002 lines
29 KiB
Markdown
1002 lines
29 KiB
Markdown
|
|
# Strategy Manager - 策略管理系统
|
|||
|
|
|
|||
|
|
## 项目概述
|
|||
|
|
|
|||
|
|
Strategy Manager 是一个用于批量管理交易策略的 Python 系统,支持命令行和 Web 界面两种操作方式。该系统通过进程管理的方式实现策略的启动、停止、重启,以及白名单自动启动等核心功能。
|
|||
|
|
|
|||
|
|
### 核心特性
|
|||
|
|
|
|||
|
|
- **多策略管理**:支持同时管理多个交易策略,统一监控运行状态
|
|||
|
|
- **进程隔离**:每个策略运行在独立子进程中,互不影响
|
|||
|
|
- **白名单机制**:支持设置期望自动启动的策略列表
|
|||
|
|
- **定时任务**:内置定时重启和白名单自动启动功能
|
|||
|
|
- **双接口支持**:提供命令行(CLI)和 Web API 两种操作方式
|
|||
|
|
- **日志管理**:自动为每个策略生成专属日志文件
|
|||
|
|
- **状态持久化**:策略状态自动保存到 JSON 文件,重启后可恢复
|
|||
|
|
- **Git 版本追踪**:Web 界面实时显示当前 Git 提交版本信息
|
|||
|
|
|
|||
|
|
### 功能概览
|
|||
|
|
|
|||
|
|
| 功能类别 | 具体功能 | 说明 |
|
|||
|
|
|----------|----------|------|
|
|||
|
|
| **策略生命周期管理** | 启动/停止/重启 | 支持单个策略和批量操作 |
|
|||
|
|
| | 进程监控 | 实时检测策略运行状态 |
|
|||
|
|
| | 优雅终止 | 超时后强制kill,避免僵尸进程 |
|
|||
|
|
| **白名单系统** | 添加/移除 | 管理自动启动策略列表 |
|
|||
|
|
| | 启用/禁用 | 灵活控制白名单策略状态 |
|
|||
|
|
| | 自动启动 | 每日定时启动白名单策略 |
|
|||
|
|
| **定时任务** | 定时重启 | 每日 08:58 和 20:58 重启所有策略 |
|
|||
|
|
| | 白名单自动启动 | 每日 08:58 执行(仅一次) |
|
|||
|
|
| **状态监控** | 实时状态 | 获取所有策略运行状态 |
|
|||
|
|
| | 日志查看 | 实时查看策略日志 |
|
|||
|
|
| | 版本信息 | 显示 Git 提交版本 |
|
|||
|
|
| **接口方式** | CLI 命令行 | 完整的命令行操作支持 |
|
|||
|
|
| | REST API | FastAPI 构建的 Web 接口 |
|
|||
|
|
| | 前端界面 | Vue.js 构建的可视化界面 |
|
|||
|
|
|
|||
|
|
### 高级特性
|
|||
|
|
|
|||
|
|
#### Git 版本信息集成
|
|||
|
|
|
|||
|
|
Web 后端自动获取并展示当前 Git 仓库的最新提交信息,便于版本追踪和问题排查。
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# API 响应示例
|
|||
|
|
{
|
|||
|
|
"timestamp": "2024-01-01T10:00:00",
|
|||
|
|
"total": 5,
|
|||
|
|
"running": 3,
|
|||
|
|
"git_info": "abc1234 - 修复日志重定向问题 (2 hours ago)",
|
|||
|
|
...
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 前端静态文件服务
|
|||
|
|
|
|||
|
|
Web 后端集成了 Vue.js 构建的前端应用,提供可视化操作界面:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 挂载前端静态文件
|
|||
|
|
app.mount("/static", StaticFiles(directory="frontend/dist"), name="static")
|
|||
|
|
|
|||
|
|
@app.get("/")
|
|||
|
|
def serve_frontend():
|
|||
|
|
return FileResponse("frontend/dist/index.html")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
访问 `http://localhost:8000` 即可使用图形化界面管理策略。
|
|||
|
|
|
|||
|
|
#### 进程守护与优雅关闭
|
|||
|
|
|
|||
|
|
- **守护进程模式**:策略启动时自动脱离终端会话,关闭终端不会影响策略运行
|
|||
|
|
- **优雅终止**:停止策略时先发送 SIGTERM 信号,超时(默认 30 秒)后使用 SIGKILL
|
|||
|
|
- **资源清理**:停止后自动清理 PID 文件和状态记录
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 启动配置
|
|||
|
|
subprocess.Popen(
|
|||
|
|
[sys.executable, "launcher.py", "--config", str(config_file)],
|
|||
|
|
stdout=f,
|
|||
|
|
stderr=subprocess.STDOUT,
|
|||
|
|
stdin=devnull, # 从 /dev/null 读取输入
|
|||
|
|
cwd=Path.cwd()
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 停止配置
|
|||
|
|
process.terminate() # SIGTERM
|
|||
|
|
process.wait(timeout=30) # 等待优雅终止
|
|||
|
|
process.kill() # 超时后强制终止
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 状态持久化
|
|||
|
|
|
|||
|
|
策略状态自动保存到 `status.json` 文件,系统重启后可恢复策略状态信息:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"timestamp": "2024-01-01T10:00:00",
|
|||
|
|
"total": 5,
|
|||
|
|
"running": 3,
|
|||
|
|
"strategies": {
|
|||
|
|
"StrategyName_Symbol": {
|
|||
|
|
"strategy_name": "策略名称",
|
|||
|
|
"symbol": "交易品种",
|
|||
|
|
"status": "running",
|
|||
|
|
"pid": 12345,
|
|||
|
|
"started_at": "2024-01-01T10:00:00",
|
|||
|
|
"uptime": "00:30:00",
|
|||
|
|
"in_whitelist": true,
|
|||
|
|
"whitelist_enabled": true
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 目录结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
strategy_manager/
|
|||
|
|
├── config/ # 配置文件目录
|
|||
|
|
│ ├── main.json # 主配置文件
|
|||
|
|
│ └── whitelist.json # 白名单配置
|
|||
|
|
├── core/ # 核心业务模块
|
|||
|
|
│ ├── manager.py # 策略管理器
|
|||
|
|
│ ├── whitelist_manager.py # 白名单管理器
|
|||
|
|
│ └── path_utils.py # 路径工具函数
|
|||
|
|
├── launcher.py # 策略启动器
|
|||
|
|
├── restart_daemon.py # 重启守护进程
|
|||
|
|
├── start.py # CLI 入口
|
|||
|
|
├── web_backend.py # Web 后端服务
|
|||
|
|
├── frontend/ # 前端 Vue.js 应用
|
|||
|
|
│ └── dist/ # 构建后的静态文件
|
|||
|
|
├── strategies/ # 策略配置文件目录
|
|||
|
|
│ └── {策略名}/
|
|||
|
|
│ └── {品种}.py # 策略配置
|
|||
|
|
├── logs/ # 日志目录(运行时生成)
|
|||
|
|
└── pids/ # PID 文件目录(运行时生成)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 核心模块详解
|
|||
|
|
|
|||
|
|
### 1. StrategyManager(策略管理器)
|
|||
|
|
|
|||
|
|
**文件**:`core/manager.py`
|
|||
|
|
|
|||
|
|
`StrategyManager` 是整个系统的核心类,负责策略的加载、状态管理、启动停止等操作。
|
|||
|
|
|
|||
|
|
#### 主要方法
|
|||
|
|
|
|||
|
|
| 方法名 | 功能描述 | 返回值 |
|
|||
|
|
|--------|----------|--------|
|
|||
|
|
| `__init__(config_path)` | 初始化管理器,加载配置和扫描策略 | - |
|
|||
|
|
| `load_strategies()` | 递归扫描 strategies 目录,动态加载所有 .py 配置文件 | - |
|
|||
|
|
| `get_status()` | 获取所有策略的运行状态,包含白名单信息 | `Dict[str, Any]` |
|
|||
|
|
| `start_strategy(name)` | 启动单个策略(守护进程模式) | `bool` |
|
|||
|
|
| `stop_strategy(name, timeout)` | 停止单个策略,支持优雅终止 | `bool` |
|
|||
|
|
| `restart_strategy(name)` | 重启单个策略 | `bool` |
|
|||
|
|
| `start_all()` | 启动所有已启用的策略 | - |
|
|||
|
|
| `stop_all()` | 停止所有运行中的策略 | - |
|
|||
|
|
| `add_to_whitelist(name)` | 添加策略到白名单 | `bool` |
|
|||
|
|
| `remove_from_whitelist(name)` | 从白名单移除策略 | `bool` |
|
|||
|
|
| `set_whitelist_enabled(name, enabled)` | 设置策略在白名单中的启用状态 | `bool` |
|
|||
|
|
| `auto_start_whitelist_strategies()` | 自动启动白名单中所有未运行的策略 | `Dict[str, bool]` |
|
|||
|
|
|
|||
|
|
#### 策略数据结构
|
|||
|
|
|
|||
|
|
每个策略的信息结构如下:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
{
|
|||
|
|
"strategy_name": "策略名称",
|
|||
|
|
"symbol": "交易品种",
|
|||
|
|
"config_file": "配置文件路径",
|
|||
|
|
"config": {
|
|||
|
|
"name": "显示名称",
|
|||
|
|
"strategy_class": "策略类路径",
|
|||
|
|
"enabled": True,
|
|||
|
|
"engine_params": {...},
|
|||
|
|
"strategy_params": {...}
|
|||
|
|
},
|
|||
|
|
"status": "running" | "stopped",
|
|||
|
|
"pid": 进程ID,
|
|||
|
|
"started_at": "启动时间戳",
|
|||
|
|
"uptime": "运行时长",
|
|||
|
|
"in_whitelist": True | False,
|
|||
|
|
"whitelist_enabled": True | False
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 状态刷新机制
|
|||
|
|
|
|||
|
|
策略管理器采用双重验证机制确保状态准确性:
|
|||
|
|
|
|||
|
|
1. **PID 文件检查**:检查 `pids/{策略名}.pid` 是否存在
|
|||
|
|
2. **进程存在验证**:使用 `psutil.pid_exists()` 验证进程是否存活
|
|||
|
|
3. **进程名验证**:确认进程是否为 Python 进程
|
|||
|
|
4. **资源清理**:进程不存在时自动清理 PID 文件
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
def _refresh_status(self):
|
|||
|
|
"""刷新进程状态 - 双重验证"""
|
|||
|
|
for name, info in self.strategies.items():
|
|||
|
|
pid_file = self.pid_dir / "{}.pid".format(name)
|
|||
|
|
|
|||
|
|
if pid_file.exists():
|
|||
|
|
try:
|
|||
|
|
with open(pid_file, 'r') as f:
|
|||
|
|
pid = int(f.read().strip())
|
|||
|
|
|
|||
|
|
if psutil.pid_exists(pid):
|
|||
|
|
try:
|
|||
|
|
proc = psutil.Process(pid)
|
|||
|
|
if "python" in proc.name().lower():
|
|||
|
|
info["status"] = "running"
|
|||
|
|
# ... 更新其他状态
|
|||
|
|
continue
|
|||
|
|
except (psutil.NoSuchProcess, psutil.AccessDenied):
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
self._cleanup_stopped_strategy(name, pid_file)
|
|||
|
|
except Exception as e:
|
|||
|
|
self.logger.warning("⚠️ 刷新状态失败 %s: %s", name, e)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. WhitelistManager(白名单管理器)
|
|||
|
|
|
|||
|
|
**文件**:`core/whitelist_manager.py`
|
|||
|
|
|
|||
|
|
`WhitelistManager` 负责管理白名单策略列表,实现策略的持久化和自动启动控制。
|
|||
|
|
|
|||
|
|
#### 主要方法
|
|||
|
|
|
|||
|
|
| 方法名 | 功能描述 |
|
|||
|
|
|--------|----------|
|
|||
|
|
| `add(strategy_key, enabled)` | 添加策略到白名单 |
|
|||
|
|
| `remove(strategy_key)` | 从白名单移除策略 |
|
|||
|
|
| `set_enabled(strategy_key, enabled)` | 设置策略的启用状态 |
|
|||
|
|
| `get_all()` | 获取所有白名单策略 |
|
|||
|
|
| `get(strategy_key)` | 获取单个策略的配置 |
|
|||
|
|
| `is_in_whitelist(strategy_key)` | 检查策略是否在白名单中 |
|
|||
|
|
| `is_enabled_in_whitelist(strategy_key)` | 检查策略是否在白名单中且已启用 |
|
|||
|
|
| `should_auto_start_today()` | 检查今天是否应该执行自动启动 |
|
|||
|
|
| `get_auto_start_status()` | 获取自动启动状态信息 |
|
|||
|
|
|
|||
|
|
#### 白名单配置结构
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
{
|
|||
|
|
"version": "1.0",
|
|||
|
|
"last_auto_start_date": "2024-01-01",
|
|||
|
|
"strategies": {
|
|||
|
|
"StrategyName_Symbol": {
|
|||
|
|
"enabled": True,
|
|||
|
|
"added_at": "2024-01-01T10:00:00",
|
|||
|
|
"added_by": "web"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. PathUtils(路径工具)
|
|||
|
|
|
|||
|
|
**文件**:`core/path_utils.py`
|
|||
|
|
|
|||
|
|
提供路径相关的工具函数,处理项目根路径和策略根路径的动态获取。
|
|||
|
|
|
|||
|
|
#### 主要函数
|
|||
|
|
|
|||
|
|
| 函数名 | 功能描述 |
|
|||
|
|
|--------|----------|
|
|||
|
|
| `get_project_root()` | 获取项目根路径(strategy_manager 的父目录) |
|
|||
|
|
| `get_strategy_root(config_path)` | 动态获取策略代码根路径 |
|
|||
|
|
| `add_project_root_to_path()` | 将项目根路径添加到 sys.path |
|
|||
|
|
| `add_strategy_root_to_path()` | 将策略根路径添加到 sys.path |
|
|||
|
|
|
|||
|
|
### 4. Launcher(策略启动器)
|
|||
|
|
|
|||
|
|
**文件**:`launcher.py`
|
|||
|
|
|
|||
|
|
`launcher.py` 是策略的实际执行入口,负责通过配置文件启动单个策略。
|
|||
|
|
|
|||
|
|
#### 工作流程
|
|||
|
|
|
|||
|
|
1. 解析命令行参数,获取配置文件路径
|
|||
|
|
2. 动态加载配置文件(.py 文件)
|
|||
|
|
3. 配置策略专属日志(logs/{策略名}/{品种}.log)
|
|||
|
|
4. 重定向 print 输出到日志文件
|
|||
|
|
5. 动态加载策略类
|
|||
|
|
6. 创建 TqsdkEngine 并执行策略
|
|||
|
|
7. 处理信号实现优雅关闭
|
|||
|
|
|
|||
|
|
#### 使用方式
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python launcher.py --config <config_file>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. RestartDaemon(重启守护进程)
|
|||
|
|
|
|||
|
|
**文件**:`restart_daemon.py`
|
|||
|
|
|
|||
|
|
`RestartDaemon` 是一个独立的守护进程,负责定时重启所有运行中的策略。
|
|||
|
|
|
|||
|
|
#### 核心特性
|
|||
|
|
|
|||
|
|
- 定时重启:每日 08:50 和 20:50 自动重启所有策略
|
|||
|
|
- 进程监控:通过 PID 文件管理策略进程
|
|||
|
|
- 优雅停止:先尝试 SIGTERM 终止,超时后使用 SIGKILL
|
|||
|
|
- 自动恢复:重启后自动启动策略
|
|||
|
|
|
|||
|
|
#### 工作流程
|
|||
|
|
|
|||
|
|
1. 每分钟检查一次当前时间
|
|||
|
|
2. 到达重启时间点时,扫描所有 PID 文件
|
|||
|
|
3. 停止所有运行中的策略进程
|
|||
|
|
4. 等待资源释放(2秒)
|
|||
|
|
5. 根据 PID 文件名推导配置路径
|
|||
|
|
6. 重新启动所有策略
|
|||
|
|
|
|||
|
|
### 6. Start(命令行入口)
|
|||
|
|
|
|||
|
|
**文件**:`start.py`
|
|||
|
|
|
|||
|
|
提供命令行界面(CLI)操作策略。
|
|||
|
|
|
|||
|
|
#### 支持的命令
|
|||
|
|
|
|||
|
|
| 命令 | 功能 | 示例 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `status` | 查看所有策略状态 | `python start.py status` |
|
|||
|
|
| `start --all` | 启动所有策略 | `python start.py start --all` |
|
|||
|
|
| `start -n <name>` | 启动单个策略 | `python start.py start -n DualModeTrendlineHawkesStrategy2_FG` |
|
|||
|
|
| `stop -n <name>` | 停止单个策略 | `python start.py stop -n DualModeTrendlineHawkesStrategy2_FG` |
|
|||
|
|
| `restart -n <name>` | 重启单个策略 | `python start.py restart -n DualModeTrendlineHawkesStrategy2_FG` |
|
|||
|
|
| `logs -n <name>` | 查看策略日志 | `python start.py logs -n DualModeTrendlineHawkesStrategy2_FG -t 50` |
|
|||
|
|
| `whitelist` | 查看白名单 | `python start.py whitelist` |
|
|||
|
|
| `whitelist add -n <name>` | 添加到白名单 | `python start.py whitelist add -n DualModeTrendlineHawkesStrategy2_FG` |
|
|||
|
|
| `whitelist remove -n <name>` | 从白名单移除 | `python start.py whitelist remove -n DualModeTrendlineHawkesStrategy2_FG` |
|
|||
|
|
| `whitelist enable -n <name>` | 启用白名单策略 | `python start.py whitelist enable -n DualModeTrendlineHawkesStrategy2_FG` |
|
|||
|
|
| `whitelist disable -n <name>` | 禁用白名单策略 | `python start.py whitelist disable -n DualModeTrendlineHawkesStrategy2_FG` |
|
|||
|
|
| `whitelist auto-start` | 手动触发自动启动 | `python start.py whitelist auto-start` |
|
|||
|
|
|
|||
|
|
### 7. Web Backend(Web 后端)
|
|||
|
|
|
|||
|
|
**文件**:`web_backend.py`
|
|||
|
|
|
|||
|
|
基于 FastAPI 构建的 Web 后端服务,提供 RESTful API 接口和可视化前端。
|
|||
|
|
|
|||
|
|
#### 定时任务
|
|||
|
|
|
|||
|
|
| 任务 | 执行时间 | 功能 | 说明 |
|
|||
|
|
|------|----------|------|------|
|
|||
|
|
| scheduled_restart_task | 08:58, 20:58 | 重启所有运行中的策略 | 使用 CronTrigger |
|
|||
|
|
| scheduled_whitelist_auto_start | 08:58 | 自动启动白名单中的策略 | 每天仅执行一次 |
|
|||
|
|
|
|||
|
|
#### API 接口
|
|||
|
|
|
|||
|
|
##### 策略管理接口
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 功能 | 请求参数 | 响应示例 |
|
|||
|
|
|------|------|------|----------|----------|
|
|||
|
|
| GET | `/api/status` | 获取所有策略状态 | 无 | 详见下方 |
|
|||
|
|
| POST | `/api/strategy/{name}/start` | 启动策略 | name: 策略标识符 | `{"success": true}` |
|
|||
|
|
| POST | `/api/strategy/{name}/stop` | 停止策略 | name: 策略标识符 | `{"success": true}` |
|
|||
|
|
| POST | `/api/strategy/{name}/restart` | 重启策略 | name: 策略标识符 | `{"success": true}` |
|
|||
|
|
| GET | `/api/logs/{name}` | 获取策略日志 | name: 策略标识符, lines: 行数(默认50) | `{"lines": [...]}` |
|
|||
|
|
|
|||
|
|
##### 白名单管理接口
|
|||
|
|
|
|||
|
|
| 方法 | 路径 | 功能 | 请求参数 | 响应示例 |
|
|||
|
|
|------|------|------|----------|----------|
|
|||
|
|
| GET | `/api/whitelist` | 获取白名单列表 | 无 | 详见下方 |
|
|||
|
|
| POST | `/api/whitelist/{name}/add` | 添加策略到白名单 | name: 策略标识符 | `{"success": true, "message": "..."}` |
|
|||
|
|
| POST | `/api/whitelist/{name}/remove` | 从白名单移除策略 | name: 策略标识符 | `{"success": true, "message": "..."}` |
|
|||
|
|
| POST | `/api/whitelist/{name}/enable` | 启用白名单中的策略 | name: 策略标识符 | `{"success": true, "message": "..."}` |
|
|||
|
|
| POST | `/api/whitelist/{name}/disable` | 禁用白名单中的策略 | name: 策略标识符 | `{"success": true, "message": "..."}` |
|
|||
|
|
| POST | `/api/whitelist/auto-start` | 手动触发白名单自动启动 | 无 | 详见下方 |
|
|||
|
|
|
|||
|
|
#### API 响应示例
|
|||
|
|
|
|||
|
|
**GET /api/status 响应:**
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"timestamp": "2024-01-01T10:00:00",
|
|||
|
|
"total": 5,
|
|||
|
|
"running": 3,
|
|||
|
|
"whitelist_auto_start_today": true,
|
|||
|
|
"whitelist_last_date": "2024-01-01",
|
|||
|
|
"whitelist_total": 2,
|
|||
|
|
"whitelist_enabled": 2,
|
|||
|
|
"git_info": "abc1234 - 修复日志重定向问题 (2 hours ago)",
|
|||
|
|
"strategies": {
|
|||
|
|
"DualModeTrendlineHawkesStrategy2_FG": {
|
|||
|
|
"strategy_name": "DualModeTrendlineHawkesStrategy2",
|
|||
|
|
"symbol": "FG",
|
|||
|
|
"config_file": "strategies/dual_mode_trendline_hawkes/FG.py",
|
|||
|
|
"status": "running",
|
|||
|
|
"pid": 12345,
|
|||
|
|
"started_at": "2024-01-01T09:30:00",
|
|||
|
|
"uptime": "00:30:00",
|
|||
|
|
"in_whitelist": true,
|
|||
|
|
"whitelist_enabled": true,
|
|||
|
|
"config": {...}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**GET /api/whitelist 响应:**
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"whitelist": {
|
|||
|
|
"DualModeTrendlineHawkesStrategy2_FG": {
|
|||
|
|
"enabled": true,
|
|||
|
|
"added_at": "2024-01-01T10:00:00",
|
|||
|
|
"added_by": "web"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"auto_start_status": {
|
|||
|
|
"should_auto_start": true,
|
|||
|
|
"last_auto_start_date": "2024-01-01",
|
|||
|
|
"whitelist_count": 2,
|
|||
|
|
"enabled_count": 2
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**POST /api/whitelist/auto-start 响应:**
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"success": true,
|
|||
|
|
"results": {
|
|||
|
|
"StrategyName_Symbol": true,
|
|||
|
|
"AnotherStrategy_RB": false
|
|||
|
|
},
|
|||
|
|
"count": 2,
|
|||
|
|
"success_count": 1,
|
|||
|
|
"fail_count": 1
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Git 版本信息
|
|||
|
|
|
|||
|
|
Web 后端自动获取 Git 仓库的最新提交信息,返回格式:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
{git_commit_hash} - {commit_message} ({relative_time})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
示例:`abc1234 - 修复日志重定向问题 (2 hours ago)`
|
|||
|
|
|
|||
|
|
此功能便于在 Web 界面快速确认当前部署的代码版本。
|
|||
|
|
|
|||
|
|
#### 前端集成
|
|||
|
|
|
|||
|
|
Web 后端集成了 Vue.js 构建的前端应用:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 静态文件挂载
|
|||
|
|
app.mount("/static", StaticFiles(directory="frontend/dist"), name="static")
|
|||
|
|
|
|||
|
|
# SPA 路由支持
|
|||
|
|
@app.get("/")
|
|||
|
|
def serve_frontend():
|
|||
|
|
return FileResponse("frontend/dist/index.html")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
访问 http://localhost:8000 可使用可视化界面,包括:
|
|||
|
|
- 策略状态总览
|
|||
|
|
- 一键启动/停止/重启
|
|||
|
|
- 日志实时查看
|
|||
|
|
- 白名单管理
|
|||
|
|
- Git 版本信息显示
|
|||
|
|
|
|||
|
|
## 依赖说明
|
|||
|
|
|
|||
|
|
### Python 依赖
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
fastapi>=0.100.0
|
|||
|
|
uvicorn>=0.22.0
|
|||
|
|
apscheduler>=3.10.0
|
|||
|
|
psutil>=5.9.0
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 依赖说明
|
|||
|
|
|
|||
|
|
| 依赖包 | 用途 |
|
|||
|
|
|--------|------|
|
|||
|
|
| fastapi | Web 后端框架,提供 RESTful API |
|
|||
|
|
| uvicorn | ASGI 服务器,用于运行 FastAPI 应用 |
|
|||
|
|
| apscheduler | 定时任务调度器,支持 CronTrigger |
|
|||
|
|
| psutil | 进程监控,获取进程状态和PID信息 |
|
|||
|
|
|
|||
|
|
### 安装依赖
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pip install -r requirements.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 故障排查
|
|||
|
|
|
|||
|
|
### 常见问题
|
|||
|
|
|
|||
|
|
#### 1. 策略启动失败
|
|||
|
|
|
|||
|
|
**症状**:调用 `/api/strategy/{name}/start` 返回失败
|
|||
|
|
|
|||
|
|
**排查步骤**:
|
|||
|
|
1. 检查策略配置文件是否存在:`strategies/{策略名}/{品种}.py`
|
|||
|
|
2. 查看管理器日志:`logs/manager.log`
|
|||
|
|
3. 检查策略专属日志:`logs/{策略名}/{品种}.log`
|
|||
|
|
4. 确认配置文件包含正确的 `CONFIG` 变量
|
|||
|
|
|
|||
|
|
**常见原因**:
|
|||
|
|
- 策略配置文件路径错误
|
|||
|
|
- CONFIG 变量定义不正确
|
|||
|
|
- 策略类路径不存在
|
|||
|
|
- 端口被占用(如果是网络相关错误)
|
|||
|
|
|
|||
|
|
#### 2. 策略状态不正确
|
|||
|
|
|
|||
|
|
**症状**:策略显示已停止但实际在运行,或相反
|
|||
|
|
|
|||
|
|
**排查步骤**:
|
|||
|
|
1. 检查 PID 文件:`pids/{策略名}.pid`
|
|||
|
|
2. 验证进程是否存在:`ps aux | grep python`
|
|||
|
|
3. 查看状态刷新日志
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```bash
|
|||
|
|
# 查看进程
|
|||
|
|
ps aux | grep python
|
|||
|
|
|
|||
|
|
# 查看 PID 文件
|
|||
|
|
cat pids/StrategyName_Symbol.pid
|
|||
|
|
|
|||
|
|
# 手动清理僵尸进程
|
|||
|
|
kill -9 <pid>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 3. 白名单自动启动未执行
|
|||
|
|
|
|||
|
|
**症状**:每日 08:58 白名单策略未自动启动
|
|||
|
|
|
|||
|
|
**排查步骤**:
|
|||
|
|
1. 检查 Web 服务是否运行
|
|||
|
|
2. 查看调度器日志
|
|||
|
|
3. 确认白名单配置:`config/whitelist.json`
|
|||
|
|
4. 检查今日是否已执行
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```bash
|
|||
|
|
# 手动触发自动启动
|
|||
|
|
python start.py whitelist auto-start
|
|||
|
|
|
|||
|
|
# 检查白名单状态
|
|||
|
|
python start.py whitelist list
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 4. 端口被占用
|
|||
|
|
|
|||
|
|
**症状**:`Web 服务启动失败,端口 8000 已被占用`
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```bash
|
|||
|
|
# 查看占用端口的进程
|
|||
|
|
netstat -ano | findstr :8000
|
|||
|
|
|
|||
|
|
# 终止占用进程
|
|||
|
|
taskkill /PID <pid> /F
|
|||
|
|
|
|||
|
|
# 或使用其他端口启动
|
|||
|
|
uvicorn web_backend:app --host 0.0.0.0 --port 8001
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 5. 日志文件不生成
|
|||
|
|
|
|||
|
|
**症状**:策略日志文件未创建
|
|||
|
|
|
|||
|
|
**排查步骤**:
|
|||
|
|
1. 检查日志目录权限
|
|||
|
|
2. 确认 logs 目录存在
|
|||
|
|
3. 查看 launch.py 日志配置
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
```bash
|
|||
|
|
# 手动创建日志目录
|
|||
|
|
mkdir -p logs
|
|||
|
|
|
|||
|
|
# 检查目录权限
|
|||
|
|
ls -la logs/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 日志级别配置
|
|||
|
|
|
|||
|
|
默认日志级别为 INFO,可通过环境变量调整:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 设置调试日志
|
|||
|
|
export LOG_LEVEL=DEBUG
|
|||
|
|
|
|||
|
|
# Windows
|
|||
|
|
set LOG_LEVEL=DEBUG
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 性能监控
|
|||
|
|
|
|||
|
|
#### 查看系统资源
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# CPU 和内存使用
|
|||
|
|
top
|
|||
|
|
|
|||
|
|
# 进程详细信息
|
|||
|
|
ps -p <pid> -o %cpu,%mem,etime
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 策略进程监控
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看所有策略进程
|
|||
|
|
ps aux | grep launcher.py
|
|||
|
|
|
|||
|
|
# 查看特定策略
|
|||
|
|
ps aux | grep FG2305
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 最佳实践
|
|||
|
|
|
|||
|
|
### 1. 策略配置
|
|||
|
|
|
|||
|
|
- 为每个策略创建独立的配置文件
|
|||
|
|
- 使用有意义的策略名称
|
|||
|
|
- 合理设置 `enabled` 状态
|
|||
|
|
|
|||
|
|
### 2. 白名单管理
|
|||
|
|
|
|||
|
|
- 仅将需要长期运行的策略加入白名单
|
|||
|
|
- 定期检查白名单策略状态
|
|||
|
|
- 禁用不再使用的策略而非直接移除
|
|||
|
|
|
|||
|
|
### 3. 定时任务
|
|||
|
|
|
|||
|
|
- 定时重启时间建议设置在交易时段外
|
|||
|
|
- 白名单自动启动建议在开市前执行
|
|||
|
|
- 监控重启任务的执行日志
|
|||
|
|
|
|||
|
|
### 4. 日志管理
|
|||
|
|
|
|||
|
|
- 定期清理过期日志文件
|
|||
|
|
- 使用日志聚合工具(如 ELK)进行集中管理
|
|||
|
|
- 设置合适的日志级别减少磁盘占用
|
|||
|
|
|
|||
|
|
### 5. 进程监控
|
|||
|
|
|
|||
|
|
- 定期检查策略运行状态
|
|||
|
|
- 设置告警机制(如进程异常停止时发送通知)
|
|||
|
|
- 监控服务器资源使用情况
|
|||
|
|
|
|||
|
|
## 配置文件
|
|||
|
|
|
|||
|
|
### 主配置文件(config/main.json)
|
|||
|
|
|
|||
|
|
主配置文件位于 `config/main.json`,控制策略管理器的核心行为:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"strategy_root": "AUTO_DETECT",
|
|||
|
|
"logs_dir": "logs",
|
|||
|
|
"status_file": "status.json",
|
|||
|
|
"pid_dir": "pids"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
| 配置项 | 说明 | 默认值 | 允许值 |
|
|||
|
|
|--------|------|--------|--------|
|
|||
|
|
| strategy_root | 策略代码根路径 | AUTO_DETECT | 目录路径或 "AUTO_DETECT" |
|
|||
|
|
| logs_dir | 日志目录 | logs | 目录路径 |
|
|||
|
|
| status_file | 状态文件 | status.json | 文件路径 |
|
|||
|
|
| pid_dir | PID 文件目录 | pids | 目录路径 |
|
|||
|
|
|
|||
|
|
#### strategy_root 说明
|
|||
|
|
|
|||
|
|
- **AUTO_DETECT**(推荐):自动检测策略根目录,扫描 `strategies/` 目录下的所有 `.py` 文件
|
|||
|
|
- **自定义路径**:指定具体的策略目录路径,例如 `"D:/trading_strategies"`
|
|||
|
|
|
|||
|
|
### 白名单配置(config/whitelist.json)
|
|||
|
|
|
|||
|
|
白名单配置位于 `config/whitelist.json`,管理自动启动的策略列表:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"version": "1.0",
|
|||
|
|
"last_auto_start_date": null,
|
|||
|
|
"strategies": {
|
|||
|
|
"StrategyName_Symbol": {
|
|||
|
|
"enabled": true,
|
|||
|
|
"added_at": "2024-01-01T10:00:00",
|
|||
|
|
"added_by": "web"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| version | string | 配置版本号 |
|
|||
|
|
| last_auto_start_date | string \| null | 上次自动启动日期,ISO 格式 |
|
|||
|
|
| strategies | object | 策略配置字典 |
|
|||
|
|
| strategies.{key}.enabled | boolean | 是否启用自动启动 |
|
|||
|
|
| strategies.{key}.added_at | string | 添加时间 |
|
|||
|
|
| strategies.{key}.added_by | string | 添加方式(web/cli) |
|
|||
|
|
|
|||
|
|
### 策略配置文件(strategies/{策略名}/{品种}.py)
|
|||
|
|
|
|||
|
|
策略配置文件定义单个策略的运行参数,位于 `strategies/{策略名}/{品种}.py`:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from src.strategies.dual_mode_trendline_hawkes import DualModeTrendlineHawkesStrategy2
|
|||
|
|
|
|||
|
|
CONFIG = {
|
|||
|
|
"name": "双模趋势线霍克斯策略2",
|
|||
|
|
"strategy_class": "strategies.dual_mode_trendline_hawkes.DualModeTrendlineHawkesStrategy2",
|
|||
|
|
"enabled": True,
|
|||
|
|
"engine_params": {
|
|||
|
|
"symbol": "FG2305",
|
|||
|
|
"duration_seconds": 0.5,
|
|||
|
|
"roll_over_mode": "daily",
|
|||
|
|
"history_length": 120,
|
|||
|
|
"close_bar_delta": 1
|
|||
|
|
},
|
|||
|
|
"strategy_params": {
|
|||
|
|
# 策略参数...
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 策略配置字段说明
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| name | string | 是 | 策略显示名称 |
|
|||
|
|
| strategy_class | string | 是 | 策略类路径(import 路径) |
|
|||
|
|
| enabled | boolean | 是 | 是否启用该策略 |
|
|||
|
|
| engine_params | object | 是 | 引擎参数 |
|
|||
|
|
| engine_params.symbol | string | 是 | 交易品种代码 |
|
|||
|
|
| engine_params.duration_seconds | number | 是 | K线周期(秒) |
|
|||
|
|
| engine_params.roll_over_mode | string | 否 | 展期模式 |
|
|||
|
|
| engine_params.history_length | number | 否 | 历史K线数量 |
|
|||
|
|
| engine_params.close_bar_delta | number | 否 | 收盘K线增量 |
|
|||
|
|
| strategy_params | object | 是 | 策略具体参数 |
|
|||
|
|
|
|||
|
|
## 使用指南
|
|||
|
|
|
|||
|
|
### 快速开始
|
|||
|
|
|
|||
|
|
1. **启动 Web 服务**(推荐)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd strategy_manager
|
|||
|
|
python start.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Web 服务将在 `http://localhost:8000` 启动。
|
|||
|
|
|
|||
|
|
2. **使用命令行管理策略**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看所有策略状态
|
|||
|
|
python start.py status
|
|||
|
|
|
|||
|
|
# 启动所有策略
|
|||
|
|
python start.py start --all
|
|||
|
|
|
|||
|
|
# 启动单个策略
|
|||
|
|
python start.py start -n StrategyName_Symbol
|
|||
|
|
|
|||
|
|
# 停止单个策略
|
|||
|
|
python start.py stop -n StrategyName_Symbol
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **启动重启守护进程**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python restart_daemon.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 白名单管理
|
|||
|
|
|
|||
|
|
1. **添加策略到白名单**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python start.py whitelist add -n StrategyName_Symbol
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **启用/禁用白名单中的策略**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 启用
|
|||
|
|
python start.py whitelist enable -n StrategyName_Symbol
|
|||
|
|
|
|||
|
|
# 禁用
|
|||
|
|
python start.py whitelist disable -n StrategyName_Symbol
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **手动触发自动启动**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python start.py whitelist auto-start
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 查看日志
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看最近50行日志
|
|||
|
|
python start.py logs -n StrategyName_Symbol -t 50
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 架构设计
|
|||
|
|
|
|||
|
|
### 进程模型
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────┐
|
|||
|
|
│ Strategy Manager │
|
|||
|
|
├─────────────────────────────────────────────────────────┤
|
|||
|
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|||
|
|
│ │ Strategy1 │ │ Strategy2 │ │ StrategyN │ │
|
|||
|
|
│ │ (subprocess)│ │ (subprocess)│ │ (subprocess)│ │
|
|||
|
|
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
|||
|
|
└─────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 数据流向
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
配置文件 (.py)
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
┌──────────────────┐
|
|||
|
|
│ StrategyManager │◄──── WhitelistManager
|
|||
|
|
│ load_strategies()│
|
|||
|
|
└────────┬─────────┘
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
┌──────────────────┐
|
|||
|
|
│ 状态管理 │──► status.json
|
|||
|
|
│ (psutil) │
|
|||
|
|
└────────┬─────────┘
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
┌──────────────────┐
|
|||
|
|
│ 子进程管理 │──► launcher.py
|
|||
|
|
│ (subprocess) │──► pids/*.pid
|
|||
|
|
└──────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 模块依赖关系
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
start.py
|
|||
|
|
│
|
|||
|
|
├──► core/manager.py
|
|||
|
|
│ │
|
|||
|
|
│ ├──► core/whitelist_manager.py
|
|||
|
|
│ └──► core/path_utils.py
|
|||
|
|
│
|
|||
|
|
├──► web_backend.py
|
|||
|
|
│ │
|
|||
|
|
│ └──► core/manager.py
|
|||
|
|
│
|
|||
|
|
└──► launcher.py
|
|||
|
|
│
|
|||
|
|
└──► core/path_utils.py
|
|||
|
|
|
|||
|
|
restart_daemon.py
|
|||
|
|
│
|
|||
|
|
└──► launcher.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 日志系统
|
|||
|
|
|
|||
|
|
### 日志目录结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
logs/
|
|||
|
|
├── manager.log # 策略管理器日志
|
|||
|
|
├── restart_daemon.log # 重启守护进程日志
|
|||
|
|
└── {策略名}/
|
|||
|
|
└── {品种}.log # 策略专属日志
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 日志格式
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
2024-01-01 10:00:00,000 [INFO] [策略名称] 正在启动...
|
|||
|
|
2024-01-01 10:00:00,001 [INFO] 日志文件: logs/StrategyName/Symbol.log
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **进程独立性**:每个策略运行在独立子进程中,关闭终端不会影响策略运行
|
|||
|
|
2. **白名单限制**:自动启动每天只执行一次(08:58)
|
|||
|
|
3. **定时重启**:每日 08:50 和 20:50 自动重启所有策略(由 restart_daemon.py 执行)
|
|||
|
|
4. **配置路径**:策略配置文件需放在 `strategies/{策略名}/{品种}.py`
|
|||
|
|
5. **日志重定向**:策略内的 print 语句会自动写入日志文件
|
|||
|
|
|
|||
|
|
## 扩展开发
|
|||
|
|
|
|||
|
|
### 添加新的策略
|
|||
|
|
|
|||
|
|
1. 在 `strategies/` 目录下创建策略目录
|
|||
|
|
2. 编写策略配置文件 `{品种}.py`
|
|||
|
|
3. 定义 `CONFIG` 变量
|
|||
|
|
4. 策略将自动被加载
|
|||
|
|
|
|||
|
|
### 添加新的 API 接口
|
|||
|
|
|
|||
|
|
在 `web_backend.py` 中添加新的路由:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
@app.get("/api/new-endpoint")
|
|||
|
|
def new_endpoint():
|
|||
|
|
# 实现逻辑
|
|||
|
|
return {"result": "data"}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 自定义定时任务
|
|||
|
|
|
|||
|
|
在 `web_backend.py` 的 `lifespan` 函数中添加:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
scheduler.add_job(
|
|||
|
|
your_task_function,
|
|||
|
|
CronTrigger(hour=XX, minute=XX),
|
|||
|
|
id="your_task_id",
|
|||
|
|
replace_existing=True
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 快速参考
|
|||
|
|
|
|||
|
|
### 常用命令速查
|
|||
|
|
|
|||
|
|
| 操作 | CLI 命令 | API 调用 |
|
|||
|
|
|------|----------|----------|
|
|||
|
|
| 查看状态 | `python start.py status` | `GET /api/status` |
|
|||
|
|
| 启动所有 | `python start.py start --all` | - |
|
|||
|
|
| 启动单个 | `python start.py start -n <name>` | `POST /api/strategy/{name}/start` |
|
|||
|
|
| 停止单个 | `python start.py stop -n <name>` | `POST /api/strategy/{name}/stop` |
|
|||
|
|
| 重启单个 | `python start.py restart -n <name>` | `POST /api/strategy/{name}/restart` |
|
|||
|
|
| 查看日志 | `python start.py logs -n <name> -t 50` | `GET /api/logs/{name}?lines=50` |
|
|||
|
|
| 查看白名单 | `python start.py whitelist list` | `GET /api/whitelist` |
|
|||
|
|
| 添加白名单 | `python start.py whitelist add -n <name>` | `POST /api/whitelist/{name}/add` |
|
|||
|
|
| 移除白名单 | `python start.py whitelist remove -n <name>` | `POST /api/whitelist/{name}/remove` |
|
|||
|
|
| 手动触发启动 | `python start.py whitelist auto-start` | `POST /api/whitelist/auto-start` |
|
|||
|
|
|
|||
|
|
### 定时任务时间表
|
|||
|
|
|
|||
|
|
| 任务 | 执行时间 | 说明 |
|
|||
|
|
|------|----------|------|
|
|||
|
|
| 白名单自动启动 | 每日 08:58 | 仅执行一次 |
|
|||
|
|
| 策略定时重启 | 每日 08:58, 20:58 | 重启所有运行中的策略 |
|
|||
|
|
|
|||
|
|
### 文件路径速查
|
|||
|
|
|
|||
|
|
| 用途 | 路径 |
|
|||
|
|
|------|------|
|
|||
|
|
| 主配置 | `config/main.json` |
|
|||
|
|
| 白名单配置 | `config/whitelist.json` |
|
|||
|
|
| 管理器日志 | `logs/manager.log` |
|
|||
|
|
| 策略日志 | `logs/{策略名}/{品种}.log` |
|
|||
|
|
| PID 文件 | `pids/{策略名}.pid` |
|
|||
|
|
| 状态文件 | `status.json` |
|
|||
|
|
| 策略配置 | `strategies/{策略名}/{品种}.py` |
|
|||
|
|
|
|||
|
|
### 端口与服务
|
|||
|
|
|
|||
|
|
| 服务 | 地址 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| Web 服务 | http://localhost:8000 | FastAPI 后端 + Vue.js 前端 |
|
|||
|
|
| API 基础路径 | /api | RESTful API 根路径 |
|
|||
|
|
| 静态资源 | /static | 前端静态资源 |
|
|||
|
|
|
|||
|
|
### 策略标识符格式
|
|||
|
|
|
|||
|
|
策略标识符由策略名和品种组合而成,格式为:`{策略名}_{品种}`
|
|||
|
|
|
|||
|
|
示例:`DualModeTrendlineHawkesStrategy2_FG`
|
|||
|
|
|
|||
|
|
获取策略标识符:
|
|||
|
|
```bash
|
|||
|
|
# 通过 CLI 查看
|
|||
|
|
python start.py status
|
|||
|
|
|
|||
|
|
# 通过 API 获取
|
|||
|
|
curl http://localhost:8000/api/status
|
|||
|
|
```
|