# 数据源切换指南 本指南详细说明了如何在AlphaFutures系统中切换不同的数据源(TQSDK、RQData等)。 ## 方法一:通过环境变量配置(推荐) ### 1. Windows系统环境变量配置 1. **打开系统属性**: - 右键点击"此电脑" → 选择"属性" - 点击"高级系统设置" 2. **进入环境变量设置**: - 点击"环境变量"按钮 3. **添加/修改系统变量**: - 在"系统变量"区域点击"新建"(如果已存在则点击"编辑") - 变量名:`DATA_ADAPTER_TYPE` - 变量值: - `tqsdk` - 使用TQSDK数据源 - `rqdata` - 使用RQData数据源 4. **设置账号信息**(可选): - **TQSDK账号**: - 新建变量 `TQSDK_USERNAME`,值为你的TQSDK用户名 - 新建变量 `TQSDK_PASSWORD`,值为你的TQSDK密码 - **RQData账号**: - 新建变量 `RQDATA_USERNAME`,值为你的RQData用户名 - 新建变量 `RQDATA_PASSWORD`,值为你的RQData密码 5. **生效配置**: - 点击"确定"保存所有设置 - **重启应用程序**:环境变量变更需要重启应用才能生效 ### 2. Linux/Mac系统环境变量配置 1. **编辑配置文件**: ```bash # 对于bash用户 nano ~/.bashrc # 对于zsh用户 nano ~/.zshrc ``` 2. **添加环境变量**: ```bash # 设置数据源类型 export DATA_ADAPTER_TYPE="rqdata" # 设置RQData账号(可选) export RQDATA_USERNAME="your_username" export RQDATA_PASSWORD="your_password" ``` 3. **生效配置**: ```bash # 对于bash用户 source ~/.bashrc # 对于zsh用户 source ~/.zshrc ``` ## 方法二:在代码中临时切换 ### 1. 临时设置环境变量 ```python import os # 临时切换到RQData数据源 os.environ["DATA_ADAPTER_TYPE"] = "rqdata" # 设置RQData账号(可选) os.environ["RQDATA_USERNAME"] = "your_username" os.environ["RQDATA_PASSWORD"] = "your_password" # 然后创建DataFetcher实例 from qihuo_analyzer.data.data_fetcher import DataFetcher fetcher = DataFetcher() # 现在fetcher会使用RQData数据源 kline_data = fetcher.get_kline_data("SHFE.rb2409", 3600, start_time, end_time) ``` ### 2. 直接指定适配器 ```python from qihuo_analyzer.data.api_adapters.adapter_factory import DataAdapterFactory # 直接创建RQData适配器 rqdata_adapter = DataAdapterFactory.create_adapter("rqdata") rqdata_adapter.connect() # 使用RQData获取数据 data = rqdata_adapter.get_kline_data("SHFE.rb2409", 3600, start_time, end_time) # 关闭连接 rqdata_adapter.disconnect() # 切换到TQSDK适配器 tqsdk_adapter = DataAdapterFactory.create_adapter("tqsdk") tqsdk_adapter.connect() # 使用TQSDK获取数据 data = tqsdk_adapter.get_kline_data("SHFE.rb2409", 3600, start_time, end_time) # 关闭连接 tqsdk_adapter.disconnect() ``` ## 方法三:在配置文件中设置 如果系统支持配置文件,可以在配置文件中添加数据源设置: ### 1. 创建配置文件 在项目根目录创建 `config.py` 文件: ```python # config.py DATA_ADAPTER_TYPE = "rqdata" # 可选值: tqsdk, rqdata # RQData账号配置(可选) RQDATA_USERNAME = "your_username" RQDATA_PASSWORD = "your_password" # TQSDK账号配置(可选) TQSDK_USERNAME = "your_username" TQSDK_PASSWORD = "your_password" ``` ### 2. 在代码中加载配置 ```python import os from config import DATA_ADAPTER_TYPE, RQDATA_USERNAME, RQDATA_PASSWORD, TQSDK_USERNAME, TQSDK_PASSWORD # 设置环境变量 os.environ["DATA_ADAPTER_TYPE"] = DATA_ADAPTER_TYPE # 设置账号信息 if RQDATA_USERNAME: os.environ["RQDATA_USERNAME"] = RQDATA_USERNAME if RQDATA_PASSWORD: os.environ["RQDATA_PASSWORD"] = RQDATA_PASSWORD if TQSDK_USERNAME: os.environ["TQSDK_USERNAME"] = TQSDK_USERNAME if TQSDK_PASSWORD: os.environ["TQSDK_PASSWORD"] = TQSDK_PASSWORD # 创建DataFetcher实例 from qihuo_analyzer.data.data_fetcher import DataFetcher fetcher = DataFetcher() ``` ## 查看当前使用的数据源 ### 1. 代码中查看 ```python from qihuo_analyzer.data.data_fetcher import DataFetcher # 创建DataFetcher实例 fetcher = DataFetcher() # 查看当前使用的适配器类型 print(f"当前使用的数据源: {fetcher.adapter.__class__.__name__}") # 查看适配器配置信息 print(f"适配器配置: {fetcher.adapter.config}") ``` ### 2. 检查环境变量 ```python import os # 查看当前数据源类型 adapter_type = os.environ.get("DATA_ADAPTER_TYPE", "tqsdk") print(f"当前配置的数据源类型: {adapter_type}") # 查看账号配置 if adapter_type == "rqdata": username = os.environ.get("RQDATA_USERNAME", "未配置") print(f"RQData账号: {username}") elif adapter_type == "tqsdk": username = os.environ.get("TQSDK_USERNAME", "未配置") print(f"TQSDK账号: {username}") ``` ## 切换数据源的注意事项 ### 1. 账号配置 - **切换到TQSDK**:需要配置TQSDK账号密码,否则使用模拟数据 - **切换到RQData**:需要配置RQData账号密码,否则使用模拟数据 - **未配置账号**:系统会自动使用模拟数据,确保系统正常运行 ### 2. 数据一致性 - 不同数据源的数据格式可能略有差异,但统一接口会确保返回格式一致 - 历史数据的时间范围和精度可能因数据源而异 - 实时数据的更新频率可能不同 ### 3. 性能考虑 - **TQSDK**:适合实时数据和高频交易策略 - **RQData**:适合历史数据回测和研究分析 - 选择适合你使用场景的数据源 ### 4. 错误处理 - 切换数据源后,建议测试基本功能确保连接正常 - 如遇连接问题,检查账号配置和网络连接 - 系统会自动处理API错误并使用模拟数据作为降级方案 ## 常见问题解决 ### Q: 切换数据源后连接失败 **A:** 1. 检查账号密码是否正确 2. 检查网络连接是否正常 3. 检查API服务是否正常运行 4. 尝试重启应用程序 ### Q: 如何在运行时动态切换数据源 **A:** ```python import os from qihuo_analyzer.data.data_fetcher import DataFetcher # 先使用TQSDK os.environ["DATA_ADAPTER_TYPE"] = "tqsdk" fetcher1 = DataFetcher() # 再使用RQData os.environ["DATA_ADAPTER_TYPE"] = "rqdata" fetcher2 = DataFetcher() # 现在fetcher1使用TQSDK,fetcher2使用RQData ``` ### Q: 数据源切换后数据格式不一致 **A:** 统一接口已处理数据格式问题,确保返回格式一致。如果遇到问题,请检查: 1. 确认使用的是最新版本的统一接口 2. 检查数据获取参数是否正确 3. 查看日志中的错误信息 ## 示例:完整的数据源切换流程 ### 场景:从TQSDK切换到RQData 1. **设置环境变量**: - `DATA_ADAPTER_TYPE` = "rqdata" - `RQDATA_USERNAME` = "your_rqdata_username" - `RQDATA_PASSWORD` = "your_rqdata_password" 2. **重启应用**:确保环境变量生效 3. **验证切换**: ```python from qihuo_analyzer.data.data_fetcher import DataFetcher # 创建DataFetcher实例 fetcher = DataFetcher() # 测试数据获取 try: # 获取K线数据 data = fetcher.get_kline_data( symbol="SHFE.rb2409", interval=3600, start_time="2024-01-01 00:00:00", end_time="2024-01-02 00:00:00" ) print("数据获取成功!") print(f"获取到 {len(data)} 条数据") print(f"当前使用的数据源: {fetcher.adapter.__class__.__name__}") except Exception as e: print(f"数据获取失败: {e}") ``` 4. **确认切换成功**: - 查看输出中的"当前使用的数据源"信息 - 检查数据获取是否正常 ## 总结 通过以上方法,你可以轻松在不同的数据源之间切换,选择最适合你使用场景的数据源。统一接口的设计确保了切换数据源不会影响业务逻辑,为系统提供了更大的灵活性。