2026-01-27 01:21:22 +08:00
|
|
|
import logging
|
|
|
|
|
import sys
|
|
|
|
|
import os
|
|
|
|
|
import datetime
|
2025-11-29 00:23:12 +08:00
|
|
|
from xtquant import xttrader
|
2026-01-04 22:43:13 +08:00
|
|
|
from xtquant.xtdata import download_history_data, get_market_data
|
2025-11-29 00:23:12 +08:00
|
|
|
from xtquant.xttype import StockAccount
|
|
|
|
|
import random
|
|
|
|
|
|
2026-01-27 01:21:22 +08:00
|
|
|
|
|
|
|
|
def setup_logger():
|
|
|
|
|
"""配置日志系统"""
|
|
|
|
|
log_dir = "logs"
|
|
|
|
|
if not os.path.exists(log_dir):
|
|
|
|
|
os.makedirs(log_dir)
|
|
|
|
|
|
|
|
|
|
log_file = os.path.join(log_dir, f"{datetime.date.today().strftime('%Y-%m-%d')}_test.log")
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger("QMT_Test")
|
|
|
|
|
logger.setLevel(logging.INFO)
|
|
|
|
|
|
|
|
|
|
formatter = logging.Formatter(
|
|
|
|
|
'[%(asctime)s] [%(levelname)s] [%(filename)s:%(lineno)d] %(message)s',
|
|
|
|
|
datefmt='%Y-%m-%d %H:%M:%S'
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
file_handler = logging.FileHandler(log_file, mode='a', encoding='utf-8')
|
|
|
|
|
file_handler.setFormatter(formatter)
|
|
|
|
|
|
|
|
|
|
stream_handler = logging.StreamHandler(sys.stdout)
|
|
|
|
|
stream_handler.setFormatter(formatter)
|
|
|
|
|
|
|
|
|
|
logger.addHandler(file_handler)
|
|
|
|
|
logger.addHandler(stream_handler)
|
|
|
|
|
|
|
|
|
|
return logger
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logger = setup_logger()
|
|
|
|
|
|
2025-11-29 00:23:12 +08:00
|
|
|
# 设置 QMT 交易端的数据路径和会话ID
|
2026-01-10 04:06:35 +08:00
|
|
|
min_path = r"C:\\QMT\\中金财富QMT个人版交易端\\userdata_mini"
|
2025-11-29 00:23:12 +08:00
|
|
|
session_id = int(random.randint(100000, 999999))
|
|
|
|
|
|
2026-01-27 01:21:22 +08:00
|
|
|
logger.info(f"QMT路径: {min_path}")
|
|
|
|
|
logger.info(f"会话ID: {session_id}")
|
|
|
|
|
|
2025-11-29 00:23:12 +08:00
|
|
|
# 创建 XtQuantTrader 实例并启动
|
2026-01-27 01:21:22 +08:00
|
|
|
logger.info("正在创建 XtQuantTrader 实例...")
|
2025-11-29 00:23:12 +08:00
|
|
|
xt_trader = xttrader.XtQuantTrader(min_path, session_id)
|
2026-01-27 01:21:22 +08:00
|
|
|
logger.info("正在启动 XtQuantTrader...")
|
2025-11-29 00:23:12 +08:00
|
|
|
xt_trader.start()
|
2026-01-27 01:21:22 +08:00
|
|
|
logger.info("XtQuantTrader 已启动")
|
2025-11-29 00:23:12 +08:00
|
|
|
|
|
|
|
|
# 连接 QMT 交易端
|
2026-01-27 01:21:22 +08:00
|
|
|
logger.info("正在连接 QMT 交易端...")
|
2025-11-29 00:23:12 +08:00
|
|
|
connect_result = xt_trader.connect()
|
|
|
|
|
if connect_result == 0:
|
2026-01-27 01:21:22 +08:00
|
|
|
logger.info("✅ 连接成功")
|
2025-11-29 00:23:12 +08:00
|
|
|
else:
|
2026-01-27 01:21:22 +08:00
|
|
|
logger.error(f"❌ 连接失败,错误码: {connect_result}")
|
2025-11-29 00:23:12 +08:00
|
|
|
xt_trader.stop()
|
2026-01-27 01:21:22 +08:00
|
|
|
logger.info("XtQuantTrader 已停止")
|
2025-11-29 00:23:12 +08:00
|
|
|
exit()
|
|
|
|
|
|
|
|
|
|
# 设置账户信息
|
2026-01-27 01:21:22 +08:00
|
|
|
account_id = '8176081580'
|
|
|
|
|
logger.info(f"账户ID: {account_id}")
|
|
|
|
|
account = StockAccount(account_id)
|
2025-11-29 00:23:12 +08:00
|
|
|
|
|
|
|
|
# 订阅账户
|
2026-01-27 01:21:22 +08:00
|
|
|
logger.info("正在订阅账户...")
|
2025-11-29 00:23:12 +08:00
|
|
|
res = xt_trader.subscribe(account)
|
|
|
|
|
if res == 0:
|
2026-01-27 01:21:22 +08:00
|
|
|
logger.info("✅ 订阅成功")
|
2025-11-29 00:23:12 +08:00
|
|
|
else:
|
2026-01-27 01:21:22 +08:00
|
|
|
logger.error(f"❌ 订阅失败,错误码: {res}")
|