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

3.8 KiB
Raw Blame History

后续方向实施说明

本文档说明「策略与信号评估及改进建议」中未实现或部分实现的方向,以及固定内容入库的用法。


一、已完成的改动

1. 固定内容入库(交易对 / 费率规则)

  • market_cache(见 backend/database/add_market_cache.sql
    • 字段:cache_key(如 exchange_infofunding_info)、cache_valueJSONupdated_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_info24 小时内有效),命中则直接解析返回;否则请求 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_ENABLEDTRAILING_ACTIVATION_PCTTRAILING_CALLBACK_RATE;在 position_manager 挂完固定 SL/TP 后,达标则下跟踪止损单。
2 时间/无盈利止损 持仓时长 > N 小时且浮盈 < 某阈值(或浮亏)→ 市价平仓或提高止损优先级;配置:MAX_HOLD_HOURSMIN_PNL_PCT_TO_HOLD;在 position_manager 的检查循环里按 entry_time 与当前 pnl% 判断。
3 WS 订单/成交优化 下单后根据 ORDER_TRADE_UPDATE/TRADE 做快速反馈、部分成交后的加仓/减仓逻辑;实现成本较高,可排在跟踪止损和时间止损之后。

三、跟踪止损(待实现)要点

  • 币安:条件单类型 TRAILING_STOP_MARKET,需 callbackRateactivationPrice(或由系统按比例计算)。
  • 配置建议:与现有 USE_TRAILING_STOPTRAILING_STOP_ACTIVATIONTRAILING_STOP_PROTECT 对齐,或新增 TRAILING_ACTIVATION_PCTTRAILING_CALLBACK_RATE 从 config/DB 读取。
  • 位置trading_system/position_manager.py 中,在挂完固定 SL/TP 后(或定时检查持仓时),若启用且当前浮盈% ≥ 激活比例,则下 TRAILING_STOP_MARKET;若已有跟踪止损单则跳过。

四、时间/无盈利止损(待实现)要点

  • 逻辑:在 position_manager 的持仓检查循环中,读取每仓的 entry_time 和当前 pnl%;若 持仓时长 > MAX_HOLD_HOURSpnl_percent < MIN_PNL_PCT_TO_HOLD(或为负),则触发市价平仓或标记为「建议平仓」。
  • 配置MAX_HOLD_HOURSMIN_PNL_PCT_TO_HOLD,从 config/DB 读。

五、手续费等固定费率(可选)

若后续要做「预估盈亏」或「最小盈利目标」,可将 maker/taker 费率存入 config 或单独表(如 symbol_fee),在算目标价/预期收益时读取。当前未实现。