🚀 AI 一键生成 ptrade 策略代码

PTrade 期货 API:使用 get_instruments 查询合约乘数与交易单位

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

问题描述

怎么查询期货合约的乘数和交易单位?

解决方案

在 PTrade 中,查询期货合约的合约乘数(Contract Multiplier)和交易单位(Trading Unit)主要使用 get_instruments 函数。

该函数用于获取合约的上市具体信息,返回一个包含合约详细属性的对象。

核心函数:get_instruments(contract)

  • 参数: contract (str),期货合约代码(例如:"IF2306.CCFX""CU2306.XSGE")。
  • 返回: FutureParams 对象。
  • 关键属性:
    • .contract_multiplier: 合约乘数 (float 类型)
    • .trade_unit: 交易单位 (int 类型)

代码示例

以下是一个完整的策略示例,展示如何在 before_trading_start 阶段查询并打印指定期货合约的乘数和交易单位。

def initialize(context):
    # 设置需要查询的期货合约代码
    # 示例:沪深300股指期货 (IF) 和 沪铜 (CU)
    g.future_list = ["IF2306.CCFX", "CU2306.XSGE"]
    set_universe(g.future_list)

def before_trading_start(context, data):
    for code in g.future_list:
        # 获取合约信息对象
        info = get_instruments(code)
        
        if info:
            # 获取合约乘数
            multiplier = info.contract_multiplier
            # 获取交易单位
            unit = info.trade_unit
            # 获取合约名称
            name = info.contract_name
            
            log.info("合约代码: %s, 名称: %s" % (code, name))
            log.info("合约乘数: %s" % multiplier)
            log.info("交易单位: %s" % unit)
            log.info("-" * 30)
        else:
            log.info("未查询到合约 %s 的信息" % code)

def handle_data(context, data):
    pass

返回字段说明

调用 get_instruments 后返回的对象包含以下常用字段:

属性名 类型 说明
contract_multiplier float 合约乘数 (例如股指期货通常为 300.0 或 200.0)
trade_unit int 交易单位 (例如铜为 5,表示 5吨/手)
contract_code str 合约代码
contract_name str 合约名称
exchange str 交易所代码 (如 CCFX, XSGE 等)
margin_rate float 保证金比例
delivery_date str 交割日期
listing_date str 上市日期

Q&A

Q: get_instruments 函数可以在回测和实盘中使用吗?
A: 是的,该函数在回测和交易(实盘)模块中均可使用。

Q: 如果传入的合约代码不存在或已过期,函数会返回什么?
A: 如果查询不到对应合约的信息,函数通常会返回 None 或者空对象,因此在代码中建议增加 if info: 的判断逻辑以避免报错。

Q: 合约乘数和交易单位有什么区别?
A: 在大多数商品期货中,交易单位通常指“每手多少吨/克”,合约乘数通常与交易单位数值一致(如沪铜交易单位5吨/手,乘数也是5)。但在股指期货中,交易单位通常指“手”,而合约乘数是指每个指数点代表的金额(如沪深300期货乘数为300元/点)。计算合约价值时通常使用:价格 * 合约乘数