17 KiB
Freqtrade AI 策略设计文档(补充完善版)
设计目标
本策略旨在基于 Freqtrade 平台,设计一个利用 CCXT 绑定 OKX 交易所数据的 AI 交易策略,仅进行多头交易(不做空),使用回归模型进行预测,充分利用 AI 模型优化,确保运行可扩展、可追踪、可评估,代码可维护性强,并通过循序渐进的优化实现稳定持续的盈利预期。具体目标包括:
-
充分利用 AI 模型进行优化:基于回归模型,优化多头交易信号生成。
-
AI 模型运行可扩展、可追踪、可评估:支持模型切换、版本管理,记录详细性能指标。
-
代码可维护性强:通过模块化设计和抽象接口提高代码可读性和扩展性。
-
循序渐进优化:从简单模型开始,逐步引入复杂特征,最终实现稳定盈利。
-
数据来源专一性(新增):所有数据通过 CCXT 从 OKX 交易所获取,确保数据一致性和可靠性。
-
仅做多头交易(新增):策略仅生成买入和持有信号,不涉及卖空操作。
-
回归模型(新增):使用回归模型预测价格变化或收益率,生成交易信号。
标签列的明确与初始化
标签列分类
所有标签列基于 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
{ "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 数据、只做多和回归模型要求:
-
标签列的明确与初始化:基于 OKX 数据,通过 set_freqai_targets 和 feature_engineering_expand_all 初始化标签,涵盖目标变量、特征列、预测结果列和元数据列。
-
程序鲁棒性增强:通过 OKX 数据校验、日志记录、异常处理和依赖管理,确保策略稳定运行。
-
防止未来数据泄露:通过时序约束、OKX 数据划分、审计日志和自动化检测,确保回测和实盘不使用未来数据。
-
风险与资金管理:通过动态止损、仓位管理和极端事件处理,平衡多头盈利与风险。
-
数据源可靠性:确保 OKX 数据通过 CCXT 获取可靠,符合合规性要求。
-
用户交互与监控:提供实时监控和报警机制,提升用户体验。
-
策略可扩展性与可维护性:通过模块化设计、配置驱动和接口抽象,适应长期开发需求。
-
循序渐进优化:从简单回归模型到复杂特征,逐步实现 OKX 市场稳定盈利。
强调的重点
-
数据一致性:所有数据来自 OKX,通过 CCXT 确保可靠性和合规性。
-
只做多逻辑:严格限制交易信号为买入和持有,避免空头操作。
-
回归模型优化:优先回归模型的预测准确性和稳定性,定期评估新模型。
-
鲁棒性:在 OKX 数据处理、特征生成和信号生成中加入异常处理。
-
全面评估:通过 MSE、夏普比率、最大回撤等指标,验证 OKX 市场盈利能力。
通过以上设计和配置,本策略能够在 OKX 市场环境中实现稳定多头盈利,同时保持高度的灵活性和鲁棒性。未来可根据 OKX 市场变化或新需求,进一步扩展特征或优化回归模型。