import os import sys import pandas as pd sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) from app.services.altcoin_screener import detect_volume_price_fly from app.services.altcoin_confirm import detect_volume_price_fly_1h def _sample_df(stale_age_hours=9): rows = [] base_time = pd.Timestamp('2026-05-10 00:00:00') # 12根 recent + 前20均量所需历史;默认低量小阳/小阴 for i in range(32): rows.append({ 'time': base_time + pd.Timedelta(hours=i), 'open': 1.0, 'high': 1.01, 'low': 0.99, 'close': 1.002, 'volume': 100.0, }) # recent 中距离最新 stale_age_hours 的那根制造放量大阳线 target_idx = len(rows) - 1 - stale_age_hours rows[target_idx].update({'open': 1.0, 'high': 1.3, 'low': 0.99, 'close': 1.25, 'volume': 2000.0}) return pd.DataFrame(rows) def test_stale_1h_volume_price_fly_not_counted_as_current_signal(): df = _sample_df(stale_age_hours=9) result = detect_volume_price_fly(df) assert result['vp_fly_count'] == 0 assert result['stale_vp_fly_count'] >= 1 assert result['stale_vp_fly_details'][0]['age_hours'] == 9 def test_confirm_layer_stale_volume_price_fly_not_confirmed(): df = _sample_df(stale_age_hours=9) result = detect_volume_price_fly_1h(df) assert result['vp_fly_count'] == 0 assert result['stale_vp_fly_count'] >= 1 def test_recent_1h_volume_price_fly_is_counted(): df = _sample_df(stale_age_hours=1) result = detect_volume_price_fly(df) assert result['vp_fly_count'] == 1 assert result['vp_fly_details'][0]['age_hours'] == 1