万一免五开户,联系微信:golangsysu

xtquant 中切换 IP 实现更稳定地获取数据

量化程序 女子经理 1℃

xtquant 中切换 IP 实现更稳定地获取数据

利用迅投 QMT 的 xtquant 包我们可以很方便的独立获取量化数据,但有时默认连接了某个拥挤的站点,或者部分有故障的服务器,给我们造成不稳定的困扰。本文介绍如何在切换行情服务器,获取更加准确的数据。

一、券商版行情站点切换
如果是 miniqmt, 配置文件在 QMT 安装根目录下的 userdata_mini\users\xtquoterconfig.xml 中,读取文件通常能获取券商版默认的用户名和密码, 比如下面的迅投主站:

info={
"ip": "218.16.123.121",
"port": 55300,
"username": "qmtguosheng307",
"pwd": "AUtURWJaLUJJOXlyZnBBVkdWUG9tNElFZmpvU01zY19nYlRVVEotUzdoMEM5RkJmMFdheG5XZz09"
}

如果我们要增加或修改行情站点,例如增加 VIP 行情站点,则可以在客户端行情配置中手动添加或者直接修改这个文件,并在 QuoterServers 配置项中的设置默认连接行情。

需要注意的是,券商版 QMT 目前暂时不支持在代码中切换站点,因此只能手动在 QMT/MiniQMT 行情源中切换。

二、VIP 行情站点切换
2.1 问题数据复线
比如下面代码读取历史北向资金流向数据,部分默认站点(上海)可能出现读取数据丢失以及不准确问题:

import datetime, time
import pandas as pd
from xtquant import xtdatacenter as xtdc
import xtquant.xtdata as xtdata
from clickhouse_driver import Client
from tqdm import tqdm
xtdc.set_token('3e6c**5501')
xtdc.set_data_home_dir('/data/qmt')

xtdata.download_history_data('FFFFFF.SGT', 'northfinancechange1m', '', '')
xtdata.get_market_data_ex([], ['FFFFFF.SGT'], 'northfinancechange1m', '', '')['FFFFFF.SGT']

2.2 切换行情站点
VIP 行情目前支持在 xtdatacenter 中通过 QuoteServer 函数手动设置行情服务器并连接:

import time
info={'ip: '218.16.123.27', 'port': 55310, 'username': '', 'pwd': ''}
qs = xtdata.QuoteServer(info)
result = qs.connect()

if result.get("result", False):
print("切换站点成功!")
else:
print("切换站点失败!")

切换成功后,我们重新下载数据,可以发现数据正常。

当然,可以通过回调函数更加精细地监控切换服务器连接状态:
··
connect_success = 0
def func(d):
ip = d.get('ip', '')
port = d.get('port')
status = d.get('status', 'disconnected')

global connect_success
if ip == info['ip'] and port == info['port']:
    if status == 'connected':
        connect_success = 1
    else:
        connect_success = 2

注册连接回调信息

xtdata.watch_quote_server_status(func)

行情连接

qs = xtdata.QuoteServer(info)
qs.connect()

等待连接状态

while connect_success == 0:
time.sleep(0.3)

if connect_success == 2:
print("连接失败")

量化ptrade qmt miniqmt开通门槛全网最低,佣金最低,需要联系加v资询,备注:量化开户