VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 4
声望: 0

我想加载历史数据信息做回测。
我的 vt_setting.json 文件是这么写的(下文替换了假token)

{
    "font": "Arial",
    "datafeed": {
        "name": "tushare",
        "username": "",
        "password": "de290dffd483e9ed03d0233c634d9b79e1d72635f0ba0d3da307cc25"
    }
}

但是一直提示“没有正确配置数据服务”

PS:
我的环境信息 (Environment)
操作系统 (OS): macOS (Intel i5), x86_64。
Shell: zsh。
Python 环境: Python 3.12.4 (通过 pyenv 管理)。
包管理器 (Package Manager): Homebrew 5.0.8。
VeighNa 版本: 4.3.0。
关键模块: vnpy_ctp, vnpy_ctastrategy 等模块均已加载成功。

已尝试的步骤
数据服务配置: 按照官方文档要求,修改 ~/.vntrader/vt_setting.json 配置文件。
设置 "name": "tushare" (尝试过大小写变体)。
将 Tushare Token 放置在 "password" 字段中。
确保 vnpy_tushare 包已正确安装。

运行验证:
在 run.py 中通过 import vnpy_tushare 引入数据服务。
通过图形界面 功能 → CTA策略 模块加载并初始化策略。

故障排查:
通过 帮助 → 查询合约 验证交易接口 (CTP) 连接,确认其能返回合约列表,表明接口已就绪

Member
avatar
加入于:
帖子: 1990
声望: 157

username里,要写token这个词

Member
avatar
加入于:
帖子: 4
声望: 0
{
    "font": "Arial",
    "datafeed": {
        "name": "tushare",
        "username": "token",
        "password": "de290dffd483e9ed03d0233c634d9b79e1d72635f0ba0d3da307cc25"
    }
}

写了,还是报“没有配置要使用的数据服务”

(VeighNa) administrator@your-hostname veighna % python run.py
qt.qpa.fonts: Populating font family aliases took 566 ms. Replace uses of missing font family "微软雅黑" with one that exists to avoid this cost. 
没有配置要使用的数据服务,请修改全局配置中的datafeed相关内容
成功加载数据服务: <vnpy.trader.datafeed.BaseDatafeed object at 0x120438170>
2026-04-20 10:14:57.292 | INFO | MainEngine | 连接登录 -> CTP
2026-04-20 10:14:57.469 | INFO | CTP | 行情服务器连接成功
2026-04-20 10:14:57.501 | INFO | CTP | 行情服务器登录成功
2026-04-20 10:14:57.681 | INFO | CTP | 交易服务器连接成功
2026-04-20 10:14:57.747 | INFO | CTP | 交易服务器授权验证成功
2026-04-20 10:14:57.781 | INFO | CTP | 交易服务器登录成功
2026-04-20 10:15:02.545 | INFO | CTP | 结算信息确认成功
Member
avatar
加入于:
帖子: 6068
声望: 375

确定vt_setting.json的路径是对的吗?可以自己在vnpy.trader.setting里打印排查一下

Member
avatar
加入于:
帖子: 4
声望: 0

我用
from vnpy.trader.setting import SETTINGS
print("SETTINGS 中的 datafeed 配置:", SETTINGS.get("datafeed", {}))
打印的结果:

(VeighNa) administrator@your-hostname veighna % python3 run.py
Faile to import cython option pricing model, please rebuild with cython in cmd.
qt.qpa.fonts: Populating font family aliases took 460 ms. Replace uses of missing font family "微软雅黑" with one that exists to avoid this cost. 
============================================================
调试信息:检查配置文件路径和内容
Python 可执行文件: /Users/administrator/.pyenv/versions/VeighNa/bin/python3
用户主目录: /Users/administrator
配置文件路径: /Users/administrator/.vntrader/vt_setting.json
配置文件存在: True
配置文件内容:
 {
    "font": "Arial",
    "datafeed": {
        "name": "tushare",
        "username": "token",
        "password": "a81fd4f22e605ajksbkjankjiu8y78yq8y7dyq7w29b136427"
    }
}
SETTINGS 中的 datafeed 配置: {'name': 'tushare', 'username': 'token', 'password': 'a81fd4f22e605ajksbkjankjiu8y78yq8y7dyq7w29b136427'}
============================================================
没有配置要使用的数据服务,请修改全局配置中的datafeed相关内容
2026-04-24 16:38:18.937 | INFO | RiskEngine | 风控规则[ActiveOrderRule]加载成功,模块:vnpy_riskmanager.rules.active_order_rule_cy
2026-04-24 16:38:19.114 | INFO | RiskEngine | 风控规则[DuplicateOrderRule]加载成功,模块:vnpy_riskmanager.rules.duplicate_order_rule_cy
2026-04-24 16:38:19.114 | INFO | RiskEngine | 风控规则[OrderValidityRule]加载成功,模块:vnpy_riskmanager.rules.order_validity_rule_cy
2026-04-24 16:38:19.121 | INFO | RiskEngine | 风控规则[DailyLimitRule]加载成功,模块:vnpy_riskmanager.rules.daily_limit_rule_cy
2026-04-24 16:38:19.132 | INFO | RiskEngine | 风控规则[OrderSizeRule]加载成功,模块:vnpy_riskmanager.rules.order_size_rule_cy
Super Moderator
avatar
加入于:
帖子: 121
声望: 13

我来帮你分析这个问题。从调试信息看,配置文件内容和 SETTINGS 读取都是正常的,但系统仍然提示"没有配置要使用的数据服务"。让我先查询一下相关文档和代码,看看可能是什么原因导致的。

让我查询一下 vnpy_tushare 模块的代码,看看数据服务是如何初始化的:

我发现问题了!让我再查询一下 VeighNa 的 setting 模块,看看 SETTINGS 是如何处理配置文件的:

找到问题了!你的配置文件格式不正确

问题原因

VeighNa 的 SETTINGS 使用的是扁平化键名(如 "datafeed.name"),但你的配置文件使用的是嵌套结构(如 "datafeed": {"name": "tushare"})。

查看 setting.py 的默认配置:

SETTINGS: dict = {
    "datafeed.name": "",
    "datafeed.username": "",
    "datafeed.password": "",
    # ...
}

而你的 vt_setting.json 是:

{
    "datafeed": {
        "name": "tushare",
        "username": "token",
        "password": "xxx"
    }
}

虽然 SETTINGS.get("datafeed", {}) 能读取到嵌套字典,但 VeighNa 内部代码使用的是 SETTINGS["datafeed.name"] 访问,这些键的值仍然是空字符串!

解决方案

修改你的配置文件 /Users/administrator/.vntrader/vt_setting.json,使用扁平化格式

{
    "font": "Arial",
    "datafeed.name": "tushare",
    "datafeed.username": "token",
    "datafeed.password": "a81fd4f22e605ajksbkjankjiu8y78yq8y7dyq7w29b136427"
}

验证方法

修改后重启 VeighNa,检查配置是否正确加载:

from vnpy.trader.setting import SETTINGS

print("datafeed.name:", SETTINGS.get("datafeed.name"))
print("datafeed.username:", SETTINGS.get("datafeed.username"))
print("datafeed.password:", SETTINGS.get("datafeed.password")[:10] + "..." if SETTINGS.get("datafeed.password") else "None")

如果输出正常,就不会再提示"没有配置要使用的数据服务"了。


参考来源

  • vnpy/trader/setting.py - 全局配置定义
  • vnpy_tushare/tushare_datafeed.py - Tushare 数据服务初始化逻辑
Member
avatar
加入于:
帖子: 4
声望: 0

VeighNa AI 给力,已经解决问题。大赞一个

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】