【聚宽 JoinQuant】聚宽如何获取持仓和订单?get_orders()与get_open_orders()教程

本方案由 ++EasyQuant AI++++量化助手++ 提供。

问题背景

聚宽策略实盘或模拟盘运行时,不能只依赖买卖信号,还需要知道当前持仓、当天已提交订单和未完成订单。通过查询账户状态,可以避免重复下单,并为止损、调仓和异常处理提供依据。

完整代码示例

复制代码
def initialize(context):
    g.security = "510300.XSHG"

    set_benchmark("000300.XSHG")

    # 每天开盘后检查账户状态
    run_daily(
        check_account_status,
        time="09:35"
    )


def check_account_status(context):
    print("========== 账户资产 ==========")
    print("总资产:", context.portfolio.total_value)
    print("可用现金:", context.portfolio.available_cash)

    print("========== 当前持仓 ==========")

    positions = context.portfolio.positions

    if not positions:
        print("当前无持仓")
    else:
        for stock, position in positions.items():
            if position.total_amount <= 0:
                continue

            print(
                "股票=%s,持仓=%d,可卖=%d,成本=%.2f,现价=%.2f"
                % (
                    stock,
                    position.total_amount,
                    position.closeable_amount,
                    position.avg_cost,
                    position.price
                )
            )

    print("========== 当日未完成订单 ==========")

    open_orders = get_open_orders()

    if not open_orders:
        print("当前无未完成订单")
    else:
        for order_id, order in open_orders.items():
            print(
                "订单=%s,股票=%s,数量=%d,已成交=%d,状态=%s"
                % (
                    order_id,
                    order.security,
                    order.amount,
                    order.filled,
                    order.status
                )
            )


def handle_data(context, data):
    # 示例:没有未完成订单时才允许发出买入委托
    open_orders = get_open_orders()

    if open_orders:
        return

    position = context.portfolio.positions[g.security]

    # 空仓时才允许买入
    if position.total_amount == 0:
        order_value(
            g.security,
            context.portfolio.available_cash * 0.3
        )


def after_trading_end(context):
    print("========== 当日全部订单 ==========")

    orders = get_orders()

    for order_id, order in orders.items():
        print(
            "订单=%s,股票=%s,状态=%s,成交数量=%d"
            % (
                order_id,
                order.security,
                order.status,
                order.filled
            )
        )

注意事项

  1. context.portfolio.positions 保存当前持仓信息。

  2. get_open_orders() 返回当日未完成订单,可用于防止策略重复下单。

  3. get_orders() 可查询当天全部订单,包括已成交、已撤销和拒绝订单。

  4. 委托已提交不代表成交,策略逻辑应区分订单状态与实际持仓。

  5. A 股卖出时应使用 closeable_amount 判断可卖数量,避免忽略 T+1 规则。

总结

聚宽账户状态管理应同时关注"持仓、可用现金、未完成订单和最终订单状态"。这是避免重复交易、构建稳定实盘策略的基础。

相关推荐
Zero Lu17 小时前
国内如何用 Opus 5.5 生成视频?Cyberbara Motion 案例与提示词分享
人工智能·aigc·音视频·提示词
loulanyue_17 小时前
10000P国产算力破壁上线,算电协同与超智融合打破算力孤岛:高文院士图灵奖得主纵论世界算力网新纪元——读2026世界算力网大会实录
人工智能·大模型·架构设计·高性能计算·算力网络
Thneonl17 小时前
0.18 也被 DENY:治理必须是台确定性机器
人工智能·架构
老猫聊AI17 小时前
Qwen-image-2.1 本地部署保姆级教程 | 首页
人工智能·llm
FridaySunny17 小时前
Agent 工作交接:继续、压缩还是新开?120 次运行的会话策略实验
人工智能
狂潮lister17 小时前
狂潮 · 元理论v1.0-原创架构设计-AI 网关 | 第9篇:KC-AI‑Gateway(一套可审计的大模型网关完整架构实践)|【完整版】
人工智能·后端
林澈在路上17 小时前
AI做歌工具怎么拆人声伴奏?分轨导出指南
人工智能·ai音乐·melo音乐
方方洛17 小时前
ray教程-14-RayTune与超参搜索
人工智能·分布式·机器学习
王吉伟17 小时前
Anthropic 官方指南:多智能体不等于更强大
人工智能·ai·语言模型·自动化
荆棘鸟智能17 小时前
扬尘在线监测数据接入与异常清洗:从断点补传到质量审计
人工智能·算法·系统架构