#!/usr/bin/env python3 # 测试枚举合约数据 import os import sys # 确保能导入项目模块 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from qihuo_analyzer.data.data_fetcher import DataFetcher def test_enum_symbols(): """测试枚举合约数据""" print("=== 测试枚举合约数据 ===") # 创建DataFetcher实例 fetcher = DataFetcher() # 测试获取所有品种列表 print("\n1. 测试获取所有品种列表:") symbols = fetcher.get_all_symbols() print(f"成功获取 {len(symbols)} 个品种") print("所有品种:", symbols) # 测试获取按交易所划分的品种列表 print("\n2. 测试获取按交易所划分的品种列表:") symbols_by_exchange = fetcher.get_all_symbols_by_exchange() for exchange, products in symbols_by_exchange.items(): print(f"\n交易所: {exchange}") print(f"品种数量: {len(products)}") for product, contracts in products.items(): print(f" {product}: {contracts[:3]}... (共{len(contracts)}个合约)") # 测试用户指定的品种是否都存在 print("\n3. 测试用户指定的品种是否都存在:") specified_products = [ "金", "银", "铜", "镍", "锡", "玻璃", "烧碱", "纯碱", "焦煤", "螺纹钢", "氧化铝", "甲醇", "PVC", "燃油", "原油", "铝", "棕榈油", "碳酸锂", "工业硅", "橡胶", "合成橡胶", "锌", "20号胶", "多晶硅", "中证1000", "中证500", "低硫燃油", "上证50" ] # 品种中文名称映射 product_name_map = { 'AU': '金', 'AG': '银', 'CU': '铜', 'NI': '镍', 'SN': '锡', 'FG': '玻璃', 'LY': '烧碱', 'SA': '纯碱', 'JM': '焦煤', 'RB': '螺纹钢', 'ALO': '氧化铝', 'MA': '甲醇', 'V': 'PVC', 'FU': '燃油', 'SC': '原油', 'AL': '铝', 'P': '棕榈油', 'LI': '碳酸锂', 'SI': '工业硅', 'RU': '橡胶', 'BR': '合成橡胶', 'ZN': '锌', 'NR': '20号胶', 'SP': '多晶硅', 'IM': '中证1000', 'IC': '中证500', 'LU': '低硫燃油', 'IH': '上证50' } # 检查每个指定的品种 found_products = [] missing_products = [] for product_code, product_name in product_name_map.items(): # 检查是否在模拟品种列表中 mock_symbols = fetcher._get_mock_all_symbols() product_found = any(symbol.startswith(product_code) for symbol in mock_symbols) # 检查是否在按交易所划分的列表中 exchange_found = False for exchange, products in symbols_by_exchange.items(): if product_code in products: exchange_found = True break if product_found or exchange_found: found_products.append(product_name) print(f"✓ 找到: {product_name} ({product_code})") else: missing_products.append(product_name) print(f"✗ 缺失: {product_name} ({product_code})") print(f"\n4. 检查结果:") print(f"找到的品种: {len(found_products)}/{len(specified_products)}") print(f"缺失的品种: {len(missing_products)}/{len(specified_products)}") if missing_products: print(f"缺失的品种: {missing_products}") else: print("✓ 所有用户指定的品种都已找到!") # 测试获取K线数据 print("\n5. 测试获取K线数据:") test_symbols = ['AU2603', 'AG2603', 'CU2603', 'NI2603', 'SI2603'] for symbol in test_symbols: try: data = fetcher.get_kline_data(symbol, "1h", 10) if data is not None: print(f"✓ 成功获取 {symbol} 的K线数据 ({len(data)}条)") else: print(f"✗ 无法获取 {symbol} 的K线数据") except Exception as e: print(f"✗ 获取 {symbol} 数据失败: {e}") print("\n=== 测试完成 ===") if __name__ == "__main__": test_enum_symbols()