问题描述
/
解决方案
在 ptrade 量化交易平台中,使用 get_market_detail(finance_mic) 接口可以获取指定市场的详细信息,返回的 DataFrame 中包含一个名为 trade_time_rule 的字段。关于该字段的具体含义,以下是详细的解析:
1. 字段基本说明
- 字段名称:
trade_time_rule - 数据类型:
numpy.int64(在 DataFrame 中通常显示为整数) - 基本含义:该字段用于标识对应产品或市场所遵循的交易时间规则编号。
2. 具体数值代表的规则
根据 ptrade 官方 API 文档的示例,对于上证指数(000001)等 A 股标准标的,其 trade_time_rule 的返回值为 0。
遗憾的是,ptrade 官方文档中并没有提供一份完整的 trade_time_rule 整数值与具体交易时间段的映射对照表。
不过,根据量化平台的通用设计逻辑,我们可以得出以下推论:
- 规则 0:通常代表 A股标准交易时间,即交易日的
09:30-11:30和13:00-15:00(包含盘前集合竞价等标准流程)。 - 其他规则(如 1, 2 等):可能代表其他特定市场的交易时间。例如:
- 期货市场:包含夜盘交易时间(如
21:00-23:00或次日凌晨)。 - 港股通市场:遵循香港股市的交易时间(如
09:30-12:00,13:00-16:00)。 - 科创板/创业板盘后交易:包含
15:05-15:30的盘后固定价格交易阶段。
- 期货市场:包含夜盘交易时间(如
3. 如何自行探索规则映射
由于文档未详细列出,建议您在策略的 before_trading_start 或研究环境中,通过遍历不同类型的市场来观察其对应的 trade_time_rule 值:
def before_trading_start(context, data):
# 获取市场列表
market_list = get_market_list()
# 遍历几个典型市场,查看其时间规则
test_mics = ['XSHG', 'XSGE', 'XHKG-SS'] # 上交所, 上期所, 沪港通
for mic in test_mics:
detail = get_market_detail(mic)
if detail is not None and not detail.empty:
# 打印该市场第一个产品的交易时间规则
rule = detail.iloc[0]['trade_time_rule']
log.info(f"市场 {mic} 的交易时间规则编号为: {rule}")
4. 总结与建议
trade_time_rule 是底层柜台或行情系统用来区分不同交易时段的内部编码。在绝大多数普通的 A 股股票/ETF 策略中,您不需要直接使用这个字段,因为 ptrade 引擎的 handle_data 和 run_daily 已经自动为您处理了标准交易时间的触发。
如果您正在编写涉及**跨市场(如期货夜盘、港股通)**的复杂策略,且必须精确知道该整数代表的具体时间段,建议直接联系您开户券商的 ptrade 技术支持,获取该券商当前环境下的完整时间规则映射表。