Add V6 stock strategy analysis and JD fapai scrape skill
- Add V6 strategy section to us-stock-trading-evaluation: fixes indicator dilution, SMA period hardcode, and stoploss tier issues; includes hyperopt results and backtest comparison - Add jd-fapai-scrape skill: Playwright-based scraper for JD judicial auction properties with incremental update support Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
e20b851dd8
commit
5f080a7842
@@ -593,6 +593,95 @@ OKX 现货 API ◄──── freqtrade 执行下单 ◄───────
|
||||
|
||||
---
|
||||
|
||||
### 4.9 V6 策略:修代码硬伤 + 调止损 + Hyperopt + 回测验证
|
||||
|
||||
V5-Stock 跑通后深度分析发现 3 个问题,V6 针对性修复并跑 hyperopt 验证。
|
||||
|
||||
#### 4.9.1 三个问题与 V6 修复
|
||||
|
||||
**问题 1:指标被非开盘 K 线稀释(代码硬伤)**
|
||||
|
||||
V5-Stock 的 `populate_indicators` 在完整 24/7 dataframe 上计算 ATR/ADX/SMA/通道。OKX 代币化股票 96 根/天 K 线中仅 ~19% 在美股交易时段(9:30-16:00 ET),62% 周末 K 线近似 0 波动。ATR 被稀释 ~16%,通道高低点被平盘 K 线拉偏。
|
||||
|
||||
V6 修复:在 `populate_indicators` 中提取交易时段子集 `mh`,仅在 `mh` 上计算全部指标,然后用 `reindex(dataframe.index, method='ffill')` forward-fill 回完整 dataframe。实测验证:ATR 从稀释值恢复 1.16x,无 NaN 结构问题。Freqtrade 的 `StrategyResultValidator` 要求返回的 dataframe 行数/末行日期/末行收盘不变,此方法保留所有原始行。
|
||||
|
||||
**问题 2:SMA 周期 `* 96` 硬编码**
|
||||
|
||||
V5 原版 `ma_span_long_days * 96` 假设 96 根/天全是有效 K 线(加密 24/7 语义)。代币化股票仅 26 根/天是交易时段。V6 改为 `* 26`(`MARKET_CANDLES_PER_DAY = 26`),`ma_span_long_days=2` → 52 根交易时段 K 线 = 2 个交易日,与 V5 加密版语义一致。
|
||||
|
||||
**问题 3:止损阶梯为加密尺度**
|
||||
|
||||
V5 的 `custom_stoploss` 利润阈值 5%/15%/30% 适合加密 10x 杠杆。股票 1x 下单笔 30% 利润极罕见。V6 下调到 3%/8%/15%(保本+0.5%/允许 5% 回撤/允许 8% 回撤)。
|
||||
|
||||
#### 4.9.2 V6 参数搜索范围
|
||||
|
||||
| 参数 | V5-Stock 范围 | V6 范围 | 原因 |
|
||||
|------|-------------|---------|------|
|
||||
| `up_line_span` | 100-400 | 50-150 | 交易时段 K 线,50-150 = 2-6 交易日 |
|
||||
| `buy_stop_profit_span` | 50-200 | 20-80 | 1-3 交易日 |
|
||||
| `ma_span_long_days` | 1-5 | 1-5 | ×26 后 = 26-130 |
|
||||
| `adx_threshold` | 15-40 | 15-35 | 股票 ADX 常态 15-30 |
|
||||
| `up_line_offset` | -0.2~0.4 | -0.3~0.3 | 真实 ATR 下范围居中 |
|
||||
| `buy_stop_profit_offset` | -0.2~0.2 | -0.2~0.4 | 同上 |
|
||||
| `max_slippage` | 0.005-0.03 | 0.005-0.03 | 不变 |
|
||||
|
||||
`startup_candle_count` 600 → 800(覆盖 up_line_span=150 的 ~781 根预热,剩余 ~21 交易日用于信号生成)。
|
||||
|
||||
#### 4.9.3 三方回测对比
|
||||
|
||||
回测区间:2026-07-24 ~ 2026-08-23(29 天,~21 个有效交易日)。24 只标的,XSNOW/XSMH 因数据不足被跳过。
|
||||
|
||||
| 维度 | V5-Stock(旧代码+旧参数) | V6 默认(新代码+默认参数) | V6 优化(新代码+Hyperopt 参数) |
|
||||
|------|--------------------------|---------------------------|-------------------------------|
|
||||
| 交易数 | 32 | 33 | 51 |
|
||||
| 收益率 | +4.74% | +1.56% | -1.14% |
|
||||
| 胜率 | 43.8% | 57.6% | 62.7% |
|
||||
| Sharpe(closed) | 2.35 | 1.46 | -1.59 |
|
||||
| 最大回撤 | 4.71% | 3.74% | 5.73% |
|
||||
| 被拒入场信号 | 119 | 77 | 21 |
|
||||
| 平均持仓 | 3d 9h | 2d 20h | 16h 28m |
|
||||
|
||||
**Hyperopt 最优参数(Epoch 295/300,Objective=0.05952)**
|
||||
|
||||
```python
|
||||
# Buy
|
||||
adx_threshold = 25, buy_stop_profit_span = 38, ma_span_long_days = 5
|
||||
max_slippage = 0.027, up_line_offset = 0.26, up_line_span = 104
|
||||
# Sell
|
||||
buy_stop_profit_offset = 0.17
|
||||
# ROI(hyperopt 新发现,V5/V5-Stock 原为 {"0": 100} 禁用)
|
||||
{"0": 0.257, "89": 0.063, "255": 0.018, "545": 0}
|
||||
# Stoploss
|
||||
-0.084
|
||||
```
|
||||
|
||||
#### 4.9.4 分析与结论
|
||||
|
||||
**V6 代码改进有效但未带来收益提升:**
|
||||
- V6 默认参数 vs V5-Stock:胜率从 43.8% → 57.6%,回撤从 4.71% → 3.74%,但收益从 +4.74% → +1.56%。指标修复(ATR 恢复真实水平)和止损阶梯下调改善了风险控制,但默认参数(`up_line_span=80, adx=20, up_line_offset=0.0`)较 V5-Stock 默认值(`340, 25, -0.18`)更保守,入场更少、利润更小。
|
||||
- 交易时段指标计算确实生效——被拒信号从 119 降到 77(V5-Stock 拒了更多噪声信号),说明 ATR/通道基于真实交易时段波动后,`confirm_trade_entry` 的滑点检查更精准。
|
||||
|
||||
**Hyperopt 过拟合(核心问题):**
|
||||
- 300 轮 hyperopt 在 29 天数据上收敛,最优 epoch 的 Objective 从 2.57 → 0.059(持续下降,收敛正常)。
|
||||
- 但最优参数回测收益 -1.14%,远不如 V6 默认 +1.56% 和 V5-Stock +4.74%。
|
||||
- 根因:Hyperopt 找到一组高胜率(62.7%)但负期望参数。ROI 止盈(39 笔 ROI 退出,82.1% 胜率,avg +0.95%)快速锁利,但被 ROI 截断的赢家平均仅赚 0.95%,而 11 笔 channel_exit 亏损平均亏 -3.06%——盈亏比倒挂。
|
||||
- `ma_span_long_days=5`(搜索范围上限)和 `up_line_offset=0.26`(偏积极)说明 hyperopt 在小样本上过拟合到了少数大波动标的(XSOXL 亏 -2.80%,XTSM 亏 -1.00%)。
|
||||
- **结论:29 天 / ~21 个有效交易日的数据量不足以支撑可靠的 hyperopt。需要至少 3-6 个月历史数据。**
|
||||
|
||||
**配置覆盖陷阱(已修复):**
|
||||
- 初次回测 V6 优化参数时,config 的 `minimal_roi: {"0": 100}` 覆盖了 hyperopt 找到的 ROI 表,导致只有 buy/sell 参数生效(25 trades, -0.32%)。
|
||||
- Freqtrade 参数加载顺序:策略类默认 → hyperopt JSON → config 覆盖。config 中的 `minimal_roi`/`stoploss` 会覆盖 hyperopt 结果。
|
||||
- 修复:config 中改为 hyperopt 找到的值后方才生效(51 trades, -1.14%)。
|
||||
|
||||
#### 4.9.5 建议
|
||||
|
||||
1. **V6 代码保留**:指标计算修复(交易时段子集 + forward-fill)、`* 26` 修复、股票止损阶梯——这些是正确的工程改进
|
||||
2. **Hyperopt 结果暂不用**:29 天数据过拟合严重,等 OKX 积累 3-6 个月历史数据后重跑
|
||||
3. **短期用 V6 默认参数或 V5-Stock 参数**:V5-Stock 参数(`up_line_span=340, adx=25, up_line_offset=-0.18`)在当前数据上收益最高,可作为 V6 的备选参数
|
||||
4. **XSOXL 是持续性亏损标的**:在 V5-Stock、V6 默认、V6 优化三个版本中均亏损,考虑从 whitelist 移除
|
||||
|
||||
---
|
||||
|
||||
## 5. 综合推荐
|
||||
|
||||
按"聚焦策略不写框架"的目标排序:
|
||||
|
||||
Reference in New Issue
Block a user