VeighNa(vnpy)数据服务(Datafeed)接入指南:BaseDatafeed 接口、全局配置与历史数据脚本下载
VeighNavnpy数据服务Datafeed接入指南BaseDatafeed 接口、全局配置与历史数据脚本下载【免费下载链接】vnpy基于Python的开源量化交易平台开发框架项目地址: https://gitcode.com/gh_mirrors/vn/vnpyVeighNavnpy作为一个基于 Python 的开源量化交易开发框架其历史数据获取能力由**数据服务Datafeed**统一承载通过标准化的BaseDatafeed抽象接口位于vnpy.trader.datafeed以完全一致的代码方式接入迅投研、RQData、UData、TuShare、TQSDK、Wind、iFinD、Tinysoft 等多家数据提供商并在全局配置中以datafeed为前缀的字段完成统一管理。读完本文你将掌握如何在全局配置中填写数据服务参数、get_datafeed()的底层加载机制、如何使用脚本通过HistoryRequest下载 K 线与 Tick 历史数据以及各家数据服务的适用场景与注意事项。一、数据服务设计思想一套标准接口八种数据源在 VeighNa 中数据服务与交易接口Gateway是两套完全正交的体系交易接口负责连接券商/期货公司的柜台完成下单交易而数据服务则专注于历史行情数据的批量获取。二者通过统一的抽象层解耦用户在策略回测、数据预处理等环节只需面向数据服务编程无需关心底层数据源差异。1.1 BaseDatafeed 抽象基类数据服务的标准化接口BaseDatafeed定义在 vnpy/trader/datafeed.py其核心方法包括方法签名功能说明initinit(self, output: Callable print) - bool初始化数据服务连接返回是否成功query_bar_historyquery_bar_history(self, req: HistoryRequest, output: Callable print) - list[BarData]查询历史 K 线数据BarData 列表query_tick_historyquery_tick_history(self, req: HistoryRequest, output: Callable print) - list[TickData]查询历史 Tick 数据TickData 列表基类中三个方法均为默认实现init直接返回False两个查询方法返回空列表并输出提示查询K线数据失败没有正确配置数据服务/查询Tick数据失败没有正确配置数据服务。这实际上构成了一个兜底行为——当用户没有配置任何数据服务时框架不会抛异常崩溃而是优雅地返回空数据并给出明确提示引导用户检查配置。从源码结构看每种具体数据服务如vnpy_xt、vnpy_rqdata都是通过继承BaseDatafeed并重写上述方法实现的其内部再各自调用数据提供商的 SDK 或 HTTP 接口完成实际的数据拉取。1.2 动态加载机制get_datafeed()模块级函数get_datafeed()同样位于 vnpy/trader/datafeed.py负责按全局配置动态实例化对应的数据服务对象其加载逻辑可以概括为以下流程读取全局配置SETTINGS[datafeed.name]若datafeed.name为空返回BaseDatafeed()兜底实例并打印没有配置要使用的数据服务请修改全局配置中的datafeed相关内容否则按命名约定拼接模块名fvnpy_{datafeed_name}通过importlib.import_module动态导入从模块中取出Datafeed类并实例化module.Datafeed()若模块不存在未安装对应 pip 包捕获ModuleNotFoundError回退到基类实例并提示无法加载数据服务模块请运行 pip install {} 尝试安装。同时datafeed对象以模块级全局变量缓存get_datafeed()被重复调用时只会初始化一次后续调用直接返回已有实例。这一机制意味着只要把datafeed.name设置为某个数据服务包名后缀小写英文字母无需改动任何业务代码即可无缝切换数据源。二、全局配置datafeed 前缀的三个必填字段数据服务相关的全局配置字段均以datafeed作为前缀默认值定义在 vnpy/trader/setting.py 的SETTINGS字典中datafeed.name: , datafeed.username: , datafeed.password: ,各字段含义如下配置字段必填说明datafeed.name是数据服务接口的名称必须为全称的小写英文字母如rqdata、tushare、xt它将决定get_datafeed()动态导入的模块名datafeed.username是数据服务的用户名datafeed.password是数据服务的密码若采用 token 方式授权token 也填写在该字段需要特别指出以上字段对所有数据服务都是必填的即使某家数据服务实际只使用 token 授权例如 TuShare也必须把 token 填入datafeed.password字段同时datafeed.username仍建议按要求填写占位内容以保证配置结构完整。另外需要注意两点RQData 的特别提醒配置信息里的username和password不是米筐官网登录用的账号和密码而是 RQData 数据服务单独签发的账号信息两者不可混用配置的加载方式SETTINGS字典在导入时会通过load_json(vt_setting.json)从本地vt_setting.json文件覆盖默认值见 vnpy/trader/setting.py因此实际使用中既可以在 VeighNa Trader 的全局配置界面填写并保存也可以直接编辑该 JSON 文件。三、八种受支持的数据服务目前 VeighNa Trader 支持以下八种数据服务。每个数据服务的细节参数要求、权限限制、具体调用方式可在对应的独立项目仓库中找到本文给出其定位、数据覆盖范围与周期特性作为选型参考。3.1 迅投研vnpy_xt迅投研是由睿智融科公司推出的专业数据服务对大部分个人投资者而言性价比相对较高数据分类股票、期货、期权、基金、合约信息、财务信息数据周期日线、小时线、分钟线、TICK实时更新其对应的接入模块为vnpy_xt安装后需将datafeed.name设为xt。3.2 RQDatavnpy_rqdata米筐 RQData 是由米筐科技推出的云端数据服务提供广泛的国内金融市场品种数据数据分类股票、期货、期权、基金和黄金TD数据周期日线、小时线、分钟线、TICK实时更新请注意配置信息里的username和password不是米筐官网登录用的账号和密码。3.3 UDatavnpy_udata恒有数 UData 由恒生电子推出提供不限次、不限量的多种金融数据获取数据分类股票、期货数据周期分钟线盘后更新3.4 TuSharevnpy_tushareTuShare 是国内知名的开源 Python 金融数据接口项目除行情数据外还提供许多另类数据数据分类股票、期货数据周期日线、分钟线盘后更新授权方式使用 token 授权token 填写在datafeed.password字段3.5 TQSDKvnpy_tqsdk天勤 TQSDK 由信易科技推出提供当前可交易合约上市以来的历史数据获取数据分类期货数据周期分钟线实时更新3.6 Windvnpy_wind万得 Wind 是金融机构从业者的标准配置股票、债券、商品市场数据覆盖全面数据分类期货数据周期分钟线实时更新3.7 iFinDvnpy_ifind同花顺 iFinD 是面向专业机构用户的金融数据终端数据分类期货数据周期分钟线实时更新3.8 Tinysoftvnpy_tinysoft天软的天软.NET金融分析平台TinySoft在券商研究所和自营领域积累了大量用户——翻阅券商金融工程研报时常能看到图表备注中写有以上数据来自天软数据分类期货数据周期分钟线实时更新兼容性限制因为 Tinysoft 目前不支持 Python 3.10所以 VeighNa Studio 3.0.0 没有提供 Tinysoft 支持。若你的运行环境是 Python 3.10 及以上请勿选用该数据服务。选型小结若需要覆盖股票期货期权基金且追求实时 Tick优先考虑迅投研或 RQData若仅需期货分钟线TQSDK、Wind、iFinD、Tinysoft 均可满足UData 与 TuShare 适合对分钟线更新时效要求不高的场景盘后更新。四、脚本使用加载数据服务并下载历史数据在使用脚本调用数据服务之前请先按照上文全局配置一节配置好所使用的数据服务并确保已pip install对应的vnpy_xxx模块。配置完成后即可在任意 Python 脚本如 Jupyter Notebook、回测脚本、数据预处理脚本中调用统一接口下载数据。4.1 脚本加载导入包与数据结构在脚本开头加载所需的包和数据结构并获取数据服务实例from datetime import datetime from vnpy.trader.constant import Exchange, Interval from vnpy.trader.datafeed import get_datafeed from vnpy.trader.object import HistoryRequest # 获取数据服务实例按全局配置 datafeed.name 自动加载对应模块 datafeed get_datafeed()这里get_datafeed()会根据SETTINGS[datafeed.name]自动导入并实例化对应的vnpy_xxx数据服务模块若尚未配置则返回基类实例并在查询时给出未配置数据服务的提示。4.2 构造 HistoryRequest 请求对象历史数据查询统一通过HistoryRequest数据类发起其字段定义于 vnpy/trader/object.py字段类型必填说明symbolstr是合约代码如cu888为米筐连续合约代码示例exchangeExchange是合约所在交易所枚举如Exchange.SHFEstartdatetime是历史数据开始时间enddatetime否默认 None历史数据结束时间intervalInterval否默认 None数据时间粒度其中Exchange与Interval均为 vnpy/trader/constant.py 中定义的枚举Exchange覆盖国内及国际主要交易所如SHFE上期所、CFFEX中金所、DCE大商所、CZCE郑商所等Interval的可选值包括Interval 枚举取值字符串含义Interval.MINUTE1m分钟线Interval.HOUR1h小时线Interval.DAILYd日线Interval.WEEKLYw周线Interval.TICKtickTick 数据需要说明的是HistoryRequest在构造时会自动生成vt_symbol格式为symbol.exchange如cu888.SHFE该字段用于后续数据入库与查询时的统一标识。4.3 获取 K 线级别的历史数据通过datafeed.query_bar_history(req)查询 K 线历史数据req HistoryRequest( # 合约代码示例cu888为米筐连续合约代码仅用于示范具体合约代码请根据需求查询数据服务提供商 symbolcu888, # 合约所在交易所 exchangeExchange.SHFE, # 历史数据开始时间 startdatetime(2019, 1, 1), # 历史数据结束时间 enddatetime(2021, 1, 20), # 数据时间粒度默认可选分钟级、小时级和日级具体选择需要结合该数据服务的权限和需求自行选择 intervalInterval.DAILY ) # 获取k线历史数据 data datafeed.query_bar_history(req)返回结果为list[BarData]。注意interval的实际支持范围如是否支持小时线、周线取决于所选数据服务的权限与数据周期表请结合上文各服务的数据周期列进行选择。4.4 获取 Tick 级别的历史数据Tick 数据量级较大下载前请先参考上文确认所选数据服务是否提供 Tick 数据的下载服务例如迅投研与 RQData 提供实时更新的 TICK 数据而 TuShare、UData 等仅提供盘后更新的分钟线不支持 Tick 级别。req HistoryRequest( # 合约代码示例cu888为米筐连续合约代码仅用于示范具体合约代码请根据需求查询数据服务提供商 symbolcu888, # 合约所在交易所 exchangeExchange.SHFE, # 历史数据开始时间 startdatetime(2019, 1, 1), # 历史数据结束时间 enddatetime(2021, 1, 20), # 数据时间粒度为tick级别 intervalInterval.TICK ) # 获取tick历史数据 data datafeed.query_tick_history(req)返回结果为list[TickData]。与 K 线查询相比本示例仅将interval改为Interval.TICK并调用query_tick_history方法——这正是一套标准接口设计的好处切换数据粒度只需改动请求参数与查询方法其余代码完全复用。4.5 与数据库的衔接在实际使用中通过数据服务下载的历史数据通常会再写入 VeighNa 的数据库模块database配置前缀见 vnpy/trader/setting.py供回测引擎与实盘策略统一读取。数据服务负责从外部获取原始行情数据库负责本地持久化与统一存取二者分工明确、可独立配置datafeed与database两组配置前缀互不影响。五、常见问题与排查建议现象可能原因排查/解决办法查询时提示没有正确配置数据服务datafeed.name为空get_datafeed()返回了基类兜底实例在全局配置或vt_setting.json中填写datafeed.name提示无法加载数据服务模块请运行 pip install ...datafeed.name填写正确但对应vnpy_xxx包未安装按提示执行pip install vnpy_xxx包名与datafeed.name对应配置的是官网账号密码却登录失败混淆了服务商官网账号与数据服务专用账号以各数据服务项目文档中的账号申请/签发说明为准尤其是 RQData查询 Tick 返回空所选数据服务不支持 Tick 周期对照上文各服务数据周期列改用支持 TICK 的服务使用 Tinysoft 报错/无法安装Tinysoft 不支持 Python 3.10更换为其他数据服务或在 Python 3.10 以下环境中使用六、总结VeighNa 的数据服务体系通过 vnpy/trader/datafeed.py 中BaseDatafeed抽象基类与get_datafeed()动态加载机制将八种差异巨大的数据源收敛为init、query_bar_history、query_tick_history三个统一方法配合 vnpy/trader/setting.py 中datafeed.name/datafeed.username/datafeed.password三个全局配置字段即可完成数据源的插拔式切换。对于开发者而言只需掌握HistoryRequest请求对象symbol、exchange、start、end、interval 五个字段与query_bar_history/query_tick_history两个查询方法就能在任何脚本中稳定地获取 K 线与 Tick 历史数据为回测研究、数据预处理与实盘策略提供统一、可靠的数据底座。【免费下载链接】vnpy基于Python的开源量化交易平台开发框架项目地址: https://gitcode.com/gh_mirrors/vn/vnpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →