🚀 AI 一键生成 ptrade 策略代码

PTrade 期货交易必备:如何使用 get_instruments 获取合约乘数、保证金率等信息?

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

问题描述

如何查询一个期货合约的详细信息,比如它的合约乘数和保证金比例?

解决方案

在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

注意事项

  1. 对象访问get_instruments 返回的是一个对象(Object),而不是字典(Dict)。因此需要使用点号 . 来访问属性(如 info.contract_multiplier),而不是中括号 ['contract_multiplier']
  2. 保证金比例:返回的 margin_rate 是交易所规定的标准保证金比例。如果在回测中通过 set_margin_rate 函数人为调整了保证金比例,get_instruments 返回的通常仍是合约的基础属性,而 get_margin_rate(transaction_code) 函数则用于获取用户设置后的保证金比例。
  3. 适用范围:该函数在回测和交易模块中均可使用。

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