tdxdata 未知领域探索

PTD 阅读:1827 2025-12-15 09:34:15 评论:0

PYtdx TDXDATA 未知领域

1. 当前支持的行情数据类型

现有行情数据函数:

# 在 tqcenter.py 中
def get_market_data(
    field_list: List[str] = [],
    stock_list: List[str] = [],
    period: str = '',  # 支持 '1d', '1m', '5m', '15m', '30m', '60m', 'tick' 等
    # ... 其他参数
) -> Dict

def get_report_data(
    stock_codes: str,
    isLevel2: bool = False  # ← 注意:这里有 isLevel2 参数
) -> Dict

2. get_report_data 函数的 isLevel2 参数

虽然 get_report_data 函数有一个 isLevel2 参数,但从代码注释和实现来看:

@classmethod
def get_report_data(cls,
                    stock_codes: str,
                    isLevel2: bool = False) -> Dict:
    """获取报表数据"""
    # 注释和实现都没有明确说明这是获取L2行情数据的函数
    # 名称是 "报表数据" 而不是 "行情数据"

从函数名 get_report_data(获取报表数据)和底层的DLL函数名 GetREPORTInStr 来看,这个函数并不是用来获取L2行情数据,而是获取其他类型的报表数据。

3. 当前支持的行情数据级别

从代码分析,目前支持:

3.1 普通行情数据 (Level 1)

  • K线数据:通过 get_market_data 获取
  • 支持周期:日线、分钟线、tick数据
  • 包含字段:Open, High, Low, Close, Volume 等基础字段

3.2 tick数据

  • 通过get_market_data 设置 period='tick'
  • 包含:基本的tick数据,但不是L2级别的详细数据

4. 缺失的L2功能

真正的L2行情数据通常包括:

  1. 十档行情(买卖一到十档的价格和数量)
  2. 逐笔成交明细(每笔成交的详细情况)
  3. 委托队列(实时委托订单信息)
  4. 大单统计

这些功能在当前的代码中都没有实现

5. 如何添加L2功能

如果需要添加L2行情数据功能,需要:

5.1 确认底层DLL支持

检查 TPythClient.dll 是否有以下功能:

// 可能的L2相关函数
GetL2QuoteInStr        // 获取L2报价
GetL2TransactionInStr  // 获取L2成交明细
GetL2OrderQueueInStr   // 获取L2委托队列

5.2 在 tqcenter.py 中添加对应函数

可以添加类似以下的新函数:

@classmethod
def get_l2_quote(cls,
                 stock_code: str,
                 timeout_ms: int = 5000) -> Dict:
    """获取L2十档行情数据"""
    # 自动初始化连接
    cls._auto_initialize()
    
    codestr = stock_code.encode('utf-8')
    
    try:
        # 假设DLL中有 GetL2QuoteInStr 函数
        ptr = dll.GetL2QuoteInStr(cls._get_run_id(), codestr, timeout_ms)
        if len(ptr) > 0:
            result_str = ptr.decode('utf-8')
            return json.loads(result_str)
    except Exception as e:
        raise ValueError(f"获取L2行情数据异常: {e}")

@classmethod
def get_l2_transaction(cls,
                       stock_code: str,
                       start_time: str,
                       end_time: str,
                       count: int = 1000) -> Dict:
    """获取L2逐笔成交数据"""
    # 实现类似的逻辑
    pass

5.3 在 test.py 中添加使用示例

# 获取L2十档行情
l2_quote = tdxdata.get_l2_quote('600519.SH')
print(f"L2十档买盘: {l2_quote.get('BuyLevels')}")
print(f"L2十档卖盘: {l2_quote.get('SellLevels')}")

# 获取L2逐笔成交
l2_trans = tdxdata.get_l2_transaction(
    stock_code='600519.SH',
    start_time='20241212 09:30:00',
    end_time='20241212 10:00:00',
    count=1000
)
print(f"逐笔成交数量: {len(l2_trans)}")

6. 替代方案

如果你暂时无法获取L2数据,可以考虑:

6.1 使用现有的tick数据

tick_data = tdxdata.get_market_data(
    stock_list=['600519.SH'],
    period='tick',
    start_time='20241212 09:30:00',
    end_time='20241212 10:00:00'
)

6.2 订阅实时数据

def l2_callback(data_str):
    """实时接收数据(如果有L2支持的话)"""
    data = json.loads(data_str)
    # 处理L2数据

tdxdata.subscribe_quote(
    stock_code='600519.SH',
    period='tick',  # 或者特定的L2周期
    callback=l2_callback
)

待验证的项目

  1. 确认 TPythClient.dll 是否支持L2数据接口
  2. 如果有DLL的开发文档,查看其中关于L2的函数
  3. 按照第5节的示例添加L2相关功能

本文由 海星量化研究所 作者提供,转载请保留链接和署名!网址:https://qmt.hxquant.com/?id=64

声明

1.本站原创文章,转载需注明文章作者来源。 2.如果文章内容涉及版权问题,请联系我们删除,向本站投稿文章可能会经我们编辑修改。 3.本站对信息准确性或完整性不作保证,亦不对因使用该等信息而引发或可能引发的损失承担任何责任。

搜索
排行榜
关注我们

扫码开通QMT/ptrade