VnPy - ImportError: нет модуля с именем vnctpmd - PullRequest
0 голосов
/ 08 декабря 2018

Я только что клонировал VnPy , и я пытаюсь запустить VnTrader на компьютере с Ubuntu 16.04, как упомянуто в VnPy Starter Guide .Я следовал шаг за шагом, но когда я запускаю

python vnpy/examples/VnTrader/run.py

, я получаю следующую ошибку импорта.В чем проблема?

Traceback (most recent call last):
  File "run.py", line 28, in <module>
    from vnpy.trader.gateway import (ctpGateway, ibGateway)
  File "/home/alessandro/anaconda2/lib/python2.7/site-packages/vnpy-1.9.0-py2.7.egg/vnpy/trader/gateway/ctpGateway/__init__.py", line 5, in <module>
    from .ctpGateway import CtpGateway
  File "/home/alessandro/anaconda2/lib/python2.7/site-packages/vnpy-1.9.0-py2.7.egg/vnpy/trader/gateway/ctpGateway/ctpGateway.py", line 16, in <module>
    from vnpy.api.ctp import MdApi, TdApi, defineDict
  File "/home/alessandro/anaconda2/lib/python2.7/site-packages/vnpy-1.9.0-py2.7.egg/vnpy/api/ctp/__init__.py", line 4, in <module>
    from .vnctpmd import MdApi
ImportError: No module named vnctpmd

1 Ответ

0 голосов
/ 08 декабря 2018
ImportError: No module named vnctpmd

Модуль vnctpmd является интерфейсом API для CTP-брокера пакета VnPy.Как и для любого другого интерфейса API, вам необходимо сначала создать его, а затем импортировать.

В вашем случае вы, вероятно, не создавали интерфейс CTP при запросе во время установки VnPy, поэтому теперь run.py не может импортировать модуль.

Do you need 'CTP' interface? No

Решение A: Мне не нужен интерфейс CTP

Если вам не нужен интерфейс CTP, вы можете открыть run.py , комментируя относительные частина CTP (а также относительно всех других интерфейсов, которые вы не создавали)

# /examples/VnTrader/run.py script
# this version runs with only the IB interface built

# encoding: UTF-8

# 重载sys模块,设置默认字符串编码方式为utf8
try:
    reload         # Python 2
except NameError:  # Python 3
    from importlib import reload

import sys
reload(sys)

try:
    sys.setdefaultencoding('utf8')
except AttributeError:
    pass

# 判断操作系统
import platform
system = platform.system()

# vn.trader模块
from vnpy.event import EventEngine
from vnpy.trader.vtEngine import MainEngine
from vnpy.trader.uiQt import createQApp
from vnpy.trader.uiMainWindow import MainWindow

# 加载底层接口
from vnpy.trader.gateway import ibGateway

# ### here comment the interfaces you don't need
# from vnpy.trader.gateway import (ctpGateway, ibGateway)


if system == 'Linux':
    # from vnpy.trader.gateway import xtpGateway
    pass
elif system == 'Windows':
    from vnpy.trader.gateway import (femasGateway, xspeedGateway,
                                     secGateway)

# 加载上层应用
from vnpy.trader.app import (riskManager, ctaStrategy, 
                             spreadTrading, algoTrading)


#----------------------------------------------------------------------
def main():
    """主程序入口"""
    # 创建Qt应用对象
    qApp = createQApp()

    # 创建事件引擎
    ee = EventEngine()

    # 创建主引擎
    me = MainEngine(ee)

    # 添加交易接口
    # me.addGateway(ctpGateway)
    me.addGateway(ibGateway)

    if system == 'Windows':
        me.addGateway(femasGateway)
        me.addGateway(xspeedGateway)
        me.addGateway(secGateway)

    if system == 'Linux':
        # me.addGateway(xtpGateway)
    pass

    # 添加上层应用
    me.addApp(riskManager)
    me.addApp(ctaStrategy)
    me.addApp(spreadTrading)
    me.addApp(algoTrading)

    # 创建主窗口
    mw = MainWindow(me, ee)
    mw.showMaximized()

    # 在主线程中启动Qt事件循环
    sys.exit(qApp.exec_())


if __name__ == '__main__':
    main()

Решение B: Мне нужен интерфейс CTP

В случае, если вам нужен CTPВы можете просто переустановить vnpy с помощью команды

bash install.sh

, и когда появится запрос «Вам нужен CTP», ответьте Да

...