# scratch/test_patterns.py import sys import os # 将 backend 目录添加到 sys.path sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'backend'))) from app.data_manager import fetch_and_prepare_data from app.patterns import analyze_patterns if __name__ == "__main__": print("正在拉取 TSLA 数据来测试形态检测逻辑...") try: df = fetch_and_prepare_data("TSLA", period="5d") df_patterns = analyze_patterns(df) # 统计检测到的形态 hammers = df_patterns[df_patterns['Pattern_Hammer']].index shooting_stars = df_patterns[df_patterns['Pattern_Shooting_Star']].index bullish_eng = df_patterns[df_patterns['Pattern_Bullish_Engulfing']].index bearish_eng = df_patterns[df_patterns['Pattern_Bearish_Engulfing']].index m_tops = df_patterns[df_patterns['Pattern_M_Top']].index w_bottoms = df_patterns[df_patterns['Pattern_W_Bottom']].index print("\n形态检测统计结果:") print(f" Hammer (锤子): {len(hammers)} 个") print(f" Shooting Star (射击之星): {len(shooting_stars)} 个") print(f" Bullish Engulfing (阳包阴): {len(bullish_eng)} 个") print(f" Bearish Engulfing (阴包阳): {len(bearish_eng)} 个") print(f" M-Top (双顶): {len(m_tops)} 个") print(f" W-Bottom (双底): {len(w_bottoms)} 个") if len(m_tops) > 0: print("\n双顶 M-Top 触发时刻样例:") for t in m_tops[:3]: print(f" {t} | 颈线价格: {df_patterns.loc[t, 'M_Neckline']:.2f} | 收盘价: {df_patterns.loc[t, 'Close']:.2f}") if len(w_bottoms) > 0: print("\n双底 W-Bottom 触发时刻样例:") for t in w_bottoms[:3]: print(f" {t} | 颈线价格: {df_patterns.loc[t, 'W_Neckline']:.2f} | 收盘价: {df_patterns.loc[t, 'Close']:.2f}") except Exception as e: print(f"测试出错: {e}") import traceback traceback.print_exc()