修复趋势突破
This commit is contained in:
@@ -49,6 +49,34 @@ class TestKeyGate(unittest.TestCase):
|
||||
self.assertTrue(checks["amp_ok"])
|
||||
self.assertAlmostEqual(checks["breach_pct"], (83.28 - 83.18) / 83.28 * 100, places=4)
|
||||
|
||||
def test_trend_breach_wider_max_passes(self):
|
||||
"""趋势突破:越过 1% 在 1.5% 上限内应通过幅度门控。"""
|
||||
rows = _history(22, vol=40000.0)
|
||||
# lower 83.28, close 82.45 → 越过约 0.996%
|
||||
rows.append(_row(1, 83.0, 83.5, 82.3, 82.45, 76791.0))
|
||||
rows.append(_row(2, 82.4, 82.5, 82.2, 82.30, 50000.0))
|
||||
checks = key_hard_checks_from_rows(
|
||||
rows,
|
||||
direction="short",
|
||||
upper=87.8,
|
||||
lower=83.28,
|
||||
breakout_amp_max_pct=1.5,
|
||||
volume_rank=3,
|
||||
volume_rank_total=721,
|
||||
)
|
||||
self.assertTrue(checks["amp_ok"])
|
||||
self.assertFalse(
|
||||
key_hard_checks_from_rows(
|
||||
rows,
|
||||
direction="short",
|
||||
upper=87.8,
|
||||
lower=83.28,
|
||||
breakout_amp_max_pct=0.5,
|
||||
volume_rank=3,
|
||||
volume_rank_total=721,
|
||||
)["amp_ok"]
|
||||
)
|
||||
|
||||
def test_trend_short_sl_uses_breakout_high(self):
|
||||
rows = _history(22, vol=40000.0)
|
||||
br_hi = 83.55
|
||||
|
||||
@@ -2,7 +2,13 @@ from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from app.key_sl_tp import calc_planned_rr, normalize_sl_tp_mode, plan_key_sl_tp, stop_outside_pct_for_mode
|
||||
from app.key_sl_tp import (
|
||||
breakout_amp_max_for_mode,
|
||||
calc_planned_rr,
|
||||
normalize_sl_tp_mode,
|
||||
plan_key_sl_tp,
|
||||
stop_outside_pct_for_mode,
|
||||
)
|
||||
|
||||
|
||||
class TestKeySlTp(unittest.TestCase):
|
||||
@@ -62,6 +68,10 @@ class TestKeySlTp(unittest.TestCase):
|
||||
self.assertEqual(stop_outside_pct_for_mode("trend_manual"), 1.0)
|
||||
self.assertEqual(normalize_sl_tp_mode("box_1p5"), "standard")
|
||||
|
||||
def test_breakout_amp_max_for_mode(self):
|
||||
self.assertEqual(breakout_amp_max_for_mode("standard", standard_max_pct=0.5, trend_max_pct=1.5), 0.5)
|
||||
self.assertEqual(breakout_amp_max_for_mode("trend_manual", standard_max_pct=0.5, trend_max_pct=1.5), 1.5)
|
||||
|
||||
def test_rr(self):
|
||||
rr = calc_planned_rr("long", 100.0, 98.0, 104.0)
|
||||
self.assertAlmostEqual(rr, 2.0, places=4)
|
||||
|
||||
Reference in New Issue
Block a user