🚀 AI 一键生成 ptrade 策略代码

PTrade API 详解:使用 get_market_detail 查询交易时间规则

ptrade | 发布时间: 2025/12/23
以下内容由 EasyQuant 生成。

问题描述

怎么查询不同市场的具体交易时间规则?

解决方案

在PTrade量化交易平台中,查询不同市场的具体交易时间规则主要通过 get_market_detail 函数来实现。通常配合 get_market_list 函数先获取市场代码,再查询详细信息。

以下是具体的步骤和代码示例:

核心函数说明

  1. get_market_list()
    • 用途:获取当前支持的所有市场列表目录。
    • 返回:包含市场编码(finance_mic)和市场名称(finance_name)的 DataFrame。
  2. get_market_detail(finance_mic)
    • 用途:根据市场编码获取该市场的详细信息,其中包括交易时间规则。
    • 参数finance_mic (字符串),即市场代码(如 'XSHG' 代表上海证券交易所)。
    • 返回:包含产品代码、名称、类型代码以及 trade_time_rule(时间规则) 的 DataFrame。

策略代码示例

您可以将以下代码复制到PTrade的研究或回测环境中运行,查看日志输出即可获得相关信息。

def initialize(context):
    # 1. 获取所有市场的列表,查看市场编码(finance_mic)
    # 注意:这一步是为了查找您感兴趣的市场代码,比如上海市场是 'XSHG'
    all_markets = get_market_list()
    log.info("=== 市场列表前5行 ===")
    log.info(all_markets.head()) 
    
    # 2. 查询特定市场的详细交易规则
    # 以查询上海证券交易所('XSHG')为例
    target_market = 'XSHG'
    market_details = get_market_detail(target_market)
    
    log.info("=== %s 市场详细信息 ===" % target_market)
    # 打印详细信息,其中 'trade_time_rule' 列即为交易时间规则ID
    log.info(market_details)
    
    # 3. 查询期货市场示例,例如中国金融期货交易所 ('CCFX')
    future_market = 'CCFX'
    future_details = get_market_detail(future_market)
    log.info("=== %s 市场详细信息 ===" % future_market)
    log.info(future_details)

def handle_data(context, data):
    pass

返回数据解读

调用 get_market_detail 后,返回的 DataFrame 包含以下关键字段:

  • prod_code: 产品代码(如 '000001')。
  • prod_name: 产品名称(如 '上证指数')。
  • hq_type_code: 类型代码。
  • trade_time_rule: 交易时间规则。这是一个整数代码(如 0),代表系统内部定义的一套时间模板(例如 9:30-11:30, 13:00-15:00)。

注意事项

  1. 调用时机:这两个函数在回测和交易模块中,仅限在 before_trading_startafter_trading_end 中使用(虽然在 initialize 中通常也能运行用于查看静态数据,但官方文档推荐在盘前/盘后阶段调用以获取最新信息)。
  2. 数据类型:返回的数据是 pandas.DataFrame 格式,可以使用 Pandas 的相关方法(如 .head(), .query())进行筛选。

Q&A

Q1: get_market_detail 返回的 trade_time_rule 是数字,怎么知道具体是几点到几点?
A1: trade_time_rule 返回的是一个规则索引ID(如0)。具体的起止时间(如9:30-11:30)通常由柜台系统配置定义,API直接返回的是该规则的映射ID。如果需要具体的分钟级时间段,通常结合实际行情数据的 trade_mins(交易分钟数)或咨询券商获取该ID对应的时间表。

Q2: 如何查看可转债市场的代码列表?
A2: 可以使用专门的函数 get_cb_list() 来获取当前可转债市场的所有代码列表。

Q3: 我可以直接在 handle_data 中调用这些查询函数吗?
A3: 不建议。get_market_listget_market_detail 主要用于获取静态元数据,且文档指出在回测和交易中仅限 before_trading_startafter_trading_end 中使用。在 handle_data(高频调用)中查询静态数据会影响策略运行效率。