🚀 AI 一键生成 joinquant 策略代码

JoinQuant 停止策略时如何自动清仓?一键清仓方法详解

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

问题描述

一创实盘-如何关闭交易的时候清仓?

比如我运行某个多因子策略,买入并持有50只股票,有一天我不想运行了,点了"关闭交易"这个按钮,这个时候之前策略持有的50只股票还在吗?是自动给卖出,还是需要手动一个一个卖出?如果是手动卖出的话就麻烦了,50只股票呢!

解决方案

首先需要特别说明的是,根据 JoinQuant 官方公告,一创聚宽已于 2023-12-29 停止维护,聚宽目前没有提供任何形式的实盘及交易通道服务。以下解答主要针对 JoinQuant 平台上的模拟交易环境。

点击“关闭交易”会自动清仓吗?

不会自动清仓。

当您在 JoinQuant 平台上点击“关闭交易”或停止运行某个模拟交易策略时,系统仅仅是停止了该策略代码的继续执行。您账户中当前持有的股票(例如那 50 只股票)依然会保留在您的模拟账户中,系统不会自动帮您卖出。

如何避免手动一个一个卖出?

如果您不想手动去卖出这 50 只股票,最简单的方法是在您决定“关闭交易”之前,修改一下策略代码,让策略帮您执行一键清仓,等清仓完成后,您再点击“关闭交易”。

一键清仓代码示例

您可以将策略的 handle_datamarket_open 函数临时修改为以下清仓逻辑:

# 导入聚宽函数库
import jqdata

def initialize(context):
    # 每天开盘时运行清仓函数
    run_daily(clear_all_positions, time='09:30')

def clear_all_positions(context):
    # 获取当前账户中所有的持仓标的
    positions = context.portfolio.positions
    
    # 如果没有持仓,直接返回
    if len(positions) == 0:
        log.info("当前无持仓,无需清仓。")
        return
        
    # 遍历所有持仓并卖出
    for security in positions:
        # 检查是否有可卖出的仓位(避免停牌或T+1限制导致报错)
        if positions[security].closeable_amount > 0:
            # 使用 order_target 将目标持仓设为 0,即全部卖出
            order_target(security, 0)
            log.info("执行清仓,卖出: %s" % security)
        else:
            log.info("标的 %s 当前无可用可卖仓位(可能受T+1或停牌限制)。" % security)

操作步骤:

  1. 在模拟交易运行界面,点击**“替换代码”**(或暂停后修改代码)。
  2. 将上述清仓代码替换掉您原来的交易逻辑。
  3. 让策略在下一个交易日开盘时运行一次,系统会自动遍历您的 50 只股票并下达卖出指令。
  4. 查看交易日志,确认所有股票都已成功卖出(注意 T+1 规则,当天买入的股票当天无法卖出)。
  5. 确认空仓后,您就可以放心地点击**“关闭交易”**了。