问题描述
解决方案
在PTrade量化交易平台中,查询期货合约详细信息(如合约乘数、保证金比例、上市日期等)的主要接口是 get_instruments。
该函数返回一个 FutureParams 对象,包含了合约的各项静态基础数据。
核心函数说明
- 函数名:
get_instruments(contract) - 参数:
contract(str),期货合约代码,例如"IF2312.CCFX"或"CU2112.XSGE"。 - 返回值:
FutureParams对象。
FutureParams 对象属性详解
调用该函数后,可以通过访问返回对象的属性来获取具体数值:
contract_multiplier:合约乘数 (float)margin_rate:保证金比例 (float)contract_name:合约名称 (str)contract_code:合约代码 (str)exchange:交易所 (str)trade_unit:交易单位 (int)delivery_date:交割日期 (str)listing_date:上市日期 (str)
代码示例
以下是一个完整的策略示例,展示如何在 before_trading_start 阶段查询并打印期货合约的详细信息。
def initialize(context):
# 初始化策略,设置需要查询的期货合约代码
# 这里以沪铜2112为例,实际使用时请替换为当前存续的合约代码
g.future_code = "CU2112.XSGE"
set_universe(g.future_code)
def before_trading_start(context, data):
# 获取合约详细信息对象
instrument_info = get_instruments(g.future_code)
if instrument_info:
# 打印合约名称
log.info("合约名称: %s" % instrument_info.contract_name)
# 获取并打印合约乘数
multiplier = instrument_info.contract_multiplier
log.info("合约乘数: %s" % multiplier)
# 获取并打印保证金比例
# 注意:这是交易所设定的默认保证金比例,除非使用set_margin_rate修改过
margin_rate = instrument_info.margin_rate
log.info("保证金比例: %s" % margin_rate)
# 获取其他信息
log.info("交易所: %s" % instrument_info.exchange)
log.info("上市日期: %s" % instrument_info.listing_date)
log.info("交割日期: %s" % instrument_info.delivery_date)
else:
log.info("未查询到合约 %s 的信息" % g.future_code)
def handle_data(context, data):
pass
注意事项
- 对象访问:
get_instruments返回的是一个对象(Object),而不是字典(Dict)。因此需要使用点号.来访问属性(如info.contract_multiplier),而不是中括号['contract_multiplier']。 - 保证金比例:返回的
margin_rate是交易所规定的标准保证金比例。如果在回测中通过set_margin_rate函数人为调整了保证金比例,get_instruments返回的通常仍是合约的基础属性,而get_margin_rate(transaction_code)函数则用于获取用户设置后的保证金比例。 - 适用范围:该函数在回测和交易模块中均可使用。
Q&A
Q: PTrade中如何修改回测时的期货保证金比例?
A: 可以使用 set_margin_rate(transaction_code, margin_rate) 函数。例如 set_margin_rate("CU", 0.08) 将沪铜品种的保证金比例设置为8%。
Q: get_instruments函数返回的数据是实时的吗?
A: 不是。get_instruments 返回的是合约的静态基础信息(如上市日、乘数、标准保证金率),这些数据在合约生命周期内通常是固定的,不包含实时的行情数据(如最新价、涨跌幅)。
Q: 如何获取期货合约的实时行情数据?
A: 获取实时行情(如最新价、开盘价、成交量)应使用 get_snapshot(security) 或 get_price(...) 接口,而不是 get_instruments。