# 后续方向实施说明 本文档说明「策略与信号评估及改进建议」中未实现或部分实现的方向,以及固定内容入库的用法。 --- ## 一、已完成的改动 ### 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` 解析该 symbol;API 拉取后也会回写 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`),在算目标价/预期收益时读取。当前未实现。