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

537 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 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
```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 市场变化或新需求,进一步扩展特征或优化回归模型。
---