### 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_values:Dissimilarity Index(DI)值,识别预测异常点。 - &-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 ```json { "exchange": { "name": "okx", "ccxt_config": { "enableRateLimit": true, "rateLimit": 1000 // 遵守 OKX API 速率限制 } } } ``` - pairlists: pairlists:配对列表 - 配置 OKX 交易对(如 BTC/USDT、ETH/USDT),通过 include_corr_pairlist 扩展相关资产。 - 示例: json ```json { "pairlists": [ { "method": "StaticPairList", "pairs": ["BTC/USDT", "ETH/USDT"] } ] } ``` 策略配置 - freqai: freqai: json ```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 ```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 ```json { "stake_amount": "dynamic", "max_open_trades": 3, "position_size": "2% of balance" } ``` - stoploss: 止损: - 配置动态止损,结合 trailing stop。 - 示例: json ```json { "stoploss": { "type": "dynamic", "value": "&-stoploss_pred", "trailing_stop": true, "trailing_stop_positive": 0.01 } } ``` 日志与监控配置 - logging: 记录日志: json ```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 市场变化或新需求,进一步扩展特征或优化回归模型。 ---