返回列表 发布新帖

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

1204 1
发表于 2023-12-29 14:56:38 | 显示全部楼层 阅读模式

本帖最后由 流光 于 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("连接失败")

欢迎关注我的公众号“量化实战”,原创技术文章第一时间推送,如有加量化交流群需求,也可在公众号后台留言。

评论1

*******2006_urqEz
发表于 2025-1-31 21:51:48 | 显示全部楼层

xtdata.watch_quote_server_status(func) 中的func 值从哪来?是miniqmt客户端产生的吗?
客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 | 技术支持 Discuz! 版权所有 All Rights Reserved. 蜀ICP备19002686号-2
关灯
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表