myTestFreqAI/md/plan.md
zhangkun9038@dingtalk.com 3395fdea36 追踪止损
2025-05-02 12:34:07 +08:00

17 KiB
Raw Permalink Blame History

Freqtrade AI 策略设计文档(补充完善版)

设计目标

本策略旨在基于 Freqtrade 平台,设计一个利用 CCXT 绑定 OKX 交易所数据的 AI 交易策略,仅进行多头交易(不做空),使用回归模型进行预测,充分利用 AI 模型优化,确保运行可扩展、可追踪、可评估,代码可维护性强,并通过循序渐进的优化实现稳定持续的盈利预期。具体目标包括:

  1. 充分利用 AI 模型进行优化:基于回归模型,优化多头交易信号生成。

  2. AI 模型运行可扩展、可追踪、可评估:支持模型切换、版本管理,记录详细性能指标。

  3. 代码可维护性强:通过模块化设计和抽象接口提高代码可读性和扩展性。

  4. 循序渐进优化:从简单模型开始,逐步引入复杂特征,最终实现稳定盈利。

  5. 数据来源专一性(新增):所有数据通过 CCXT 从 OKX 交易所获取,确保数据一致性和可靠性。

  6. 仅做多头交易(新增):策略仅生成买入和持有信号,不涉及卖空操作。

  7. 回归模型(新增):使用回归模型预测价格变化或收益率,生成交易信号。


标签列的明确与初始化

标签列分类

所有标签列基于 CCXT 从 OKX 交易所获取的数据(如 K 线、成交量、订单簿、资金费率等),分为以下几类:

目标变量Target Variables

  • &-s_close未来一段时间内价格变化收盘价差值用于回归模型训练和预测。

  • &-roi_0, &-roi_15, &-roi_30不同时间窗口下的收益率目标值如 0、15、30 分钟),用于动态设置止盈。

  • 调整(新增):移除 &-up_or_down二分类目标因回归模型仅需连续值目标。

特征列Feature Columns

  • %-%-rsi-period, %-%-macd-period, %-%-bb_width-period基于 OKX K 线数据的扩展技术指标(如 RSI、MACD、布林带宽度

  • %-%-volume_ma基于 OKX 成交量的移动平均值,判断市场活跃度。

  • %-%-order_book_imbalance新增基于 OKX 订单簿数据的买卖盘不平衡特征,反映市场供需。

  • %-%-funding_rate新增基于 OKX 资金费率数据,反映市场情绪,辅助多头信号生成。

  • 补充:若 OKX API 支持,可引入链上数据(如链上转账量、活跃地址数),提升特征多样性。

预测结果列Prediction Columns

  • do_predict预测可信度取值 1可信、0不可信、-1异常数据

  • DI_valuesDissimilarity IndexDI识别预测异常点。

  • &-action回归模型预测的交易动作买入或持有不包含卖空动作。

元数据列Metadata Columns

  • &-buy_rsi_pred动态计算的 RSI 买入阈值,用于生成多头交易条件。

  • &-stoploss_pred, &-roi_0_pred动态计算的止损和止盈阈值优化多头交易策略。

优雅初始化标签列的方法

为确保鲁棒性,所有标签列在 set_freqai_targets 方法中初始化,基于 OKX 数据并遵循以下原则:

统一命名规范

  • 目标变量以 &- 开头,确保 FreqAI 识别。

  • 特征列以 %-%- 开头,支持自动扩展。

  • 预测结果列以 &- 或 %- 开头,确保正确处理。

初始化逻辑清晰

  • 检查 DataFrame 是否包含 OKX 数据必要列(如 close、volume、order_book、funding_rate若缺失则抛出异常或填充默认值。

  • 目标变量(如 &-s_close基于 OKX K 线未来价格变化计算,符合回归模型要求。

  • 特征列(如 %-%-rsi-period通过 feature_engineering_expand_all 扩展,确保基于 OKX 数据生成。

  • 补充(新增):验证 OKX 数据时间戳一致性,避免因 API 延迟导致数据错位。

数据清理与填充

  • 处理 NaN 和 Inf 值,使用 fillna 或 replace 填充缺失值。

  • 补充(新增):为 OKX 订单簿或资金费率数据设计备用填充方案(如历史均值),应对数据不可用情况。

日志记录与调试支持

  • 输出 DataFrame 列名、形状和前几行 OKX 数据,便于调试。

  • 若某列未生成,抛出异常或记录警告。

  • 补充(新增):记录 OKX 数据获取的 API 调用状态(如响应时间、错误码),追踪数据源可靠性。


增强程序鲁棒性的措施

标签列的健壮性校验

  • 校验关键列(如 &-s_close, &-action基于 OKX 数据生成,若缺失抛出异常。

  • 补充(新增):校验 OKX 数据完整性(如 K 线连续性、订单簿深度),确保特征和目标变量可靠。

特征工程的可扩展性

  • 通过 feature_engineering_expand_all 和 feature_engineering_expand_basic 扩展 OKX 数据特征,支持多时间周期。

  • 在配置文件中定义 include_timeframes 和 include_corr_pairlist控制特征扩展。

  • 补充(新增):使用回归模型的特征重要性筛选(如 XGBoost 的 feature importance减少 OKX 数据衍生特征的冗余,降低过拟合风险。

模型训练与预测的分离

  • 训练和预测逻辑分离,确保回归模型训练不干扰多头信号生成。

  • 补充(新增):缓存 OKX 数据预测结果,优化高频交易场景的计算效率。

模型版本管理与回滚机制

  • 使用 identifier 区分回归模型版本,确保保存和加载独立。

  • 若模型表现不佳(如均方误差过大),回滚到上一版本。

  • 补充(新增):定义回滚触发条件(如验证集 MSE 超过阈值或夏普比率下降),支持多模型并行比较。

计算效率与资源管理

  • 优化 OKX 数据处理(如批量加载 K 线、订单簿),减少 CCXT API 调用和计算延迟。

  • 监控 CPU/GPU 使用率,确保实盘信号生成及时。

  • 补充(新增):记录 OKX API 调用频率,遵守交易所速率限制(如每秒请求数)。


防止未来数据泄露的审核机制

特征计算的时序约束

  • 所有特征基于 OKX 历史数据(如 K 线、订单簿、资金费率),通过 CCXT 获取,避免未来数据。

  • 在 feature_engineering_expand_all 方法中,校验数据时间戳。

目标变量的时序约束

  • 目标变量(如 &-s_close通过 shift(-label_period_candles) 计算,确保基于未来 OKX 数据但不提前使用。

  • 补充(新增):审计 OKX 数据时间戳,确保目标变量生成合规。

数据划分的严格控制

  • 设置 test_size 和 shuffle确保训练集和测试集基于 OKX 数据合理划分。

  • 配置 backtest_period_days 和 train_period_days避免未来数据误用。

  • 补充(新增):在实盘中监控 OKX API 数据延迟,防止间接泄露。

回测过程的审计日志

  • 记录 OKX 数据特征生成、目标变量计算和多头信号生成的时间戳和值。

  • 补充(新增):生成 OKX 数据审计报告,定期审查回测合规性。

自动化检测机制

  • 自动检测 OKX 数据特征和目标变量是否基于历史数据,若发现未来数据,抛出异常。

  • 补充(新增):实现 OKX 数据时间戳校验工具,扫描潜在泄露点。


风险管理与资金管理

仓位与资金分配

  • 动态调整仓位,基于 OKX 市场波动性和账户余额,限制单笔交易风险(如账户资金的 2%)。

  • 调整(新增):仅允许多头仓位,禁止杠杆空头交易,符合只做多要求。

止损与止盈

  • 使用动态止损和止盈(如 &-stoploss_pred, &-roi_0_pred基于回归模型预测调整。

  • 补充(新增):设计分层止损(如硬性止损 + trailing stop优化多头盈利防止过早离场。

极端市场事件处理

  • 针对 OKX 市场异常(如价格闪崩、流动性不足),设计保护机制,如暂停交易或降低仓位。

  • 补充(新增):引入市场压力测试,模拟 OKX 市场极端场景,验证策略稳定性。


外部数据源的可靠性和处理

数据源质量控制

  • 所有数据通过 CCXT 从 OKX 获取,确保一致性。

  • 对 OKX 订单簿或资金费率数据进行清洗,处理噪声、缺失值或延迟。

  • 补充(新增):设计备用数据获取方案(如切换 OKX API 端点),应对 API 不可用情况。

数据源合规性

  • 确保 OKX 数据使用符合交易所条款和法律法规(如数据隐私)。

  • 补充(新增):记录 CCXT API 调用和数据使用日志,便于合规性审计。


用户交互与监控

实时监控

  • 提供实时监控界面展示回归模型表现、OKX 数据特征和多头信号。

  • 设置自动报警机制,在模型异常或 OKX 市场剧变时通知用户。

交互性设计

  • 允许用户调整参数(如止损阈值、仓位比例),提高策略灵活性。

  • 补充(新增):生成每日/每周策略报告,总结 OKX 市场表现、盈利和优化建议。


法律与合规性

  • 确保策略符合 OKX 交易所规则和相关法律法规(如加密货币交易合规)。

  • 记录所有交易和 OKX 数据操作,满足审计要求。

  • 补充(新增):定期与合规专家咨询,确保策略适应 OKX 市场监管变化。


策略设计目标的实现路径

充分利用 AI 模型进行优化

  • 模型选择:选择回归模型,如 XGBoost、LightGBM 或 PyTorch 回归模型,预测 OKX 价格变化或收益率。

  • 特征工程:基于 OKX 数据,通过 feature_engineering_expand_all 和 feature_engineering_standard 生成丰富特征集。

  • 模型训练:使用 train_test_split 分割 OKX 数据,通过 model_training_parameters 优化超参数。

  • 补充(新增):定期评估回归模型性能,探索深度学习回归模型(如 LSTM以捕捉 OKX 市场时间序列特征。

AI 模型运行可扩展、可追踪、可评估

  • 可扩展性:通过 freqai.model_training_parameters 支持回归模型切换。

  • 可追踪性:使用 identifier 区分模型版本,确保保存和加载独立。

  • 可评估性记录均方误差MSE、R²、夏普比率、最大回撤等指标通过 TensorBoard 或日志可视化。

  • 补充(新增):在 OKX 市场不同条件下(牛市、熊市、震荡市)测试回归模型,确保适应性。

代码可维护性强

  • 模块化设计:将 OKX 数据处理、特征工程、回归模型训练、信号生成封装为独立函数或类。

  • 抽象类与接口:继承 BaseRegressorModel减少重复代码。

  • 配置驱动:通过 config.json 配置模型、特征和训练参数。

  • 补充(新增):编写 OKX 数据处理和模型训练的文档和测试用例,确保代码易于维护。

循序渐进的优化流程

  • 初步验证:使用 OKX 数据和简单回归模型(如 XGBoost验证多头信号逻辑。

  • 逐步优化:引入复杂特征(如 OKX 订单簿、资金费率)和模型(如 PyTorch 回归)。

  • 持续监控:通过 OKX 数据回测、模拟盘和实盘运行,调整特征和参数。

  • 稳定获利:通过多维度测试,确保策略在 OKX 市场条件下 Profitable。

  • 补充(新增):设定优化阶段时间表(如初步验证 1 个月,复杂模型引入 3 个月),保持开发节奏。


配置建议

以下是符合策略诉求的 Freqtrade 配置建议,基于 OKX 数据、只做多和回归模型:

数据源配置

  • exchange:
    交易所:

    json

    {
      "exchange": {
        "name": "okx",
        "ccxt_config": {
          "enableRateLimit": true,
          "rateLimit": 1000  // 遵守 OKX API 速率限制
        }
      }
    }
    
  • pairlists:
    pairlists配对列表

    • 配置 OKX 交易对(如 BTC/USDT、ETH/USDT通过 include_corr_pairlist 扩展相关资产。

    • 示例:

      json

      {
        "pairlists": [
          {
            "method": "StaticPairList",
            "pairs": ["BTC/USDT", "ETH/USDT"]
          }
        ]
      }
      

策略配置

  • freqai:
    freqai

    json

    {
      "freqai": {
        "enabled": true,
        "identifier": "okx_regression_v1",  // 模型版本标识
        "model_training_parameters": {
          "model_type": "XGBoost",  // 初始回归模型,可切换为 LightGBM 或 PyTorch
          "objective": "reg:squarederror",  // 回归目标
          "n_estimators": 100,
          "learning_rate": 0.05
        },
        "feature_parameters": {
          "include_timeframes": ["5m", "15m", "1h"],  // OKX K 线时间周期
          "include_corr_pairlist": ["BTC/USDT", "ETH/USDT"],
          "feature_engineering": {
            "rsi": {"periods": [14, 21]},
            "macd": {"fast": 12, "slow": 26},
            "bb_width": {"period": 20},
            "volume_ma": {"period": 20},
            "order_book_imbalance": {"depth": 10},  // OKX 订单簿特征
            "funding_rate": {}  // OKX 资金费率
          }
        },
        "data_split_parameters": {
          "test_size": 0.2,
          "shuffle": false  // 防止时间序列数据打乱
        },
        "backtest_period_days": 30,
        "train_period_days": 90
      }
    }
    

交易逻辑配置

  • entry/exit_rules:
    入口/出口规则:

    • 仅生成多头买入信号,基于回归模型预测(如 &-s_close > 阈值)。

    • 退出信号基于动态止盈(如 &-roi_0_pred或止损如 &-stoploss_pred

    • 示例:

      json

      {
        "entry_rules": {
          "conditions": [
            {"&-action": "buy"},  // 回归模型预测买入
            {"&-buy_rsi_pred": "> 30"}  // RSI 阈值
          ]
        },
        "exit_rules": {
          "conditions": [
            {"&-roi_0_pred": "reached"},  // 达到止盈
            {"&-stoploss_pred": "triggered"}  // 触发止损
          ]
        }
      }
      

风险管理配置

  • stake_amount:
    投注金额:

    • 设置单笔交易风险,如账户余额的 2%。

    • 示例:

      json

      {
        "stake_amount": "dynamic",
        "max_open_trades": 3,
        "position_size": "2% of balance"
      }
      
  • stoploss:
    止损:

    • 配置动态止损,结合 trailing stop。

    • 示例:

      json

      {
        "stoploss": {
          "type": "dynamic",
          "value": "&-stoploss_pred",
          "trailing_stop": true,
          "trailing_stop_positive": 0.01
        }
      }
      

日志与监控配置

  • logging:
    记录日志:

    json

    {
      "logging": {
        "level": "DEBUG",
        "logfile": "freqtrade_okx.log",
        "freqai_log": {
          "feature_generation": true,
          "model_performance": true,
          "data_source_status": true  // 记录 OKX API 状态
        }
      }
    }
    

总结与核心原则

本策略围绕以下核心目标展开,全面适配 OKX 数据、只做多和回归模型要求:

  1. 标签列的明确与初始化:基于 OKX 数据,通过 set_freqai_targets 和 feature_engineering_expand_all 初始化标签,涵盖目标变量、特征列、预测结果列和元数据列。

  2. 程序鲁棒性增强:通过 OKX 数据校验、日志记录、异常处理和依赖管理,确保策略稳定运行。

  3. 防止未来数据泄露通过时序约束、OKX 数据划分、审计日志和自动化检测,确保回测和实盘不使用未来数据。

  4. 风险与资金管理:通过动态止损、仓位管理和极端事件处理,平衡多头盈利与风险。

  5. 数据源可靠性:确保 OKX 数据通过 CCXT 获取可靠,符合合规性要求。

  6. 用户交互与监控:提供实时监控和报警机制,提升用户体验。

  7. 策略可扩展性与可维护性:通过模块化设计、配置驱动和接口抽象,适应长期开发需求。

  8. 循序渐进优化:从简单回归模型到复杂特征,逐步实现 OKX 市场稳定盈利。

强调的重点

  • 数据一致性:所有数据来自 OKX通过 CCXT 确保可靠性和合规性。

  • 只做多逻辑:严格限制交易信号为买入和持有,避免空头操作。

  • 回归模型优化:优先回归模型的预测准确性和稳定性,定期评估新模型。

  • 鲁棒性:在 OKX 数据处理、特征生成和信号生成中加入异常处理。

  • 全面评估:通过 MSE、夏普比率、最大回撤等指标验证 OKX 市场盈利能力。

通过以上设计和配置,本策略能够在 OKX 市场环境中实现稳定多头盈利,同时保持高度的灵活性和鲁棒性。未来可根据 OKX 市场变化或新需求,进一步扩展特征或优化回归模型。