本帖最后由 流光 于 2023-12-29 14:56 编辑
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("连接失败")
欢迎关注我的公众号“量化实战”,原创技术文章第一时间推送,如有加量化交流群需求,也可在公众号后台留言。
