VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 17
声望: 0

各位大佬,我最近在接tora的接口。发现几个奇怪的情况:
一、目前vnpy最新版的station是3.4,使用的是python3.10的版本,安装后并没有华鑫奇点的接口。我在gitee上找到vnpy_tora,支持python3.7,我猜测是否是因为python版本的问题不把tora打包到最新版安装包中?
二、把最新的vnpy_tora集成到支持python3.7的vnpy2.x版本中,登录专业交易仿真账号,登录后行情地址和交易地址成功,但是成功日志输出后,会迅速报错:
Process finished with exit code -1073740791 (0xC0000409)

为了解决这一问题, 我做了如下尝试:
1)把日志打在这一行
def process_contract_event(self, event: Event) -> None:
""""""
contract = event.data
print("contract : {}", contract)
self.contracts[contract.vt_symbol] = contract

日志输出:
event : {} ContractData(gateway_name='TORASTOCK', symbol='110038', exchange=<Exchange.SSE: 'SSE'>, name='济川转债', product=<Product.BOND: '债券'>, size=1, pricetick=0.001, min_volume=10, stop_supported
=False, net_position=True, history_data=False, option_strike=0, option_underlying='', option_type=None, option_expiry=None, option_portfolio='', option_index='')

Process finished with exit code -1073740791 (0xC0000409)

2)配置Configure中的Execution->Emulate terminal in output console,还是上面的报错,且没有打出具体报错。

3)尝试run方式(不是debugger)运行,会打出很多合约日志,但是报错依旧:
contract : {} ContractData(gateway_name='TORASTOCK', symbol='501200', exchange=<Exchange.SSE: 'SSE'>, name='科创加银', product=<Product.FUND: '基金'>, size=1, pricetick=0.001, min_volume=100, stop_supporte
d=False, net_position=True, history_data=False, option_strike=0, option_underlying='', option_type=None, option_expiry=None, option_portfolio='', option_index='')
contract : {} ContractData(gateway_name='TORASTOCK', symbol='501201', exchange=<Exchange.SSE: 'SSE'>, name='科创红土', product=<Product.FUND: '基金'>, size=1, pricetick=0.001, min_volume=100, stop_supporte
d=False, net_position=True, history_data=False, option_strike=0, option_underlying='', option_type=None, option_expiry=None, option_portfolio='', option_index='')

Process finished with exit code -1073740791 (0xC0000409)

4)尝试设置vm参数
-Xms1024m
-Xmx2048m

还是没有效果。

请问该如何定位解决这个问题?

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

如果问题一成立的话,请问最新的station如何集成vnpy_tora呢?

Member
avatar
加入于:
帖子: 1468
声望: 105
  1. 华鑫目前只提供了3.7版本的API,所以没法集成
  2. vnpy_tora仓库里应该写了最少要3.3.0以上的vnpy核心库才行
Member
avatar
加入于:
帖子: 17
声望: 0

MTF wrote:

  1. 华鑫目前只提供了3.7版本的API,所以没法集成
  2. vnpy_tora仓库里应该写了最少要3.3.0以上的vnpy核心库才行
    您说的很对。这两点我都表示赞同。
    但是我对比了3.3.0核心代码和之前2.x的区别,和tora对接方面,好像除包结构改动外,并没有什么特别之处啊。我试了华鑫最新版的demo,是可以跑通的,test的demo如下:

!/usr/bin/python

-- coding: UTF-8 --

import xmdapi

class MdSpi(xmdapi.CTORATstpXMdSpi):
def init(self, api):
xmdapi.CTORATstpXMdSpi.init(self)
self.__api = api

def OnFrontConnected(self):
    print("OnFrontConnected")

    #请求登录,目前未校验登录用户,请求域置空即可
    login_req = xmdapi.CTORATstpReqUserLoginField()
    self.__api.ReqUserLogin(login_req, 1)

def OnRspUserLogin(self, pRspUserLoginField, pRspInfoField, nRequestID):
    if pRspInfoField.ErrorID == 0:
        print('Login success! [%d]' % nRequestID)

        '''
        订阅行情
        当sub_arr中只有一个"00000000"的合约且ExchangeID填TORA_TSTP_EXD_SSE或TORA_TSTP_EXD_SZSE时,订阅单市场所有合约行情
        当sub_arr中只有一个"00000000"的合约且ExchangeID填TORA_TSTP_EXD_COMM时,订阅全市场所有合约行情
        其它情况,订阅sub_arr集合中的合约行情
        '''
        sub_arr = [b'00000000']
        ret = self.__api.SubscribeMarketData(sub_arr, xmdapi.TORA_TSTP_EXD_SSE)
        if ret != 0:
            print('SubscribeMarketData fail, ret[%d]' % ret)
        else:
            print('SubscribeMarketData success, ret[%d]' % ret)



        sub_arr = [b'00000000']
        ret = self.__api.UnSubscribeMarketData(sub_arr, xmdapi.TORA_TSTP_EXD_SSE)
        if ret != 0:
            print('UnSubscribeMarketData fail, ret[%d]' % ret)
        else:
            print('SubscribeMarketData success, ret[%d]' % ret)


    else:
        print('Login fail!!! [%d] [%d] [%s]'
            %(nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))


def OnRspSubMarketData(self, pSpecificSecurityField, pRspInfoField):
    if pRspInfoField.ErrorID == 0:
        print('OnRspSubMarketData: OK!')
    else:
        print('OnRspSubMarketData: Error! [%d] [%s]'
            %(pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))


def OnRspUnSubMarketData(self, pSpecificSecurityField, pRspInfoField):
    if pRspInfoField.ErrorID == 0:
        print('OnRspUnSubMarketData: OK!')
    else:
        print('OnRspUnSubMarketData: Error! [%d] [%s]'
            %(pRspInfoField.ErrorID, pRspInfoField.ErrorMsg))

def OnRtnMarketData(self, pMarketDataField):
    print("SecurityID[%s] SecurityName[%s] LastPrice[%.2f] Volume[%d] Turnover[%.2f] BidPrice1[%.2f] BidVolume1[%d] AskPrice1[%.2f] AskVolume1[%d] UpperLimitPrice[%.2f] LowerLimitPrice[%.2f]"
        % (pMarketDataField.SecurityID, pMarketDataField.SecurityName, pMarketDataField.LastPrice, pMarketDataField.Volume,
           pMarketDataField.Turnover, pMarketDataField.BidPrice1, pMarketDataField.BidVolume1, pMarketDataField.AskPrice1,
           pMarketDataField.AskVolume1, pMarketDataField.UpperLimitPrice, pMarketDataField.LowerLimitPrice))


if name == "main":

# 打印接口版本号
print(xmdapi.CTORATstpXMdApi_GetApiVersion())

# 创建接口对象
api = xmdapi.CTORATstpXMdApi_CreateTstpXMdApi()

# 创建回调对象
spi = MdSpi(api)

# 注册回调接口
api.RegisterSpi(spi)

# 注册单个行情前置服务地址
api.RegisterFront("tcp://10.0.1.101:6402")
# 注册多个行情前置服务地址,用逗号隔开
#api.RegisterFront("tcp://10.0.1.101:6402,tcp://10.0.1.101:16402")
# 注册名字服务器地址,支持多服务地址逗号隔开
#api.RegisterNameServer('tcp://10.0.1.101:52370')
#api.RegisterNameServer('tcp://10.0.1.101:52370,tcp://10.0.1.101:62370')

# 启动接口
api.Init()

# 等待程序结束
input()

# 释放接口对象
api.Release()
Member
avatar
加入于:
帖子: 17
声望: 0

MTF wrote:

  1. 华鑫目前只提供了3.7版本的API,所以没法集成
  2. vnpy_tora仓库里应该写了最少要3.3.0以上的vnpy核心库才行
    请问我用3.3核心库,使用python3.7,集成vnpy_tora是否可以解决上述问题
Member
avatar
加入于:
帖子: 1468
声望: 105

chenyi wrote:

MTF wrote:

  1. 华鑫目前只提供了3.7版本的API,所以没法集成
  2. vnpy_tora仓库里应该写了最少要3.3.0以上的vnpy核心库才行
    请问我用3.3核心库,使用python3.7,集成vnpy_tora是否可以解决上述问题

应该可以的,符合各个模块的环境限制了

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

华鑫的提供给的接口在Ubuntu上面可以用最新的Python版本

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

沪公网安备 31011502017034号

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