옵투나 8방 후처리를 재탐색으로 변경하기 전전
This commit is contained in:
@@ -109,7 +109,7 @@ SCALP_GRID_AXIS_HINTS_KO: Dict[str, str] = {
|
||||
"sl_pct": "손절 %",
|
||||
"tp_pct": "익절 %",
|
||||
"tp_max_pct": "익절 상한 %",
|
||||
"drop_rate": "TRIGGER 최소 낙폭 % (시가→저점)",
|
||||
"drop_rate": "TRIGGER 최소 낙폭 %(시가→저점) — HTS scalp_re B(2~6) 안",
|
||||
"shoulder_min_high": "어깨 발동 최소 수익 %",
|
||||
"shoulder_cut_pct": "어깨 되돌림 %",
|
||||
"high_chase_thr": "고점추격 방지 (현재가/당일고가)",
|
||||
@@ -298,6 +298,25 @@ def _min_price_grid():
|
||||
return sorted(set([1000, 6000, max(1000, mp)]))
|
||||
|
||||
|
||||
# HTS scalp_re 조건 B: 시가→저가 등락률 -6%~-2% → 절대 낙폭 2%~6%.
|
||||
# TRIGGER drop_rate(최소 낙폭 %)는 방어 ON·skip_hts=false 일 때 재검 → HTS 밖 값(예 7.3)은 공집합.
|
||||
_HTS_SCALP_DROP_MIN_PCT = 2.0
|
||||
_HTS_SCALP_DROP_MAX_PCT = 6.0
|
||||
_HTS_SCALP_DROP_STEPS = (2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0)
|
||||
|
||||
|
||||
def _hts_scalp_drop_rate_grid(live_drop_pct: float, steps: Optional[Tuple[float, ...]] = None) -> List[float]:
|
||||
"""TPE/그리드용 drop_rate(%) — HTS scalp_re B 밴드(2~6) 안만. live가 밖이면 격자에 넣지 않음."""
|
||||
base = list(steps) if steps is not None else list(_HTS_SCALP_DROP_STEPS)
|
||||
try:
|
||||
v = float(live_drop_pct)
|
||||
except (TypeError, ValueError):
|
||||
return base
|
||||
if _HTS_SCALP_DROP_MIN_PCT - 1e-9 <= v <= _HTS_SCALP_DROP_MAX_PCT + 1e-9:
|
||||
return _fmerge(base, v)
|
||||
return base
|
||||
|
||||
|
||||
def _scalp_live_anchors() -> Dict[str, Any]:
|
||||
"""실매 DB 앵커 — 그리드에 반드시 포함 (단위=UI/% 표시)."""
|
||||
d = _fixed_defaults()
|
||||
@@ -309,7 +328,7 @@ def _scalp_live_anchors() -> Dict[str, Any]:
|
||||
"sl_pct": float(d.get("sl_pct") or 1.5),
|
||||
"tp_pct": float(d.get("tp_pct") or 1.5),
|
||||
"tp_max_pct": float(d.get("tp_max_pct") or 2.0),
|
||||
"drop_rate": float(d.get("drop_rate") or 1.5),
|
||||
"drop_rate": float(d.get("drop_rate") or 2.0), # HTS 밴드 하한(2%) 기본
|
||||
"shoulder_min_high": float(d.get("shoulder_min_high") or 0.5),
|
||||
"shoulder_cut_pct": float(d.get("shoulder_cut_pct") or 0.3),
|
||||
"high_chase_thr": float(d.get("high_chase_thr") or 0.96),
|
||||
@@ -378,7 +397,7 @@ def _scalp_grids():
|
||||
"tp_max_pct": _fmerge([4.0, 5.0], live["tp_max_pct"]),
|
||||
"shoulder_min_high": _fmerge([0.8, 3.0], live["shoulder_min_high"]),
|
||||
"shoulder_cut_pct": _fmerge([0.1, 0.2, 0.4], live["shoulder_cut_pct"]),
|
||||
"drop_rate": _fmerge([1.5, 3.0, 5.0], live["drop_rate"]),
|
||||
"drop_rate": _hts_scalp_drop_rate_grid(live["drop_rate"], (2.0, 3.0, 4.0, 5.0, 6.0)),
|
||||
"high_chase_thr": _fmerge([0.98, 1.0], live["high_chase_thr"]),
|
||||
"vol_mult": _fmerge([0.0, 1.2, 1.5], live["vol_mult"]),
|
||||
"require_reversal_candle": _bmerge([True, False], live["require_reversal_candle"]),
|
||||
@@ -403,11 +422,8 @@ def _scalp_grids():
|
||||
),
|
||||
"drop_rate": _parse_csv_floats(
|
||||
f"{p}TRIGGER_DROP_RATE",
|
||||
# HTS SCAN 낙폭대(~1.5~8)를 참고로 넓게 — TRIGGER 재필터 탐색용
|
||||
_fmerge(
|
||||
[0.5, 0.8, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 6.0, 8.0],
|
||||
live["drop_rate"],
|
||||
),
|
||||
# HTS scalp_re B: 시가→저가 -6%~-2% (절대 2~6). HTS 밖(7.3·8·10) 탐색 금지
|
||||
_hts_scalp_drop_rate_grid(live["drop_rate"]),
|
||||
),
|
||||
"high_chase_thr": _parse_csv_floats(
|
||||
f"{p}TRIGGER_HIGH_CHASE_THR",
|
||||
@@ -486,8 +502,8 @@ def _scalp_grids():
|
||||
"tp_max_pct": _fmerge(
|
||||
[3.0, 4.0, 5.0], live["tp_max_pct"],
|
||||
),
|
||||
"drop_rate": _fmerge(
|
||||
[1.0, 1.5, 2.5, 3.0, 5.0], live["drop_rate"],
|
||||
"drop_rate": _hts_scalp_drop_rate_grid(
|
||||
live["drop_rate"], (2.0, 2.5, 3.0, 4.0, 5.0, 6.0),
|
||||
),
|
||||
"shoulder_min_high": _fmerge(
|
||||
[0.8, 1.5, 3.0], live["shoulder_min_high"],
|
||||
@@ -533,8 +549,8 @@ def _scalp_grids():
|
||||
"tp_max_pct": _fmerge(
|
||||
[4.0, 5.0], live["tp_max_pct"],
|
||||
),
|
||||
"drop_rate": _fmerge(
|
||||
[1.5, 2.5, 3.0, 5.0], live["drop_rate"],
|
||||
"drop_rate": _hts_scalp_drop_rate_grid(
|
||||
live["drop_rate"], (2.0, 2.5, 3.0, 4.0, 5.0, 6.0),
|
||||
),
|
||||
"shoulder_min_high": _fmerge(
|
||||
[0.8, 3.0], live["shoulder_min_high"],
|
||||
@@ -588,10 +604,7 @@ def _scalp_grids():
|
||||
"tp_max_pct": _fmerge(
|
||||
[1.5, 1.8, 2.0, 2.5, 3.0, 4.0, 5.0, 6.0, 8.0], live["tp_max_pct"],
|
||||
),
|
||||
"drop_rate": _fmerge(
|
||||
[0.5, 0.8, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 6.0, 8.0, 10.0],
|
||||
live["drop_rate"],
|
||||
),
|
||||
"drop_rate": _hts_scalp_drop_rate_grid(live["drop_rate"]),
|
||||
"shoulder_min_high": _fmerge(
|
||||
[0.1, 0.2, 0.3, 0.5, 0.7, 1.0, 1.5, 2.0], live["shoulder_min_high"],
|
||||
),
|
||||
@@ -646,8 +659,8 @@ def _scalp_grids():
|
||||
"sl_pct": _fmerge([1.5, 2.0, 2.5, 3.0, 3.5], live["sl_pct"]),
|
||||
"tp_pct": _fmerge([1.5, 2.0, 2.5, 3.0, 4.0], live["tp_pct"]),
|
||||
"tp_max_pct": _fmerge([2.0, 3.0, 4.0, 5.0], live["tp_max_pct"]),
|
||||
"drop_rate": _fmerge(
|
||||
[1.0, 1.5, 2.0, 2.5, 3.0, 5.0], live["drop_rate"],
|
||||
"drop_rate": _hts_scalp_drop_rate_grid(
|
||||
live["drop_rate"], (2.0, 2.5, 3.0, 4.0, 5.0, 6.0),
|
||||
),
|
||||
"shoulder_min_high": _fmerge(
|
||||
[0.5, 0.8, 3.0], live["shoulder_min_high"],
|
||||
|
||||
Reference in New Issue
Block a user