问题描述
解决方案
在PTrade量化交易平台中,查询某个交易所市场的具体交易时间规则,主要通过调用 get_market_detail 函数来实现。
该函数返回指定市场编码(如 'XSHG' 代表上海证券交易所)的详细信息,其中包括交易时间规则字段 trade_time_rule。
以下是具体的实现步骤和代码示例:
核心步骤
- 获取市场列表(可选):如果不确定市场的具体编码(finance_mic),可以先调用
get_market_list()查看所有支持的市场及其编码。 - 查询市场详情:使用
get_market_detail(finance_mic)获取特定市场的详细信息。 - 查看时间规则:在返回的 DataFrame 中,查看
trade_time_rule字段。
注意事项
根据API文档,get_market_list 和 get_market_detail 在回测和交易环境中,仅限在 before_trading_start 和 after_trading_end 函数中使用。
代码示例
以下代码展示了如何在盘前阶段查询上海证券交易所(XSHG)的交易时间规则:
def initialize(context):
# 初始化函数,通常用于设置股票池等
g.security = '600570.SS'
set_universe(g.security)
def before_trading_start(context, data):
# 1. (可选) 获取所有市场列表,查看市场编码
# market_list = get_market_list()
# log.info("市场列表如下:")
# log.info(market_list)
# 2. 获取指定市场的详细信息
# 例如:查询上海证券交易所,代码为 'XSHG'
target_market = 'XSHG'
market_details = get_market_detail(target_market)
# 3. 打印结果
if market_details is not None:
log.info("市场 %s 的详细信息:" % target_market)
log.info(market_details)
# 提取交易时间规则字段
# 注意:返回的是DataFrame,包含 prod_code, prod_name, hq_type_code, trade_time_rule
if 'trade_time_rule' in market_details.columns:
log.info("交易时间规则 (trade_time_rule):")
log.info(market_details['trade_time_rule'])
else:
log.info("未查询到市场 %s 的信息" % target_market)
def handle_data(context, data):
pass
返回数据说明
调用 get_market_detail 后返回的是一个 pandas.DataFrame 对象,包含以下主要字段:
- prod_code: 产品代码
- prod_name: 产品名称
- hq_type_code: 类型代码
- trade_time_rule: 时间规则(通常为一个整数标识,代表系统内部定义的时间段规则)
Q&A
Q1: get_market_detail 函数可以在 handle_data 中调用吗?
A1: 不可以。根据PTrade API文档,该函数在回测和交易环境中,仅限在 before_trading_start 和 after_trading_end 事件函数中使用。
Q2: 如何知道我想查询的市场的代码(finance_mic)?
A2: 您可以使用 get_market_list() 函数获取当前支持的所有市场列表,返回结果中包含 finance_mic(市场编码)和 finance_name(市场名称)。例如,上海市场通常为 'XSHG',深圳市场为 'XSHE'。
Q3: trade_time_rule 返回的数字代表什么具体时间?
A3: trade_time_rule 返回的是一个整数ID,它对应柜台系统内部配置的具体时间段规则(如9:30-11:30, 13:00-15:00)。在策略层面,通常只需要确认该规则存在即可,具体的自然语言时间描述通常需要参考券商提供的外部文档或通过观察行情更新时间来确认。