mirror of
https://ghfast.top/https://github.com/aeroxw/easy_tdx_max.git
synced 2026-09-12 13:24:18 +08:00
230 lines
6.9 KiB
Python
230 lines
6.9 KiB
Python
"""策略参数寻优预设网格。
|
||
|
||
每个内置策略 1-2 个关键参数的合理取值列表,供:
|
||
|
||
1. Web UI 参数寻优页(``ParamGridPicker``)切换策略时自动填充——用户开箱即用,
|
||
仍可编辑/取消勾选。
|
||
2. 「一键寻优所有策略」(``/backtest/optimize-all/run/async``)逐策略做网格
|
||
寻优再全局排名。
|
||
|
||
约束:单策略笛卡尔积 ≤ 200(``ParamGridOptimizer.MAX_GRID_POINTS``)。行尾注释
|
||
标注该策略的网格点数。修改本文件即同步生效,无需重启策略注册表。
|
||
|
||
新增策略时:在 :data:`STRATEGY_PRESETS` 增加同名 key 即可;未登记的策略在
|
||
「一键寻优」中会被跳过并记录 warning。
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from typing import Any
|
||
|
||
# 策略名 → {参数名: 取值列表}
|
||
STRATEGY_PRESETS: dict[str, dict[str, list[Any]]] = {
|
||
# ── 均线类 ──────────────────────────────────────────────────────────────
|
||
"ma_cross": {
|
||
# 快线 < 慢线才有意义;笛卡尔积去重快≥慢的无效组合后约 30+
|
||
"fast": [5, 10, 15, 20, 30, 60],
|
||
"slow": [10, 20, 30, 60, 120, 250],
|
||
}, # 36
|
||
"ema_cross": {
|
||
"fast": [5, 10, 12, 20],
|
||
"slow": [20, 26, 30, 60],
|
||
}, # 16
|
||
"triple_ma": {
|
||
"short": [5, 10, 15],
|
||
"long": [60, 120, 250],
|
||
}, # 9(mid 用默认 20)
|
||
"bbi": {
|
||
"m1": [3, 6],
|
||
"m4": [20, 30, 50],
|
||
}, # 6
|
||
# ── 通道/突破类 ─────────────────────────────────────────────────────────
|
||
"boll_breakout": {
|
||
"n": [10, 15, 20, 30],
|
||
"p": [1.5, 2.0, 2.5, 3.0],
|
||
}, # 16
|
||
"donchian": {
|
||
"n": [10, 15, 20, 30, 40, 55],
|
||
}, # 6
|
||
"keltner": {
|
||
"n": [10, 15, 20, 30],
|
||
"m": [7, 10, 14, 20],
|
||
}, # 16
|
||
"atr_breakout": {
|
||
"n_ma": [10, 20],
|
||
"k": [1.5, 2.0, 2.5, 3.0],
|
||
}, # 8
|
||
# ── 振荡/反转类 ─────────────────────────────────────────────────────────
|
||
"macd": {
|
||
"short": [8, 10, 12, 15],
|
||
"long": [20, 26, 30, 40],
|
||
}, # 16
|
||
"rsi_reversal": {
|
||
"n": [7, 14, 21],
|
||
"oversold": [20, 25, 30],
|
||
}, # 9
|
||
"kdj_cross": {
|
||
"n": [5, 9, 14, 18, 21],
|
||
}, # 5
|
||
"cci": {
|
||
"n": [14, 20],
|
||
"oversold": [-150, -100, -50],
|
||
}, # 6
|
||
"wr_reversal": {
|
||
"n": [7, 14],
|
||
"oversold": [-90, -80, -70],
|
||
}, # 6
|
||
"bias_reversal": {
|
||
"n": [6, 12],
|
||
"threshold": [3.0, 5.0, 7.0, 10.0],
|
||
}, # 8
|
||
# ── 趋向/平滑类 ─────────────────────────────────────────────────────────
|
||
"dmi": {
|
||
"m1": [14, 20],
|
||
"m2": [6, 10, 14],
|
||
}, # 6
|
||
"trix": {
|
||
"m1": [12, 18],
|
||
"m2": [12, 20, 30],
|
||
}, # 6
|
||
"emv": {
|
||
"n": [10, 14, 20, 28],
|
||
}, # 4
|
||
"dpo": {
|
||
"m1": [15, 20, 30],
|
||
}, # 3
|
||
# ── 分水岭类 ─────────────────────────────────────────────────────────────
|
||
"fsl": {
|
||
# capital 仅作粗档扫描(1千万/1亿/10亿股),覆盖小盘→大盘
|
||
"capital": [1e7, 1e8, 1e9, 1e10],
|
||
}, # 4
|
||
# ── V1.30.2 存量指标补齐 ────────────────────────────────────────────────
|
||
"psy_reversal": {
|
||
"n": [12, 20],
|
||
"oversold": [20, 25, 30],
|
||
}, # 6
|
||
"mtm_cross": {
|
||
"n": [6, 12, 24],
|
||
}, # 3
|
||
"roc_zero": {
|
||
"n": [6, 12, 24],
|
||
}, # 3
|
||
"expma_cross": {
|
||
"n1": [5, 10, 12],
|
||
"n2": [26, 50, 60],
|
||
}, # 9(n1<n2 全部有效)
|
||
"dfma_cross": {
|
||
"n1": [5, 10],
|
||
"n2": [30, 50],
|
||
}, # 4
|
||
"cr_reversal": {
|
||
"n": [20, 26],
|
||
"oversold": [30, 40],
|
||
}, # 4
|
||
"xsii_breakout": {
|
||
"n": [80, 102, 120],
|
||
}, # 3
|
||
"obv_cross": {
|
||
"m": [10, 20, 30, 60],
|
||
}, # 4
|
||
"vr_reversal": {
|
||
"m1": [20, 26],
|
||
"oversold": [40, 50],
|
||
}, # 4
|
||
"mass_cross": {
|
||
"n2": [20, 25, 30],
|
||
}, # 3(n1 用默认 9)
|
||
"mfi_reversal": {
|
||
"n": [14, 20],
|
||
"oversold": [15, 20],
|
||
}, # 4
|
||
"brar_reversal": {
|
||
"m1": [26],
|
||
"oversold": [30, 40, 50],
|
||
}, # 3
|
||
"asi_cross": {
|
||
"m2": [7, 10, 14],
|
||
}, # 3(m1 用默认 26)
|
||
"zhuoyao_trend": {
|
||
"n2": [40, 60, 90],
|
||
"n3": [10, 20],
|
||
}, # 6(n3<n2 全部有效)
|
||
"bias_signal_cross": {
|
||
"p": [5, 10],
|
||
"m": [20, 30, 60],
|
||
}, # 6
|
||
"sar_follow": {
|
||
"af_step": [0.01, 0.02, 0.03],
|
||
}, # 3
|
||
"vwap_cross": {
|
||
"n": [10, 20, 30],
|
||
}, # 3
|
||
"aroon_cross": {
|
||
"n": [14, 21, 25],
|
||
}, # 3
|
||
"fk_reversal": {}, # 无参数策略:单点(默认参数)
|
||
# ── V1.30.2 新指标首发 ──────────────────────────────────────────────────
|
||
"supertrend": {
|
||
"n": [7, 10, 14],
|
||
"m": [2.0, 3.0, 4.0],
|
||
}, # 9
|
||
"kama_cross": {
|
||
"n": [10, 20, 30],
|
||
}, # 3(fast/slow 用默认 2/30)
|
||
"hma_cross": {
|
||
"fast": [10, 16],
|
||
"slow": [30, 50],
|
||
}, # 4
|
||
"chandelier": {
|
||
"n": [15, 22, 30],
|
||
"k": [2.5, 3.0],
|
||
}, # 6(m 用默认 22)
|
||
"ichimoku_cross": {
|
||
"p1": [9, 20],
|
||
"p2": [26, 40],
|
||
}, # 4(p1<p2<p3=52 全部有效)
|
||
"uos_reversal": {
|
||
"oversold": [25, 30, 35],
|
||
}, # 3(周期用默认 7/14/28)
|
||
"cmo_reversal": {
|
||
"n": [14, 20],
|
||
"threshold": [40.0, 50.0, 60.0],
|
||
}, # 6
|
||
"tsi_cross": {
|
||
"r": [13, 25],
|
||
"m": [7, 13],
|
||
}, # 4(s 用默认 13)
|
||
"fisher_cross": {
|
||
"n": [5, 9, 13],
|
||
}, # 3
|
||
"squeeze_breakout": {
|
||
"kc": [1.2, 1.5, 2.0],
|
||
}, # 3(n=20/bb=2.0 用默认)
|
||
"chop_trend": {
|
||
"n_ma": [20, 30],
|
||
"trend_th": [35.0, 38.2],
|
||
}, # 4
|
||
"ad_cross": {
|
||
"m": [10, 20, 30, 60],
|
||
}, # 4
|
||
"cmf_zero": {
|
||
"n": [14, 20, 30],
|
||
}, # 3
|
||
"efi_zero": {
|
||
"n": [10, 13, 20],
|
||
}, # 3
|
||
"bbp_reversal": {
|
||
"n": [10, 20],
|
||
"p": [1.5, 2.0],
|
||
}, # 4
|
||
"bbw_squeeze": {
|
||
"n": [20, 30],
|
||
"n_ma": [20, 30],
|
||
}, # 4
|
||
}
|
||
|
||
|
||
def get_preset(strategy_name: str) -> dict[str, list[Any]]:
|
||
"""返回某策略的预设网格;未登记返回空 dict。"""
|
||
return STRATEGY_PRESETS.get(strategy_name, {})
|