首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >通达信TdxQuant获取分钟级别数据及实时数据

通达信TdxQuant获取分钟级别数据及实时数据

作者头像
子晓聊技术
发布2026-04-23 17:42:52
发布2026-04-23 17:42:52
2490
举报
文章被收录于专栏:子晓AI量化子晓AI量化

之前文章写了 通达信TdxQuant 实战:一招搞定“外部调用”与“数据清洗”两大痛点 , 问我分钟级别数据的同学有好几位, 这里简单聊一聊。

我们需要提前下载好 分钟级别数据下载到本地,代码很简单, 我们只需要把1d改成1m就可以了。

tq.get_market_data的period到底支持哪些周期类型呢?

文档里没描述, 我最初也不知道啊, 不妨碍我试一下。 报错提示

period支持 ['5m', '15m', '30m', '1h', '1d', '1w', '1mon', '1m', '10m', '45d', '1q', '1y'])。

这个就是答案了。各类分钟、小时、天、月、年等。 和迅投miniqmt类似, 少了tick数据。 暂时不太清楚 tick数据传递什么周期。

另外一些同学问是否支持指数,当然支持的呀。 比如 上证指数、沪深300, 把stock_list换成 '000001.SH','000300.SH' 就可以了啊。

最后这里贴一下完整代码,参考下思路, 具体根据自己的实际情况改造。 备注:如果发现格式有多余的特殊字符,用普通浏览器打开复制应该没问题。 希望我的分享对大家有所帮助。 修改下通达信安装路径即可。

代码语言:javascript
复制

import sys
import os
import pandas as pd
import numpy as np
from datetime import datetime
tdx_install_path = r"D:\lwj\new_tdx"  # 你的通达信安装根目录
pyplugins_user_path = os.path.join(tdx_install_path, "PYPlugins", "user")
sys.path.insert(0, pyplugins_user_path)
# 【重要】切换工作目录到通达信根目录,防止初始化找不到日志文件或报错
os.chdir(tdx_install_path)
from tqcenter import tq 
# 初始化tq
tq.initialize(__file__)
def raw_data_to_dataframe_complete(raw_data):
    """
    将tq.get_market_data返回的原始数据完整转换为DataFrame
    支持多股票、多字段的完整转换
    """
    # 检查数据是否为空
    if not raw_data:
        print("原始数据为空")
        return pd.DataFrame()
    
    # 获取所有字段
    fields = list(raw_data.keys())
 
   
    # 获取第一个字段的DataFrame来提取股票代码信息
    first_field = fields[0]
    first_df = raw_data[first_field]
    
    
    if isinstance(first_df, pd.DataFrame) and hasattr(first_df, 'columns'):
        # 获取所有股票代码
        stock_codes = first_df.columns.tolist()
        
        # 创建合并后的DataFrame
        df_list = []
        
        for stock_code in stock_codes:
            stock_data = {}
            
            # 提取每个字段下该股票的数据
            for field in fields:
                field_data = raw_data[field]
                
                if isinstance(field_data, pd.DataFrame) and stock_code in field_data.columns:
                    stock_data[field] = field_data[stock_code].values
                elif isinstance(field_data, pd.Series):
                    # 如果是Series,尝试通过索引获取
                    stock_data[field] = field_data.values
                else:
                    stock_data[field] = np.nan  # 填充缺失值
            
            # 创建该股票的DataFrame
            if stock_data[first_field] is not np.nan:
                stock_df = pd.DataFrame(stock_data)
                stock_df['股票代码'] = stock_code
                
                # 添加日期索引
                if hasattr(first_df, 'index'):
                    stock_df['日期'] = first_df.index
                else:
                    stock_df['日期'] = range(len(stock_df))
                
                df_list.append(stock_df)
        
        # 合并所有股票的数据
        if df_list:
            final_df = pd.concat(df_list, ignore_index=True)
            # 重新排序列
            col_order = ['股票代码', '日期'] + fields
            final_df = final_df[col_order]
            return final_df
    
    
    return pd.DataFrame()
def main():
    stock_list = ["600519.SH",'000001.SZ']   # 贵州茅台,平安银行
    start_time = "20260127"                                  # 数据起始日期
    end_time = datetime.now().strftime("%Y%m%d")           # 数据结束日期(当前日期)
# 2. 获取并整理收盘价数据
    raw_data = tq.get_market_data(
                stock_list=stock_list,
                start_time=start_time,
                end_time=end_time,
                period='1m',
                dividend_type='front',
                field_list=['Open', 'High', 'Low', 'Close', 'Amount'],
                fill_data=True
            )
    print(raw_data)
        
        
            # 转换为标准DataFrame格式
    df_standard = raw_data_to_dataframe_complete(raw_data)
    print("\n标准格式DataFrame:")
    print(df_standard)
if __name__ == "__main__":
    main()

至于分钟数据支持多长时间, 取决于你本地下载了多少数据。 分钟数据有点占用空间,这里你可以自己试一下。

通达信分钟数据和 迅投miniqmt 有点不一样 。 通达信盘中是不支持下载分钟数据的,需要盘后才能下载。 这个没有迅投miniqmt友好, 如果你依赖盘中分钟数据,那可能需要迅投miniqmt了。或者借助通达信的实时数据完成自己的逻辑计算。

这里说下通达信实时数据方式:

代码语言:javascript
复制
market_snapshot= tq.get_market_snapshot(stock_code='600519.SH')
print(market_snapshot)
print(market_snapshot['Amount'])

打印数据:

{'Amount': '1013501.94', 'Average': '1329.74', 'Before5MinNow': '1323.03', 'Buyp': ['1323.69', '0.00', '0.00', '0.00', '0.00'], 'Buyv': ['126', '0', '0', '0', '0'], 'CJBS': '0', 'ErrorId': '0', 'InOutFlag': '2', 'Inside': '49242', 'ItemNum': '4625', 'Jjjz': '0.00', 'LastClose': '1343.01', 'Max': '1346.71', 'Min': '1322.01', 'Now': '1323.69', 'NowVol': '660', 'Open': '1343.04', 'Outside': '26976', 'RefreshNum': '0', 'Sellp': ['1323.70', '0.00', '0.00', '0.00', '0.00'], 'Sellv': ['11', '0', '0', '0', '0'], 'TickDiff': '-0.08', 'Volume': '76218', 'ZAFPre3': '0.00', 'Zangsu': '0.00', 'xsflag': '2'}

1013501.94

通达信实时数据源挺不错的,有5档数据, 类似迅投miniqmt的get_full_tick方法。

最后说下, 把通达信quant数据源作为常用数据源, 还不错。

代码语言:javascript
复制
如果我的分享对你有所帮助, 不吝啬给个点赞呗
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子晓聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最后这里贴一下完整代码,参考下思路, 具体根据自己的实际情况改造。 备注:如果发现格式有多余的特殊字符,用普通浏览器打开复制应该没问题。 希望我的分享对大家有所帮助。 修改下通达信安装路径即可。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档