VeighNa量化社区
你的开源社区量化交易平台
chenyi's Avatar
Member
离线
17 帖子
声望: 0

MTF wrote:

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

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()

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

各位大佬,我最近在接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

还是没有效果。

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

请问楼主找到vnpy接入实盘XTP获取行情数据的方式了吗?

中泰证券已经停止为vnpy新客户提供对接,请问vnpy还有其他方式可以接入实盘XTP吗?

Derew wrote:

已在网上找到答案。谢谢关注
为减少其它同学的困难,我这里把答案复制过来,呵呵。
解决方案:
第一步:找到vnpy的QT的bin路径,例如我的是:C:\vnstudio\Lib\site-packages\PyQt5\Qt\bin
第二步:找到Qt5Bluetooth.dll,并重命名为其它名,例如:Qt5Bluetooth.dll1就行了!

简单的方式在阿里云上换个操作系统,直接升级window server版本到最新就行了。

jingsiaosing wrote:

一个类似的问题:开盘第一个tick的时间戳是20:59:00,第二个tick的时间戳是21:00:00, 他俩的minute不一样,所以在收到第二个tick的时候就会推送bar,bar的时间戳是20:59:00,是这样吗?
自己合成的话可能会有这种问题,但事实上,米筐数据的处理方式是把20:59的数据合成到21:00上作为开盘价。是不会出现20:59的bar数据的。

  订单成交会在on_trade中发出止损单,在tick打到止损价时check_stop_order会发出限价单,同时stop_order状态变成triggered,这里有两个疑问:

1、此时发出的限价单一定会成功吗?在on_order中会监控止损单发出的限价单状态,如果是reject怎么处理?重新挂吗,这时候已经不能和止损单关联上了,部分成交是撤了重挂还是继续等?
2、止损单状态已是被触发,不区分成功或失败,有办法通过on_stop_order监控并处理它vt_orders的限价单状态吗?还是说必须用on_order订单状态去控制了?

hxxjava wrote:

chenyi wrote:

hxxjava wrote:
好眼力!这个小小的窗口中可是包含了策略账户的完整功能,可以管理并且策略的出入金、委托记录查询和成交记录查询统计等复杂的更能!
只是涉及修改和增加代码的地方比较多,而且我很久没有升级代码,我的策略账户的一些关键代码被vnpy官方借用,可能会和目前的系统有冲突的地方,所以一直不好跟随升级。你的系统代码应该是最新的,公布了之后可能会有比较多的麻烦,也让你为难。
等我有时间了,备份起我目前的系统的代码,升级到最新,好好查询下兼容性的问题,再上传为宜。

感谢楼主,楼主必发大财!

hxxjava wrote:

2.5 显示效果

description

请教楼主,最下方右侧图的,策略账户的代码方便发一下吗,学习一下,谢谢~!

xiaohe wrote:

本地没有缓存,限价单的单子是下到交易所了所以重启的时候从交易所查询到了,本地停止单就没下到交易所,关闭之后缓存就清掉了
@xiaohe 感谢回复。我是新手,还未完全理解两点,还需要请教您:
1)限价单发出后就会挂在服务器端,如果不撤单就会一直挂着。PositionHolding中的active_orders是用来记录未撮合的限价单,当系统启动时候,会从交易所查到未撮合单然后放到active_orders中吗?
2)限价单成交后在on_trade中发出止损单,这个时候的止损单就是服务器端止损了把。您说的本地停止单是什么情况会用呢?

换句话说订单的缓存是存在本地的哪里,找了一圈没找到本地持久化的地方。是在.vnstation下的.dat文件里放着吗?

# 发出限价单买1手
self.buy(self.current_close, 1)
# 发出止损单止损1手
self.sell(self.stop_price, self.buy_fix, True)

如果希望撤单同时撤掉这两个单子,怎么操作,求思路!

找到问题原因了,vnpy默认使用的是sqlite,vnstation和jupyterbook都是默认sqlite。但是jupyterbook用的是vnpy-master的代码启动的,而vnstation可以是另一套环境。关键在于,如果使用的.vntrader不是一套的话,就会出现各自访问各自数据库的问题。要关注当前环境访问的是哪个数据库。

现象:登录失败,服务器无法启动。

解决思路:使用命令行查看解决如下:

C:\Users\Administrator>python -m vnstation
qt.network.ssl: QSslSocket: cannot resolve EVP_PKEY_param_check
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_ciphersuites
qt.network.ssl: QSslSocket: cannot resolve SSL_set_psk_use_session_callback
qt.network.ssl: QSslSocket: cannot resolve SSL_SESSION_is_resumable
qt.network.ssl: QSslSocket: OpenSSL >= 1.1.1 is required; OpenSSL 1.1.0i 14 Aug 2018 was found instead
qt.network.ssl: QSslSocket: OpenSSL >= 1.1.1 is required; OpenSSL 1.1.0i 14 Aug 2018 was found instead
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
qt.network.ssl: QSslSocket: OpenSSL >= 1.1.1 is required; OpenSSL 1.1.0i 14 Aug 2018 was found instead

原因: OpenSSL版本低,更换版本。具体操作参考:https://blog.csdn.net/xiaolong1126626497/article/details/105220160

安装完新的SSL后,将libcrypto-1_1.dll 和libssl-1_1.dll两个文件,替换vnstudio下的这两个文件(而不是替换lib中的)。

重启。

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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