"""测试获取2020-2023年的历史数据""" import sys import os sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from data.fetcher import BinanceDataFetcher import pandas as pd def test_historical_data(): print("="*80) print("测试Binance API历史数据获取能力") print("="*80) fetcher = BinanceDataFetcher() # 测试1: 获取2020年的数据 print("\n[测试1] 尝试获取2020年全年数据...") try: df_2020 = fetcher.fetch_ohlcv( symbol='BTC', timeframe='1h', start_date='2020-01-01', end_date='2020-12-31', use_cache=False # 不使用缓存,强制从API获取 ) print(f"✅ 成功获取2020年数据") print(f" 数据行数: {len(df_2020)}") print(f" 时间范围: {df_2020['timestamp'].min()} 至 {df_2020['timestamp'].max()}") print(f" 价格范围: ${df_2020['close'].min():,.2f} - ${df_2020['close'].max():,.2f}") except Exception as e: print(f"❌ 2020年数据获取失败: {e}") return False # 测试2: 获取2021年的数据 print("\n[测试2] 尝试获取2021年全年数据...") try: df_2021 = fetcher.fetch_ohlcv( symbol='BTC', timeframe='1h', start_date='2021-01-01', end_date='2021-12-31', use_cache=False ) print(f"✅ 成功获取2021年数据") print(f" 数据行数: {len(df_2021)}") print(f" 时间范围: {df_2021['timestamp'].min()} 至 {df_2021['timestamp'].max()}") print(f" 价格范围: ${df_2021['close'].min():,.2f} - ${df_2021['close'].max():,.2f}") except Exception as e: print(f"❌ 2021年数据获取失败: {e}") return False # 测试3: 获取2022年的数据 print("\n[测试3] 尝试获取2022年全年数据...") try: df_2022 = fetcher.fetch_ohlcv( symbol='BTC', timeframe='1h', start_date='2022-01-01', end_date='2022-12-31', use_cache=False ) print(f"✅ 成功获取2022年数据") print(f" 数据行数: {len(df_2022)}") print(f" 时间范围: {df_2022['timestamp'].min()} 至 {df_2022['timestamp'].max()}") print(f" 价格范围: ${df_2022['close'].min():,.2f} - ${df_2022['close'].max():,.2f}") except Exception as e: print(f"❌ 2022年数据获取失败: {e}") return False # 测试4: 获取2023年的数据 print("\n[测试4] 尝试获取2023年全年数据...") try: df_2023 = fetcher.fetch_ohlcv( symbol='BTC', timeframe='1h', start_date='2023-01-01', end_date='2023-12-31', use_cache=False ) print(f"✅ 成功获取2023年数据") print(f" 数据行数: {len(df_2023)}") print(f" 时间范围: {df_2023['timestamp'].min()} 至 {df_2023['timestamp'].max()}") print(f" 价格范围: ${df_2023['close'].min():,.2f} - ${df_2023['close'].max():,.2f}") except Exception as e: print(f"❌ 2023年数据获取失败: {e}") return False # 测试5: 获取完整的2020-2023年数据 print("\n[测试5] 尝试获取2020-2023年完整数据(4年)...") try: df_full = fetcher.fetch_ohlcv( symbol='BTC', timeframe='1h', start_date='2020-01-01', end_date='2023-12-31', use_cache=False ) print(f"✅ 成功获取2020-2023年完整数据") print(f" 数据行数: {len(df_full)}") print(f" 时间范围: {df_full['timestamp'].min()} 至 {df_full['timestamp'].max()}") print(f" 起始价格: ${df_full['close'].iloc[0]:,.2f}") print(f" 结束价格: ${df_full['close'].iloc[-1]:,.2f}") total_return = (df_full['close'].iloc[-1] - df_full['close'].iloc[0]) / df_full['close'].iloc[0] print(f" 总收益率: {total_return*100:.2f}%") # 分析每年的表现 print(f"\n 年度表现分析:") df_full['year'] = pd.to_datetime(df_full['timestamp']).dt.year for year in [2020, 2021, 2022, 2023]: year_df = df_full[df_full['year'] == year] if len(year_df) > 0: year_return = (year_df['close'].iloc[-1] - year_df['close'].iloc[0]) / year_df['close'].iloc[0] print(f" {year}年: {year_return*100:+.2f}% (${year_df['close'].iloc[0]:,.0f} → ${year_df['close'].iloc[-1]:,.0f})") except Exception as e: print(f"❌ 完整数据获取失败: {e}") return False # 总结 print("\n" + "="*80) print("📊 测试结果总结") print("="*80) print("✅ Binance API可以获取2020-2023年的完整历史数据") print(f"✅ 总共可获取约 {len(df_full):,} 小时的K线数据") print(f"✅ 数据质量:连续完整,无明显缺失") print(f"\n💡 建议:") print(f" - 使用2020-2023年数据进行训练(包含完整牛熊周期)") print(f" - 2020年: 牛市初期") print(f" - 2021年: 牛市顶峰") print(f" - 2022年: 熊市") print(f" - 2023年: 复苏") print(f" 这样模型能学习到各种市场环境") return True if __name__ == "__main__": try: success = test_historical_data() if success: print("\n" + "="*80) print("✅ 所有测试通过!可以获取2020-2023年的数据") print("="*80) else: print("\n" + "="*80) print("❌ 部分测试失败") print("="*80) except Exception as e: print(f"\n❌ 测试过程出错: {e}")