Separate chart S/R from gate target ladder
This commit is contained in:
@@ -197,17 +197,25 @@ async def test_property_zero_candidates_produce_no_setup(
|
||||
bars = _make_ohlcv_bars(ticker.id, num_bars=20, base_close=100.0)
|
||||
session.add_all(bars)
|
||||
|
||||
gate_levels = []
|
||||
for lv_data in scenario.get("levels", []):
|
||||
session.add(SRLevel(
|
||||
level = SRLevel(
|
||||
ticker_id=ticker.id,
|
||||
price_level=lv_data["price"],
|
||||
type=lv_data["type"],
|
||||
strength=lv_data["strength"],
|
||||
detection_method="volume_profile",
|
||||
))
|
||||
)
|
||||
session.add(level)
|
||||
gate_levels.append(level)
|
||||
await session.commit()
|
||||
|
||||
setups = await scan_ticker(session, "PRSV0", rr_threshold=1.5)
|
||||
setups = await scan_ticker(
|
||||
session,
|
||||
"PRSV0",
|
||||
rr_threshold=1.5,
|
||||
gate_levels_override=gate_levels,
|
||||
)
|
||||
|
||||
assert setups == [], (
|
||||
f"Expected no setups for zero-candidate scenario "
|
||||
@@ -247,16 +255,22 @@ async def test_property_single_candidate_selected_unchanged(
|
||||
session.add_all(bars)
|
||||
|
||||
lv = scenario["level"]
|
||||
session.add(SRLevel(
|
||||
level = SRLevel(
|
||||
ticker_id=ticker.id,
|
||||
price_level=lv["price"],
|
||||
type=lv["type"],
|
||||
strength=lv["strength"],
|
||||
detection_method="volume_profile",
|
||||
))
|
||||
)
|
||||
session.add(level)
|
||||
await session.commit()
|
||||
|
||||
setups = await scan_ticker(session, "PRSV1", rr_threshold=1.5)
|
||||
setups = await scan_ticker(
|
||||
session,
|
||||
"PRSV1",
|
||||
rr_threshold=1.5,
|
||||
gate_levels_override=[level],
|
||||
)
|
||||
|
||||
direction = scenario["direction"]
|
||||
dir_setups = [s for s in setups if s.direction == direction]
|
||||
@@ -292,7 +306,12 @@ async def test_no_sr_levels_produces_no_setup(scan_session: AsyncSession):
|
||||
scan_session.add_all(bars)
|
||||
await scan_session.flush()
|
||||
|
||||
setups = await scan_ticker(scan_session, "NOSRL", rr_threshold=1.5)
|
||||
setups = await scan_ticker(
|
||||
scan_session,
|
||||
"NOSRL",
|
||||
rr_threshold=1.5,
|
||||
gate_levels_override=[],
|
||||
)
|
||||
|
||||
assert setups == [], (
|
||||
f"Expected no setups when no SR levels exist, got {len(setups)}"
|
||||
@@ -329,7 +348,12 @@ async def test_single_resistance_above_threshold_selected(scan_session: AsyncSes
|
||||
scan_session.add(level)
|
||||
await scan_session.flush()
|
||||
|
||||
setups = await scan_ticker(scan_session, "SINGL", rr_threshold=1.5)
|
||||
setups = await scan_ticker(
|
||||
scan_session,
|
||||
"SINGL",
|
||||
rr_threshold=1.5,
|
||||
gate_levels_override=[level],
|
||||
)
|
||||
|
||||
long_setups = [s for s in setups if s.direction == "long"]
|
||||
assert len(long_setups) == 1, (
|
||||
@@ -366,7 +390,12 @@ async def test_single_support_below_threshold_selected(scan_session: AsyncSessio
|
||||
scan_session.add(level)
|
||||
await scan_session.flush()
|
||||
|
||||
setups = await scan_ticker(scan_session, "SINGS", rr_threshold=1.5)
|
||||
setups = await scan_ticker(
|
||||
scan_session,
|
||||
"SINGS",
|
||||
rr_threshold=1.5,
|
||||
gate_levels_override=[level],
|
||||
)
|
||||
|
||||
short_setups = [s for s in setups if s.direction == "short"]
|
||||
assert len(short_setups) == 1, (
|
||||
|
||||
Reference in New Issue
Block a user