feat(strategy_manager): 添加策略自动启动的白名单管理

实现全面的白名单管理系统,支持策略自动启动:

- 添加 WhitelistManager 类用于持久化白名单配置存储
- 将白名单功能集成到 StrategyManager 核心模块
- 添加用于白名单 CRUD 操作的 REST API 端点
- 通过 start.py 创建用于白名单管理的 CLI 命令
- 更新前端 UI,添加白名单状态指示器和批量操作功能
- 实现每日 08:58 的自动启动调度
- 为白名单操作添加配置验证和日志记录

同时添加项目文档:
- 代码格式规则(缩进、行长度、导入、命名)
- 文件、变量、常量、函数、类的命名规范
- 受限制文件和目录的保护规则
This commit is contained in:
2026-01-26 01:21:46 +08:00
parent 1b5021d640
commit c0d996f39b
11 changed files with 1952 additions and 99 deletions

View File

@@ -0,0 +1,96 @@
# 代码格式规则 (Formatting Rules)
本项目遵循以下代码格式规范:
## 1. Python 代码规范
### 1.1 缩进
- 使用 **4个空格** 进行缩进
- 不使用 Tab 键
### 1.2 行长度
- 每行代码最大长度:**100 字符**
- 文档字符串最大长度:**80 字符**
### 1.3 空行
- 类定义之间:**2个空行**
- 方法定义之间:**1个空行**
- 函数定义之间:**2个空行**
- 逻辑段落之间:**1个空行**
### 1.4 导入顺序
```python
# 标准库导入
import os
import sys
from datetime import datetime
# 第三方库导入
import numpy as np
import pandas as pd
# 本地项目导入
from src.backtest_engine import BacktestEngine
from src.data_manager import DataManager
```
### 1.5 空格使用
- 在逗号后添加空格:`func(a, b, c)`
- 在运算符两侧添加空格:`a + b`
- 不要在括号内添加空格:`func(a)` 而不是 `func( a )`
- 函数参数列表内不要有多余空格
## 2. 命名规范
### 2.1 变量命名
- 使用 **小写字母 + 下划线**`trade_volume`, `stop_loss_points`
- 私有变量使用前缀下划线:`_internal_cache`
### 2.2 常量命名
- 使用 **全大写 + 下划线**`MAX_POSITION`, `DEFAULT_STOP_LOSS`
### 2.3 函数命名
- 使用 **小写字母 + 下划线**`calculate_metrics()`, `get_bar_history()`
### 2.4 类命名
- 使用 **大驼峰命名法 (PascalCase)**`SimpleLimitBuyStrategy`, `BacktestEngine`
## 3. 文档字符串规范
### 3.1 所有公共类和方法必须有文档字符串
```python
class SimpleLimitBuyStrategy(Strategy):
"""
一个基于当前K线Open、前1根和前7根K线Range计算优势价格进行限价买入的策略。
具备以下特点:
- 每根K线开始时取消上一根K线未成交的订单
- 最多只能有一个开仓挂单和一个持仓
- 包含简单的止损和止盈逻辑
Args:
context: 模拟器实例
symbol: 交易合约代码
trade_volume: 单笔交易量
"""
```
### 3.2 复杂逻辑必须添加注释说明
## 4. 类型提示规范
- 推荐为函数参数和返回值添加类型提示
- 使用 `from typing` 导入类型
- 循环导入时使用 `TYPE_CHECKING`
```python
from typing import Dict, Any, Optional, TYPE_CHECKING
if TYPE_CHECKING:
from src.backtest_engine import BacktestContext
```
## 5. Git 提交规范
- 提交信息使用中文或英文
- 格式:`[类型] 描述`
- 类型feat, fix, docs, style, refactor, test, chore

View File

@@ -0,0 +1,129 @@
# 命名约定规则 (Naming Conventions)
本项目定义了一套统一的命名约定,以确保代码库的一致性和可读性。
## 1. 文件命名规范
### 1.1 Python 文件
- 使用 **小写字母 + 下划线**`backtest_engine.py`, `data_manager.py`
- 避免使用连字符或空格
- 测试文件以 `test_` 前缀开头:`test_backtest_engine.py`
### 1.2 配置文件
- 使用小写字母和下划线:`config.json`, `strategy_params.yaml`
- 环境配置文件使用 `.env``.env.{environment}` 格式
### 1.3 数据文件
- 遵循 `{数据类型}_{日期范围}.{扩展名}` 格式
- 示例:`btc_ohlcv_2023_2024.csv`, `strategy_results_202401.json`
## 2. 变量命名规范
### 2.1 普通变量
- 使用 **小写字母 + 下划线**snake_case
- 使用描述性名称,避免缩写
- ✅ 正确示例:`current_price`, `trade_volume`, `stop_loss_price`
- ❌ 错误示例:`cp`, `tv`, `sl`
### 2.2 布尔变量
- 使用 `is_`, `has_`, `are_` 等前缀
- ✅ 正确示例:`is_valid`, `has_position`, `are_orders_filled`
- ❌ 错误示例:`valid`, `position`, `filled`
### 2.3 私有变量
- 使用单下划线前缀(约定俗成的私有)
- ✅ 正确示例:`_internal_cache`, `_last_order_id`
- ❌ 错误示例:`__private_var`(除非确实需要 name mangling
### 2.4 临时变量
- 循环变量可使用单字母或简短名称
- ✅ 正确示例:`for i in range(n):`, `for bar in bars:`
## 3. 常量命名规范
### 3.1 全局常量
- 使用 **全大写字母 + 下划线**SCREAMING_SNAKE_CASE
- 定义在文件顶部或单独的 `constants.py` 模块中
- ✅ 正确示例:`MAX_POSITION = 5`, `DEFAULT_COMMISSION_RATE = 0.0003`
- ❌ 错误示例:`max_position`, `default_commission_rate`
### 3.2 配置常量
- 使用全大写字母和下划线
- ✅ 正确示例:`SYMBOL_FUTURES_SUFFIX = ".FG"`
## 4. 函数命名规范
### 4.1 普通函数
- 使用 **小写字母 + 下划线**snake_case
- 函数名应清晰表达其功能
- ✅ 正确示例:`calculate_metrics()`, `get_bar_history()`, `send_order()`
- ❌ 错误示例:`calc()`, `getData()`, `send()`
### 4.2 返回布尔值的函数
- 使用 `is_`, `has_`, `are_` 等前缀
- ✅ 正确示例:`is_trending_up()`, `has_active_orders()`, `are_positions_valid()`
### 4.3 私有函数
- 使用单下划线前缀
- ✅ 正确示例:`_validate_params()`, `_calculate_pnl()`
## 5. 类命名规范
### 5.1 公共类
- 使用 **大驼峰命名法**PascalCase
- ✅ 正确示例:`BacktestEngine`, `SimpleLimitBuyStrategy`, `DataManager`
- ❌ 错误示例:`backtest_engine`, `simple_limit_buy_strategy`
### 5.2 抽象基类
- 使用 `ABC` 后缀或 `Base` 前缀
- ✅ 正确示例:`Strategy(ABC)`, `BaseIndicator`
### 5.3 异常类
- 使用 `Error``Exception` 后缀
- ✅ 正确示例:`BacktestError`, `OrderExecutionException`
## 6. 特定领域命名规范
### 6.1 交易相关
- 方向:`BUY`, `SELL`, `CLOSE_LONG`, `CLOSE_SHORT`
- 订单类型:`LIMIT`, `MARKET`, `STOP`
- 持仓:`LONG`, `SHORT`, `FLAT`
### 6.2 策略参数
- 使用描述性名称,包含参数含义
- ✅ 正确示例:`stop_loss_points`, `take_profit_points`, `range_factor`
- ❌ 错误示例:`sl`, `tp`, `rf`
### 6.3 K线数据
- 时间周期:`1m`, `5m`, `15m`, `1h`, `4h`, `1d`
- OHLCV`open`, `high`, `low`, `close`, `volume`
## 7. 数据库/缓存命名规范
### 7.1 缓存键
- 使用冒号分隔的层次结构
- ✅ 正确示例:`strategy:rb:positions`, `market:btc:price`
### 7.2 日志文件
- 使用 `{策略名}/{品种}.log` 格式
- ✅ 正确示例:`logs/SpectralTrendStrategy/rb.log`
## 8. 命名一致性检查清单
在提交代码前,请确认以下检查项:
- [ ] 所有变量名使用 snake_case
- [ ] 所有类名使用 PascalCase
- [ ] 所有常量使用 SCREAMING_SNAKE_CASE
- [ ] 函数名清晰表达功能
- [ ] 命名具有描述性,避免模糊缩写
- [ ] 私有成员使用下划线前缀
- [ ] 布尔变量使用适当的前缀
## 9. 命名反模式(应避免)
- ❌ 使用单个字母 `l`, `O`, `I` 作为变量名(容易与数字 1, 0 混淆)
- ❌ 使用魔法数字或字符串(应定义为常量)
- ❌ 使用不一致的命名风格混合
- ❌ 使用过于通用的名称如 `data`, `info`, `temp`
- ❌ 使用项目保留名称如 `strategy`, `engine`, `manager`

View File

@@ -0,0 +1,126 @@
# 受限文件规则 (Restricted Files Rules)
本项目定义了以下受限文件和目录,这些内容 **禁止访问、不允许访问、更不允许修改**
## 1. 受限目录列表
### 1.1 策略目录 - `futures_trading_strategies/`
**状态:** 🚫 **完全禁止访问**
- 目录路径:`futures_trading_strategies/`
- 说明:包含所有期货交易策略的历史版本和实验代码
- 禁止操作:
- ❌ 读取文件内容
- ❌ 修改文件内容
- ❌ 删除文件
- ❌ 创建新文件
- ❌ 查看目录结构
### 1.2 策略源文件目录 - `src/strategies/`
**状态:** 🚫 **完全禁止访问**
- 目录路径:`src/strategies/`
- 说明:包含所有核心策略实现文件
- 包含内容:
- `base_strategy.py` - 策略基类
- `SimpleLimitBuyStrategy.py` - 简单限价买入策略
- `OpenTwoFactorStrategy.py` - 双因子开仓策略
- `OpenTwoFactorStrategyDouble.py` - 双因子开仓策略(双倍版本)
- `smc_pure_h1_long_strategy.py` - SMC H1 长线策略
- `utils.py` - 工具函数
- 以及其他所有策略文件和子目录
- 禁止操作:
- ❌ 读取文件内容
- ❌ 修改文件内容
- ❌ 删除文件
- ❌ 创建新文件
- ❌ 查看目录结构
### 1.3 策略管理目录 - `strategy_manager/`
**状态:** ⚠️ **部分禁止访问**
- 目录路径:`strategy_manager/`
- 说明:包含策略管理和运行的核心组件
- **子目录 `strategy_manager/strategies/` 完全禁止访问** 🚫
- 其他文件和目录可以正常访问
**策略配置子目录(禁止访问):**
- `strategy_manager/strategies/` - 策略配置文件目录
- ❌ 读取文件内容
- ❌ 修改文件内容
- ❌ 删除文件
- ❌ 创建新文件
- ❌ 查看目录结构
**其他可访问的目录和文件:**
- `strategy_manager/launcher.py` - 策略启动器 ✅
- `strategy_manager/start.py` - 启动脚本 ✅
- `strategy_manager/restart_daemon.py` - 重启守护进程 ✅
- `strategy_manager/web_backend.py` - Web后端 ✅
- `strategy_manager/status.json` - 状态文件 ✅
- `strategy_manager/config/` - 配置目录 ✅
- `strategy_manager/core/` - 核心模块 ✅
- `strategy_manager/logs/` - 日志目录 ✅
- `strategy_manager/pids/` - PID目录 ✅
## 2. 特殊文件保护
### 2.1 策略核心文件
以下文件受到特别保护:
- `src/strategies/base_strategy.py` - 策略基类,包含邮件通知等核心功能
- `src/strategies/utils.py` - 策略工具函数
- `strategy_manager/launcher.py` - 策略启动器
- `strategy_manager/web_backend.py` - Web后端服务
### 2.2 配置文件保护
- `strategy_manager/config/` 目录下的所有配置文件
- `strategy_manager/status.json` - 策略状态文件
## 3. 违规处理
### 3.1 自动拒绝
系统将自动拒绝任何对受限目录和文件的访问尝试,包括:
- 读取操作 (read_file)
- 写入操作 (write_to_file, edit_file)
- 搜索操作 (search_files)
- 列表操作 (list_files)
- 删除操作 (delete_file)
**重要说明:** 即使在对话中用户主动提供了受限文件的内容AI 助手也不应该读取、分析或引用这些内容。所有受限文件的内容都应被视为不可访问的机密信息。
### 3.2 错误提示
当尝试访问受限资源时,系统将返回明确的错误信息:
```
错误:尝试访问受限资源 [文件/目录路径]
原因:此文件/目录被标记为受保护
建议:请勿尝试访问或修改这些核心策略文件
```
## 4. 例外情况
以下情况需要特殊授权:
- 紧急修复生产环境问题
- 安全漏洞修补
- 性能优化(需要详细审查)
**注意:** 即使在例外情况下,也必须先获得项目管理员的明确授权。
## 5. 规则说明
这些限制规则的目的是:
1. **保护策略资产**:防止核心交易策略被意外或恶意修改
2. **确保系统稳定性**:避免因修改关键文件导致系统崩溃
3. **维护代码质量**:确保只有经过充分测试的代码才能部署
4. **分离关注点**:开发工作与生产环境严格分离
**警告:** 违反这些规则可能导致:
- 策略失效
- 资金损失
- 系统故障
- 项目责任追究
# Restricted files
Files in the list contain sensitive data, they MUST NOT be read
- strategy_manager/strategies/
- futures_trading_strategies/
- src/strategies/