alphax/tests/test_pa_recency.py
2026-05-13 22:49:47 +08:00

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