🚀 AI 一键生成 joinquant 策略代码
立即体验

JoinQuant 支持期权下单吗?如何解决“账户不支持该证券代码交易”报错?

joinquant | 发布时间: 2026/8/10
以下内容由 EasyQuant 生成。

问题描述

JoinQuant 支持期权下单吗?如何排查证券账户不支持交易?
在聚宽提交期权订单时提示账户不支持该证券代码交易,如何确认平台的期权下单支持范围、券商权限和合约代码格式?

解决方案

一、 JoinQuant 是否支持期权下单?

根据聚宽官方文档,JoinQuant 目前不支持期权下单交易(包括回测和模拟盘)

  • 数据支持:聚宽提供期权的基本数据。例如,上交所 ETF 期权(2017-01-01 起)和商品期权(2019-12-02 起)的 Tick 数据(提供买五卖五数据),可以通过 get_ticks 获取。同时,可以通过 get_all_securities(['options']) 获取期权合约列表。
  • 交易支持:官方文档明确指出:“目前期权仅提供数据,不支持回测模拟等”。因此,您无法在聚宽平台提交期权交易订单。

二、 为什么会提示“账户不支持该证券代码交易”或“创建订单失败”?

如果您在交易股票、基金或期货时遇到此类报错,通常是由以下原因引起的,请按照以下步骤进行排查:

1. 子账户类型(SubPortfolio)与交易标的不匹配(最常见原因)

聚宽默认的初始仓位(subportfolios[0])类型为 'stock'(仅允许买卖股票和场内基金)。如果您尝试在此账户下交易期货或进行融资融券,系统会报错或拒绝订单。

  • 排查与解决方法
    必须在 initialize 函数中调用 set_subportfolios 初始化对应的子账户类型。
    • 交易期货
      def initialize(context):
          init_cash = context.portfolio.starting_cash
          # 设定账户为期货账户类型
          set_subportfolios([SubPortfolioConfig(cash=init_cash, type='futures')])
      
    • 进行融资融券交易
      def initialize(context):
          init_cash = context.portfolio.starting_cash
          # 设定账户为融资融券账户类型
          set_subportfolios([SubPortfolioConfig(cash=init_cash, type='stock_margin')])
      
    • 多账户配置(同时交易股票和期货):
      def initialize(context):
          init_cash = context.portfolio.starting_cash / 2
          set_subportfolios([
              SubPortfolioConfig(cash=init_cash, type='stock'),      # subportfolios[0]
              SubPortfolioConfig(cash=init_cash, type='futures')      # subportfolios[1]
          ])
      
      注意:下单时需通过 pindex 参数指定对应的子账户序号(如期货下单指定 pindex=1)。

2. 证券代码格式或后缀错误

聚宽对不同交易市场的代码后缀有严格规定。如果后缀不正确,系统将无法识别标的,导致下单失败。

  • 标准后缀格式
    • 上海证券交易所:.XSHG(如 '600519.XSHG'
    • 深圳证券交易所:.XSHE(如 '000001.XSHE'
    • 中金所(金融期货):.CCFX(如 'IF2109.CCFX'
    • 上期所(商品期货):.XSGE(如 'RB2109.XSGE'
    • 大商所(商品期货):.XDCE(如 'A2109.XDCE'
    • 郑商所(商品期货):.XZCE(如 'SR109.XZCE'
    • 上海国际能源中心:.XINE(如 'SC2109.XINE'
  • 解决方法
    使用 normalize_code() 函数将其他格式的代码转换为聚宽标准代码:
    # 输出 ['000001.XSHE']
    print(normalize_code('000001')) 
    

3. 尝试直接对“主力连续合约”或“指数”下单

在期货交易中,AG9999.XSGE(主力合约)和 AG8888.XSGE(指数)仅用于获取数据,不能直接下单交易

  • 解决方法
    必须使用 get_dominant_future 获取当前实际的主力具体合约代码,再进行下单:
    # 获取白银实际主力合约,如 'ag2112.XSGE'
    real_code = get_dominant_future('AG') 
    order(real_code, 1)
    

4. 标的停牌、未上市或已退市

如果标的处于停牌状态、尚未上市或已经退市,提交订单也会失败。

  • 排查方法
    在下单前通过 get_current_data() 检查标的是否停牌:
    current_data = get_current_data()
    if current_data['000001.XSHE'].paused:
        log.info("该股票已停牌,无法交易")