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 仓库的最新提交信息,便于版本追踪和问题排查。
# API 响应示例
{
"timestamp": "2024-01-01T10:00:00",
"total": 5,
"running": 3,
"git_info": "abc1234 - 修复日志重定向问题 (2 hours ago)",
...
}
前端静态文件服务
Web 后端集成了 Vue.js 构建的前端应用,提供可视化操作界面:
# 挂载前端静态文件
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 文件和状态记录
# 启动配置
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 文件,系统重启后可恢复策略状态信息:
{
"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] |
策略数据结构
每个策略的信息结构如下:
{
"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
}
状态刷新机制
策略管理器采用双重验证机制确保状态准确性:
- PID 文件检查:检查
pids/{策略名}.pid是否存在 - 进程存在验证:使用
psutil.pid_exists()验证进程是否存活 - 进程名验证:确认进程是否为 Python 进程
- 资源清理:进程不存在时自动清理 PID 文件
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() |
获取自动启动状态信息 |
白名单配置结构
{
"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 是策略的实际执行入口,负责通过配置文件启动单个策略。
工作流程
- 解析命令行参数,获取配置文件路径
- 动态加载配置文件(.py 文件)
- 配置策略专属日志(logs/{策略名}/{品种}.log)
- 重定向 print 输出到日志文件
- 动态加载策略类
- 创建 TqsdkEngine 并执行策略
- 处理信号实现优雅关闭
使用方式
python launcher.py --config <config_file>
5. RestartDaemon(重启守护进程)
文件:restart_daemon.py
RestartDaemon 是一个独立的守护进程,负责定时重启所有运行中的策略。
核心特性
- 定时重启:每日 08:50 和 20:50 自动重启所有策略
- 进程监控:通过 PID 文件管理策略进程
- 优雅停止:先尝试 SIGTERM 终止,超时后使用 SIGKILL
- 自动恢复:重启后自动启动策略
工作流程
- 每分钟检查一次当前时间
- 到达重启时间点时,扫描所有 PID 文件
- 停止所有运行中的策略进程
- 等待资源释放(2秒)
- 根据 PID 文件名推导配置路径
- 重新启动所有策略
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 响应:
{
"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 响应:
{
"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 响应:
{
"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 构建的前端应用:
# 静态文件挂载
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信息 |
安装依赖
pip install -r requirements.txt
故障排查
常见问题
1. 策略启动失败
症状:调用 /api/strategy/{name}/start 返回失败
排查步骤:
- 检查策略配置文件是否存在:
strategies/{策略名}/{品种}.py - 查看管理器日志:
logs/manager.log - 检查策略专属日志:
logs/{策略名}/{品种}.log - 确认配置文件包含正确的
CONFIG变量
常见原因:
- 策略配置文件路径错误
- CONFIG 变量定义不正确
- 策略类路径不存在
- 端口被占用(如果是网络相关错误)
2. 策略状态不正确
症状:策略显示已停止但实际在运行,或相反
排查步骤:
- 检查 PID 文件:
pids/{策略名}.pid - 验证进程是否存在:
ps aux | grep python - 查看状态刷新日志
解决方案:
# 查看进程
ps aux | grep python
# 查看 PID 文件
cat pids/StrategyName_Symbol.pid
# 手动清理僵尸进程
kill -9 <pid>
3. 白名单自动启动未执行
症状:每日 08:58 白名单策略未自动启动
排查步骤:
- 检查 Web 服务是否运行
- 查看调度器日志
- 确认白名单配置:
config/whitelist.json - 检查今日是否已执行
解决方案:
# 手动触发自动启动
python start.py whitelist auto-start
# 检查白名单状态
python start.py whitelist list
4. 端口被占用
症状:Web 服务启动失败,端口 8000 已被占用
解决方案:
# 查看占用端口的进程
netstat -ano | findstr :8000
# 终止占用进程
taskkill /PID <pid> /F
# 或使用其他端口启动
uvicorn web_backend:app --host 0.0.0.0 --port 8001
5. 日志文件不生成
症状:策略日志文件未创建
排查步骤:
- 检查日志目录权限
- 确认 logs 目录存在
- 查看 launch.py 日志配置
解决方案:
# 手动创建日志目录
mkdir -p logs
# 检查目录权限
ls -la logs/
日志级别配置
默认日志级别为 INFO,可通过环境变量调整:
# 设置调试日志
export LOG_LEVEL=DEBUG
# Windows
set LOG_LEVEL=DEBUG
性能监控
查看系统资源
# CPU 和内存使用
top
# 进程详细信息
ps -p <pid> -o %cpu,%mem,etime
策略进程监控
# 查看所有策略进程
ps aux | grep launcher.py
# 查看特定策略
ps aux | grep FG2305
最佳实践
1. 策略配置
- 为每个策略创建独立的配置文件
- 使用有意义的策略名称
- 合理设置
enabled状态
2. 白名单管理
- 仅将需要长期运行的策略加入白名单
- 定期检查白名单策略状态
- 禁用不再使用的策略而非直接移除
3. 定时任务
- 定时重启时间建议设置在交易时段外
- 白名单自动启动建议在开市前执行
- 监控重启任务的执行日志
4. 日志管理
- 定期清理过期日志文件
- 使用日志聚合工具(如 ELK)进行集中管理
- 设置合适的日志级别减少磁盘占用
5. 进程监控
- 定期检查策略运行状态
- 设置告警机制(如进程异常停止时发送通知)
- 监控服务器资源使用情况
配置文件
主配置文件(config/main.json)
主配置文件位于 config/main.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,管理自动启动的策略列表:
{
"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:
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 | 是 | 策略具体参数 |
使用指南
快速开始
- 启动 Web 服务(推荐)
cd strategy_manager
python start.py
Web 服务将在 http://localhost:8000 启动。
- 使用命令行管理策略
# 查看所有策略状态
python start.py status
# 启动所有策略
python start.py start --all
# 启动单个策略
python start.py start -n StrategyName_Symbol
# 停止单个策略
python start.py stop -n StrategyName_Symbol
- 启动重启守护进程
python restart_daemon.py
白名单管理
- 添加策略到白名单
python start.py whitelist add -n StrategyName_Symbol
- 启用/禁用白名单中的策略
# 启用
python start.py whitelist enable -n StrategyName_Symbol
# 禁用
python start.py whitelist disable -n StrategyName_Symbol
- 手动触发自动启动
python start.py whitelist auto-start
查看日志
# 查看最近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
注意事项
- 进程独立性:每个策略运行在独立子进程中,关闭终端不会影响策略运行
- 白名单限制:自动启动每天只执行一次(08:58)
- 定时重启:每日 08:50 和 20:50 自动重启所有策略(由 restart_daemon.py 执行)
- 配置路径:策略配置文件需放在
strategies/{策略名}/{品种}.py - 日志重定向:策略内的 print 语句会自动写入日志文件
扩展开发
添加新的策略
- 在
strategies/目录下创建策略目录 - 编写策略配置文件
{品种}.py - 定义
CONFIG变量 - 策略将自动被加载
添加新的 API 接口
在 web_backend.py 中添加新的路由:
@app.get("/api/new-endpoint")
def new_endpoint():
# 实现逻辑
return {"result": "data"}
自定义定时任务
在 web_backend.py 的 lifespan 函数中添加:
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
获取策略标识符:
# 通过 CLI 查看
python start.py status
# 通过 API 获取
curl http://localhost:8000/api/status