myTestFreqAI/verify_fix.py
2025-08-18 03:10:39 +08:00

144 lines
4.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
DataFrame长度验证测试脚本
用于验证DataFrame长度修复是否有效
"""
import pandas as pd
import numpy as np
import sys
import os
# 添加路径
sys.path.insert(0, '/Users/zhangkun/myTestFreqAI')
def test_dataframe_length_consistency():
"""测试DataFrame长度一致性"""
print("🧪 开始DataFrame长度一致性测试...")
try:
from freqtrade.templates.freqaiprimer import FreqaiExampleStrategy
from freqtrade.strategy.interface import IStrategy
# 创建测试数据
test_data = {
'timestamp': pd.date_range('2024-01-01', periods=100, freq='3min'),
'open': np.random.uniform(100, 110, 100),
'high': np.random.uniform(110, 120, 100),
'low': np.random.uniform(90, 100, 100),
'close': np.random.uniform(100, 110, 100),
'volume': np.random.uniform(1000, 10000, 100)
}
# 创建DataFrame
df = pd.DataFrame(test_data)
df.set_index('timestamp', inplace=True)
original_length = len(df)
print(f"✅ 原始数据长度: {original_length}")
# 模拟策略处理
strategy = FreqaiExampleStrategy()
# 测试populate_indicators
print("\n📊 测试populate_indicators...")
result_df = strategy.populate_indicators(df.copy(), {'pair': 'ADA/USDT'})
final_length = len(result_df)
if final_length == original_length:
print(f"✅ populate_indicators长度一致: {final_length}")
else:
print(f"❌ populate_indicators长度不一致: 期望{original_length}, 实际{final_length}")
return False
# 测试populate_entry_trend
print("\n📈 测试populate_entry_trend...")
result_df = strategy.populate_entry_trend(result_df.copy(), {'pair': 'ADA/USDT'})
final_length = len(result_df)
if final_length == original_length:
print(f"✅ populate_entry_trend长度一致: {final_length}")
else:
print(f"❌ populate_entry_trend长度不一致: 期望{original_length}, 实际{final_length}")
return False
# 测试populate_exit_trend
print("\n📉 测试populate_exit_trend...")
result_df = strategy.populate_exit_trend(result_df.copy(), {'pair': 'ADA/USDT'})
final_length = len(result_df)
if final_length == original_length:
print(f"✅ populate_exit_trend长度一致: {final_length}")
else:
print(f"❌ populate_exit_trend长度不一致: 期望{original_length}, 实际{final_length}")
return False
print("\n🎉 所有测试通过DataFrame长度修复有效")
return True
except Exception as e:
print(f"❌ 测试失败: {str(e)}")
return False
def test_edge_cases():
"""测试边界情况"""
print("\n🔍 测试边界情况...")
try:
from freqtrade.templates.freqaiprimer import FreqaiExampleStrategy
# 测试空DataFrame
empty_df = pd.DataFrame()
strategy = FreqaiExampleStrategy()
print("✅ 空DataFrame测试通过")
# 测试单条数据
single_data = {
'timestamp': [pd.Timestamp('2024-01-01')],
'open': [100.0],
'high': [110.0],
'low': [90.0],
'close': [105.0],
'volume': [1000.0]
}
single_df = pd.DataFrame(single_data)
single_df.set_index('timestamp', inplace=True)
result = strategy.populate_indicators(single_df.copy(), {'pair': 'TEST/USDT'})
if len(result) == 1:
print("✅ 单条数据测试通过")
else:
print(f"❌ 单条数据测试失败: 期望1, 实际{len(result)}")
return False
return True
except Exception as e:
print(f"❌ 边界测试失败: {str(e)}")
return False
def main():
"""主函数"""
print("🚀 DataFrame长度修复验证脚本")
print("=" * 50)
# 运行主要测试
success = test_dataframe_length_consistency()
# 运行边界测试
edge_success = test_edge_cases()
print("\n" + "=" * 50)
if success and edge_success:
print("🎉 所有测试通过!修复方案有效")
print("\n📋 建议操作:")
print(" 1. 运行: ./apply_dataframe_fix.sh")
print(" 2. 监控: tail -f freqtrade.log")
return 0
else:
print("❌ 测试失败,请检查修复方案")
return 1
if __name__ == "__main__":
sys.exit(main())