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

`from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy_ib import IbGateway

if name == 'main':
event_engine = EventEngine()
main_engine = MainEngine(event_engine)
setting = {
"TWS地址": "127.0.0.1",
"TWS端口": 7497,
"客户号": 1,
"交易账户": "account"
}
main_engine.add_gateway(IbGateway)
main_engine.connect(setting, 'IB')`

代码只有这一点,报错如下:

Traceback (most recent call last):
  File "D:\ibwork\ibWithVN\getData.py", line 15, in <module>
    main_engine.connect(setting, 'IB')
  File "C:\veighna_studio\lib\site-packages\vnpy\trader\engine.py", line 173, in connect
    gateway.connect(setting)
  File "C:\veighna_studio\lib\site-packages\vnpy_ib\ib_gateway.py", line 221, in connect
    self.api.connect(host, port, clientid, account)
  File "C:\veighna_studio\lib\site-packages\vnpy_ib\ib_gateway.py", line 854, in connect
    self.client.connect(host, port, clientid)
  File "C:\veighna_studio\lib\site-packages\ibapi-10.32.1-py3.10.egg\ibapi\client.py", line 329, in connect
    self.wrapper.connectAck()
  File "C:\veighna_studio\lib\site-packages\vnpy_ib\ib_gateway.py", line 308, in connectAck
    self.load_contract_data()
  File "C:\veighna_studio\lib\site-packages\vnpy_ib\ib_gateway.py", line 1070, in load_contract_data
    f = shelve.open(self.data_filepath)
  File "C:\veighna_studio\lib\shelve.py", line 243, in open
    return DbfilenameShelf(filename, flag, protocol, writeback)
  File "C:\veighna_studio\lib\shelve.py", line 227, in __init__
    Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
  File "C:\veighna_studio\lib\dbm\__init__.py", line 95, in open
    return mod.open(file, flag, mode)
  File "C:\veighna_studio\lib\dbm\dumb.py", line 316, in open
    return _Database(file, mode, flag=flag)
  File "C:\veighna_studio\lib\dbm\dumb.py", line 71, in __init__
    self._update(flag)
  File "C:\veighna_studio\lib\dbm\dumb.py", line 105, in _update
    key, pos_and_siz_pair = _ast.literal_eval(line)
  File "C:\veighna_studio\lib\ast.py", line 64, in literal_eval
    node_or_string = parse(node_or_string.lstrip(" \t"), mode='eval')
  File "C:\veighna_studio\lib\ast.py", line 50, in parse
    return compile(source, filename, mode, flags,
  File "<unknown>", line 0

SyntaxError: invalid syntax
Super Moderator
avatar
加入于:
帖子: 77
声望: 8

根据您提供的错误信息,问题出在vnpy_ib模块加载合约数据时,shelve文件解析失败,导致SyntaxError: invalid syntax。以下是可能的原因和解决方法:


1. 合约数据文件损坏

  • vnpy_ib模块会使用shelve文件缓存合约数据,如果该文件损坏或格式不正确,会导致解析失败。
  • 解决方法:
    • 找到合约数据文件(通常位于.vntrader目录下,文件名为ib_contract_data.db或类似名称)。
    • 删除该文件,重新启动程序,vnpy_ib模块会自动生成新的合约数据文件。

2. 文件路径问题

  • 如果合约数据文件的路径包含特殊字符或空格,可能导致shelve模块无法正确解析。
  • 解决方法:
    • 确保.vntrader目录的路径不包含特殊字符或空格。
    • 如果路径有问题,可以修改VeighNa的配置文件(如vt_setting.json),将数据文件路径设置为一个简单的目录(如C:\vnpy_data)。

3. Python环境问题

  • 如果Python环境或依赖库存在问题,可能导致shelve模块无法正常工作。
  • 解决方法:
    • 确保Python环境和VeighNa的依赖库已正确安装,并且版本兼容。
    • 使用以下命令检查shelve模块是否正常:
      import shelve
      with shelve.open("test.db") as db:
          db["test"] = "test"
      

4. vnpy_ib模块问题

  • 如果vnpy_ib模块的代码存在问题,可能导致合约数据加载失败。
  • 解决方法:
    • 确保使用的是最新版本的vnpy_ib模块。
    • 如果问题仍然存在,可以尝试重新安装vnpy_ib模块:
      pip install vnpy_ib --upgrade
      

5. 临时解决方案

  • 如果以上方法均未解决问题,可以尝试禁用合约数据加载功能。
  • 修改vnpy_ib模块的代码,注释掉load_contract_datasave_contract_data相关代码,然后重新启动程序。

总结

建议按照以下步骤逐一排查:

  1. 删除损坏的合约数据文件,重新生成。
  2. 确保文件路径不包含特殊字符或空格。
  3. 检查Python环境和依赖库是否正常。
  4. 更新或重新安装vnpy_ib模块。

如果问题仍然存在,可以提供更多详细信息(如合约数据文件内容、Python环境版本等),以便进一步分析。

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

沪公网安备 31011502017034号

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