""" 测试重命名后的API是否正常工作 """ import numpy as np from converging_triangle import ( calc_geometry_score, calc_activity_score, calc_breakout_strength, ) def test_geometry_score(): """测试形态规则度计算""" pivot_indices = np.array([0, 10, 20, 30]) pivot_values = np.array([100.0, 95.0, 90.0, 85.0]) slope = -0.5 intercept = 100.0 score = calc_geometry_score(pivot_indices, pivot_values, slope, intercept) print(f"✅ 形态规则度计算成功: {score:.4f}") assert 0 <= score <= 1, "分数应在 0~1 之间" return score def test_activity_score(): """测试价格活跃度计算""" high = np.array([105, 102, 100, 98, 96, 94, 92, 90, 88, 86]) low = np.array([95, 92, 90, 88, 86, 84, 82, 80, 78, 76]) upper_slope = -1.0 upper_intercept = 105.0 lower_slope = -1.0 lower_intercept = 95.0 score = calc_activity_score(high, low, upper_slope, upper_intercept, lower_slope, lower_intercept, 0, 9) print(f"✅ 价格活跃度计算成功: {score:.4f}") assert 0 <= score <= 1, "分数应在 0~1 之间" return score def test_breakout_strength(): """测试突破强度计算(使用新的参数名)""" geometry_score = 0.8 activity_score = 0.7 strength_up, strength_down, price_up, price_down, conv, vol, geom, act = \ calc_breakout_strength( close=105.0, upper_line=100.0, lower_line=90.0, volume_ratio=1.5, width_ratio=0.3, geometry_score=geometry_score, activity_score=activity_score, ) print(f"✅ 突破强度计算成功:") print(f" - 向上强度: {strength_up:.4f}") print(f" - 形态规则度: {geom:.4f}") print(f" - 价格活跃度: {act:.4f}") assert 0 <= strength_up <= 1, "强度应在 0~1 之间" assert abs(geom - geometry_score) < 0.01, "形态规则度应正确传递" assert abs(act - activity_score) < 0.01, "价格活跃度应正确传递" return strength_up, strength_down def test_imports(): """测试新命名的导入""" try: from converging_triangle import calc_geometry_score, calc_activity_score from converging_triangle_optimized import ( calc_geometry_score_optimized, calc_activity_score_optimized, ) print("✅ 所有函数导入成功") return True except ImportError as e: print(f"❌ 导入失败: {e}") return False def test_dataclass_fields(): """测试数据类字段重命名""" from converging_triangle import ConvergingTriangleResult from triangle_detector_api import StrengthComponents # 检查 ConvergingTriangleResult 字段 result = ConvergingTriangleResult() assert hasattr(result, 'geometry_score'), "应有 geometry_score 字段" assert hasattr(result, 'activity_score'), "应有 activity_score 字段" assert not hasattr(result, 'fitting_score'), "不应有旧的 fitting_score 字段" assert not hasattr(result, 'boundary_utilization'), "不应有旧的 boundary_utilization 字段" print("✅ ConvergingTriangleResult 字段正确") # 检查 StrengthComponents 字段 comp = StrengthComponents( price_score=0.5, convergence_score=0.6, volume_score=0.4, geometry_score=0.7, activity_score=0.8, ) assert comp.geometry_score == 0.7, "geometry_score 应正确设置" assert comp.activity_score == 0.8, "activity_score 应正确设置" print("✅ StrengthComponents 字段正确") return True if __name__ == "__main__": print("=" * 60) print("测试重命名后的API") print("=" * 60) try: # 1. 测试导入 print("\n[1/5] 测试函数导入...") test_imports() # 2. 测试数据类字段 print("\n[2/5] 测试数据类字段...") test_dataclass_fields() # 3. 测试形态规则度 print("\n[3/5] 测试形态规则度计算...") test_geometry_score() # 4. 测试价格活跃度 print("\n[4/5] 测试价格活跃度计算...") test_activity_score() # 5. 测试突破强度 print("\n[5/5] 测试突破强度计算...") test_breakout_strength() print("\n" + "=" * 60) print("✅ 所有测试通过!重命名成功!") print("=" * 60) except Exception as e: print("\n" + "=" * 60) print(f"❌ 测试失败: {e}") print("=" * 60) import traceback traceback.print_exc()