auto_trade_sys/docs/后续方向实施说明.md
薇薇安 0fb42a5f24 feat(market_cache): 引入市场数据缓存机制以优化API调用
在 `backend/database/models.py` 中新增 `MarketCache` 类,支持从数据库缓存交易对信息和资金费率,减少对币安API的调用频率。更新 `binance_client` 和 `market_scanner` 以优先从缓存读取数据,添加超时处理和重试机制,提升系统稳定性。同时,增强了资金费率和主动买卖量的过滤逻辑,确保在开仓前进行有效的风险控制。
2026-02-16 18:05:11 +08:00

59 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 后续方向实施说明
本文档说明「策略与信号评估及改进建议」中未实现或部分实现的方向,以及固定内容入库的用法。
---
## 一、已完成的改动
### 1. 固定内容入库(交易对 / 费率规则)
- **表**`market_cache`(见 `backend/database/add_market_cache.sql`
- 字段:`cache_key`(如 `exchange_info`、`funding_info`)、`cache_value`JSON、`updated_at`
- **模型**`backend/database/models.py` 中的 `MarketCache`
- `get_exchange_info(max_age_seconds=86400)` / `set_exchange_info(data)`
- `get_funding_info(max_age_seconds=86400)` / `set_funding_info(data)`
- **使用**`trading_system/binance_client.py`
- `get_all_usdt_pairs()`:优先从 DB 读 `exchange_info`24 小时内有效),命中则直接解析返回;否则请求 API 并回写 DB。
- `get_symbol_info(symbol)`:在内存/Redis 未命中时,尝试从 DB 的 `exchange_info` 解析该 symbolAPI 拉取后也会回写 DB。
**部署**:执行 `mysql -u root -p auto_trade_sys < backend/database/add_market_cache.sql` 创建表。无需改配置即可生效。
### 2. 扫描阶段资金费率过滤
- **配置**`trading_system/config.py` 与 DB `trading_config`
- `SCAN_FUNDING_RATE_FILTER_ENABLED`:是否启用(默认 True
- `SCAN_FUNDING_RATE_MAX_ABS`:阈值,默认 0.001(即 \|lastFundingRate\| > 0.1% 的标的从扫描候选剔除)
- **逻辑**:在 `market_scanner.scan_market()` 中,在得到「初步筛选后」的 `pre_filtered_symbols` 后,若启用则调用 `get_premium_index(None)` 取全量费率,剔除 \|lastFundingRate\| > 阈值的 symbol再进入详细分析K 线/技术指标)。
---
## 二、建议实现顺序(未实现部分)
| 顺序 | 方向 | 说明 |
|------|----------------|------|
| 1 | 跟踪止损 | 浮盈达到 X% 后,用 `TRAILING_STOP_MARKET` 替代或补充固定止盈;配置:`TRAILING_STOP_ENABLED`、`TRAILING_ACTIVATION_PCT`、`TRAILING_CALLBACK_RATE`;在 position_manager 挂完固定 SL/TP 后,达标则下跟踪止损单。 |
| 2 | 时间/无盈利止损 | 持仓时长 > N 小时且浮盈 < 某阈值或浮亏)→ 市价平仓或提高止损优先级配置`MAX_HOLD_HOURS`、`MIN_PNL_PCT_TO_HOLD` position_manager 的检查循环里按 `entry_time` 与当前 pnl% 判断 |
| 3 | WS 订单/成交优化 | 下单后根据 ORDER_TRADE_UPDATE/TRADE 做快速反馈部分成交后的加仓/减仓逻辑实现成本较高可排在跟踪止损和时间止损之后 |
---
## 三、跟踪止损(待实现)要点
- **币安**条件单类型 `TRAILING_STOP_MARKET` `callbackRate`、`activationPrice`或由系统按比例计算)。
- **配置建议**与现有 `USE_TRAILING_STOP`、`TRAILING_STOP_ACTIVATION`、`TRAILING_STOP_PROTECT` 对齐或新增 `TRAILING_ACTIVATION_PCT`、`TRAILING_CALLBACK_RATE` config/DB 读取
- **位置**`trading_system/position_manager.py` 在挂完固定 SL/TP 或定时检查持仓时若启用且当前浮盈% 激活比例则下 `TRAILING_STOP_MARKET`若已有跟踪止损单则跳过
---
## 四、时间/无盈利止损(待实现)要点
- **逻辑** position_manager 的持仓检查循环中读取每仓的 `entry_time` 和当前 pnl% `持仓时长 > MAX_HOLD_HOURS` `pnl_percent < MIN_PNL_PCT_TO_HOLD`或为负则触发市价平仓或标记为建议平仓」。
- **配置**`MAX_HOLD_HOURS`、`MIN_PNL_PCT_TO_HOLD` config/DB
---
## 五、手续费等固定费率(可选)
若后续要做预估盈亏最小盈利目标」,可将 maker/taker 费率存入 config 或单独表 `symbol_fee`在算目标价/预期收益时读取当前未实现