myTestFreqAI/chat/result13.md
2025-05-31 16:04:05 +00:00

251 lines
7.6 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.

> 请实现代码:
> 1. **将 `&-divergence_score` 改为连续值形式**
> 2. **移除任何离散值列(如 market_condition 编码)**
> 3. **保持使用 `LightGBMMultiTargetRegressor` 模型**
> 4. **在策略中使用这些连续值进行动态交易决策**
Error: {
exit = 56,
message = 'post https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions - curl error exit_code=56 stderr={ "curl: (56) OpenSSL SSL_read: error:0A000126:SSL routines::unexpected eof while reading, errno 0" }',
stderr = '{ "curl: (56) OpenSSL SSL_read: error:0A000126:SSL routines::unexpected eof while reading, errno 0" }'
}
-------
- Datetime: 2025-05-31 08:40:04
- Model: _qwen3/qwen-plus-latest
- Selected files:
- freqtrade/templates/freqaiprimer.py
> 中断了,请继续
非常理解,我们继续完成你的需求。
---
## ✅ 你的目标
你希望:
1. **将 `&-divergence_score` 改为连续值形式**
2. **移除任何离散值列(如 `&-market_condition`**
3. **保持使用 `LightGBMMultiTargetRegressor` 模型**
4. **在策略中使用这些连续值进行动态交易决策**
---
## ✅ 实现步骤概览
我们将完成以下修改:
| 步骤 | 内容 |
|------|------|
| 🧮 Step 1 | 修改 `set_freqai_targets()`:生成连续背离评分 |
| 🧹 Step 2 | 移除所有离散值列(如 `&-market_condition` |
| 📈 Step 3 | 配置 FreqAI 使用 `LightGBMMultiTargetRegressor` |
| 🛠 Step 4 | 在 `populate_entry_trend()``populate_exit_trend()` 中使用连续背离信号 |
---
## 🧮 Step 1修改 `set_freqai_targets()`,生成连续背离评分
```python
def set_freqai_targets(self, dataframe: DataFrame, metadata: dict, **kwargs) -> DataFrame:
"""
使用历史窗口预测未来趋势和波动率作为辅助信号,
并新增一个连续值的背离评分列 &-divergence_score
"""
label_period = self.freqai_info["feature_parameters"]["label_period_candles"]
# 1. 趋势强度:使用过去 N 根 K 线的收益率判断当前趋势
dataframe["&-trend_strength"] = dataframe["close"].pct_change(label_period)
# 2. 波动率预测:使用过去 N 根 K 线的价格变动绝对值
dataframe["&-volatility_forecast"] = dataframe["close"].pct_change(label_period).abs()
# 3. ROI 目标:基于趋势强度缩放
dataframe["&-roi_target"] = np.where(
dataframe["&-trend_strength"] > 0,
dataframe["&-trend_strength"] * 1.5,
0.01 # 最小 ROI
)
# 4. 动态止损目标:基于波动率缩放
dataframe["&-stoploss_target"] = -dataframe["&-volatility_forecast"] * 1.2
# 5. 新增:连续背离评分(价格与趋势的偏离程度)
dataframe["price_change"] = dataframe["close"].pct_change(label_period)
dataframe["trend_change"] = dataframe["&-trend_strength"].pct_change(label_period)
# 连续背离评分:正值表示正向背离,负值表示负向背离
dataframe["&-divergence_score"] = dataframe["price_change"] - dataframe["trend_change"]
return dataframe
```
---
## 🧹 Step 2移除所有离散值列如 `&-market_condition`
如果你之前定义了 `&-market_condition` 或其他分类列,请从 `set_freqai_targets()``populate_indicators()` 中删除它们。
### ❌ 删除示例:
```python
# 删除以下代码(如果存在)
if "bb_upperband-period" in dataframe.columns and "bb_lowerband-period" in dataframe.columns:
dataframe["&-market_condition"] = np.select([
(dataframe["close"] > dataframe["bb_upperband-period"]),
(dataframe["close"] < dataframe["bb_lowerband-period"]),
(dataframe["&-trend_strength"] > 0.03),
], [
"overbought",
"oversold",
"strong_up",
], default="sideways")
```
同时确保不再使用这些列做任何逻辑判断。
---
## 📈 Step 3配置 FreqAI 使用 `LightGBMMultiTargetRegressor`
在你的策略类中设置:
```python
freqai_info = {
"model": "LightGBMMultiTargetRegressor", # ✅ 多目标回归模型
"feature_parameters": {
"include_timeframes": ["5m", "15m", "1h"],
"label_period_candles": 24,
"include_shifted_candles": 3,
"principal_component_analysis": True, # 可选:启用 PCA 提升泛化能力
},
"data_split_parameters": {
"test_size": 0.2,
"shuffle": False,
},
"model_training_parameters": {
"n_estimators": 200,
"learning_rate": 0.05,
"num_leaves": 31,
"verbose": -1,
},
}
```
这样 FreqAI 将使用 LightGBM 的多输出回归模型来同时预测多个连续目标列。
---
## 🛠 Step 4在策略中使用连续背离信号进行交易决策
### ✅ 示例:在 `populate_entry_trend()` 中使用 `&-divergence_score`
```python
def populate_entry_trend(self, df: DataFrame, metadata: dict) -> DataFrame:
conditions = []
if "&-divergence_score" in df.columns:
# 正向背离:价格下跌但趋势上升(背离评分为正值)
buy_condition = df["&-divergence_score"] > 0.01
# 结合趋势强度过滤
if "&-trend_strength" in df.columns:
buy_condition &= df["&-trend_strength"] > 0.005
# 成交量过滤:成交量需大于 20 日均值的 1 倍
df["vol_mean"] = df["volume"].rolling(20).mean()
buy_condition &= (df["volume"] > df["vol_mean"] * 1)
conditions.append(buy_condition)
if len(conditions):
df.loc[reduce(lambda x, y: x & y, conditions), 'enter_long'] = 1
return df
```
### ✅ 示例:在 `populate_exit_trend()` 中使用 `&-divergence_score`
```python
def populate_exit_trend(self, df: DataFrame, metadata: dict) -> DataFrame:
conditions = []
if "&-divergence_score" in df.columns:
# 负向背离:价格上涨但趋势下降(背离评分为负值)
sell_condition = df["&-divergence_score"] < -0.01
# 结合趋势强度过滤
if "&-trend_strength" in df.columns:
sell_condition &= df["&-trend_strength"] < -0.005
conditions.append(sell_condition)
if len(conditions):
df.loc[reduce(lambda x, y: x & y, conditions), 'exit_long'] = 1
return df
```
---
## 📦 Step 5更新 `plot_config`(可选)
你可以将背离评分加入绘图配置,方便可视化观察:
```python
plot_config = {
"main_plot": {},
"subplots": {
"Signals": {
"enter_long": {"color": "green"},
"exit_long": {"color": "red"}
},
"FreqAI Predictions": {
"&-trend_strength": {"color": "blue"},
"&-volatility_forecast": {"color": "orange"},
"&-divergence_score": {"color": "purple"}
}
}
}
```
---
## ✅ 总结改进点
| 改进项 | 描述 |
|--------|------|
| ✅ `&-divergence_score` 改为连续值 | 更适合回归模型学习 |
| ✅ 移除所有离散值列 | 如 `&-market_condition` |
| ✅ 使用 `LightGBMMultiTargetRegressor` | 同时预测多个连续目标 |
| ✅ 在策略中使用背离评分进行交易决策 | 提高反转识别能力 |
---
## ✅ 下一步建议
你可以:
- 使用 `freqtrade plot-dataframe` 查看背离信号是否合理
- 使用 `freqtrade backtesting` 测试新策略表现
- 使用 `freqtrade hyperopt` 对背离阈值进行优化
---
如果你希望我帮你生成完整的策略文件,并提供对应的 `config.json` 示例,请告诉我 👇 我可以一步步帮你完成。
freqtrade plot-dataframe --strategy DivergenceRegressionStrategy \
--timerange=20250501-20250510 \
--timeframe=5m \
--exchange=binance \
--pair=ETH/USDT