38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
import os
|
|
import sys
|
|
|
|
import pandas as pd
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
|
|
|
|
from app.core.pa_engine import calc_atr, classify_candles, detect_ignition_point
|
|
|
|
|
|
def _ignition_df(stale_age_bars=6):
|
|
rows = []
|
|
base = pd.Timestamp('2026-05-10 00:00:00')
|
|
for i in range(40):
|
|
rows.append({
|
|
'time': base + pd.Timedelta(hours=i),
|
|
'open': 1.0,
|
|
'high': 1.012,
|
|
'low': 0.988,
|
|
'close': 1.001,
|
|
'volume': 100.0,
|
|
})
|
|
idx = len(rows) - 1 - stale_age_bars
|
|
for j in [idx - 2, idx - 1]:
|
|
rows[j].update({'open': 1.0, 'high': 1.003, 'low': 0.997, 'close': 1.0005})
|
|
rows[idx].update({'open': 1.0, 'high': 1.18, 'low': 0.995, 'close': 1.16, 'volume': 1000.0})
|
|
return pd.DataFrame(rows)
|
|
|
|
|
|
def test_ignition_point_has_age_bars_for_recency_gate():
|
|
df = _ignition_df(stale_age_bars=6)
|
|
atr = calc_atr(df, 14)
|
|
candles = classify_candles(df, atr)
|
|
ignitions = detect_ignition_point(candles, df, atr)
|
|
assert ignitions
|
|
assert any('age_bars' in ig for ig in ignitions)
|
|
assert max(ig['age_bars'] for ig in ignitions) >= 6
|