🚀 AI 一键生成 joinquant 策略代码

JoinQuant 期货策略风控:如何为不同品种设置自定义保证金比例?

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

问题描述

在期货交易中,如何修改某个品种的保证金比例?

解决方案

在聚宽(JoinQuant)的期货交易策略中,修改保证金比例是通过 set_option 函数配合 futures_margin_rate 参数来实现的。

您可以针对全局特定品种特定合约设置不同的保证金比例。该设置通常在 initialize 函数中进行。

修改保证金比例的方法

使用 set_option 函数,参数格式如下:

  1. 全局设置(所有期货合约生效):
    set_option('futures_margin_rate', value)
  2. 按品种设置(例如针对所有黄金合约):
    set_option('futures_margin_rate.品种代码', value)
  3. 按具体合约设置(例如针对 AU1709):
    set_option('futures_margin_rate.合约代码', value)

其中 value 是一个浮点数,代表保证金比例(例如 0.1 代表 10%)。

代码示例

以下是一个完整的 initialize 函数示例,展示了如何设置不同层级的保证金比例:

# -*- coding: utf-8 -*-
def initialize(context):
    # 1. 全局设置:将所有期货合约的保证金比例设为 15%
    set_option('futures_margin_rate', 0.15)
    
    # 2. 按品种设置:将所有黄金(AU)期货的保证金比例设为 9%
    # 注意:品种代码不包含交易所后缀
    set_option('futures_margin_rate.AU', 0.09)
    
    # 3. 按合约设置:将螺纹钢 1910 合约(RB1910)的保证金比例设为 8%
    # 注意:具体合约建议包含交易所后缀,如 .XSGE
    set_option('futures_margin_rate.RB1910.XSGE', 0.08)
    
    # 设定账户为期货账户
    set_subportfolios([SubPortfolioConfig(cash=context.portfolio.starting_cash, type='futures')])

注意事项

  1. 优先级:具体合约设置 > 品种设置 > 全局设置。
  2. 生效机制
    • 中金所股指期货(如 IF, IC, IH):使用跨品种单边保证金机制,对于所有中金所股指期货标的,只收取双向持仓中金额更大那一边的保证金。
    • 其他商品期货:使用合约单边保证金机制,对于同一个合约的双向持仓,只收取金额更大那一边的保证金。
  3. 默认值:如果不设置,系统会有默认的保证金比例。例如股指期货默认为 0.15 (15%),螺纹钢 (RB) 默认为 0.05 (5%)。具体默认值可参考 API 文档中的期货保证金比例表。

Q&A

Q: 修改保证金比例的代码应该放在哪里?
A: 通常建议放在 initialize(context) 函数中,这样在策略初始化时就会生效。

Q: 如果我同时设置了全局保证金和某个品种的保证金,哪个会生效?
A: 针对该品种的设置会生效,其他未单独设置的品种则使用全局设置。具体合约的设置优先级最高,其次是品种设置,最后是全局设置。

Q: 保证金比例 value 可以设置为大于 1 的数吗?
A: 不可以。value 代表比例,通常是一个小于 1 的小数,例如 0.1 代表 10%。如果设置为 1.5 则代表 150% 的保证金,这在逻辑上虽然可行(全额交易且需额外资金),但通常不符合实际交易场景。

Q: 为什么设置了保证金比例后,回测中的资金占用和预期不符?
A: 请检查是否持有了双向仓位。除中金所外,商品期货通常是按合约单边收取保证金(收较大的一边);中金所是跨品种单边收取。此外,请确认是否考虑了合约乘数和当前价格波动的影响。