🚀 AI 一键生成 joinquant 策略代码

如何通过 get_trades API 获取详细的每笔成交记录?

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

问题描述

如何查看我今天下的单子具体的成交时间和价格?

解决方案

在 JoinQuant 聚宽平台中,如果您想要查看今天成交的订单的具体成交时间、成交价格以及成交数量,最直接的方法是使用 get_trades() 函数。

该函数返回当天所有的成交记录(Trade对象)。需要注意的是,一个订单(Order)可能会分多次成交,get_trades() 会返回每一次具体的成交详情。

代码实现

您可以在策略的 handle_dataafter_trading_end 函数中调用此代码来打印当天的成交详情。

# -*- coding: utf-8 -*-
def after_trading_end(context):
    # 获取当天的所有成交记录
    trades = get_trades()
    
    log.info("------------------- 今日成交记录 -------------------")
    
    # get_trades返回的是一个dict,key是trade_id,value是Trade对象
    for trade in trades.values():
        # 打印具体信息
        log.info("订单ID: %s" % trade.order_id)
        log.info("标的: %s" % trade.security)
        log.info("成交时间: %s" % trade.time)
        log.info("成交价格: %s" % trade.price)
        log.info("成交数量: %s" % trade.amount)
        log.info("--------------------------------------------------")

关键对象说明

get_trades() 返回的字典中包含 Trade 对象,该对象的主要属性如下:

  • trade.time: 具体的成交时间(datetime.datetime对象)。
  • trade.price: 该笔成交的执行价格。
  • trade.amount: 该笔成交的数量(正数)。
  • trade.security: 对应的标的代码。
  • trade.trade_id: 唯一的成交记录ID。
  • trade.order_id: 对应的订单ID(可以通过此ID关联到原始订单)。

补充说明:get_orders()get_trades() 的区别

  • get_orders(): 获取当天的订单信息。如果一个订单只成交了一部分,或者分多次成交,Order 对象中的 price 属性通常显示的是平均成交价filled 显示的是累计成交数量。
  • get_trades(): 获取当天的成交流水。如果您的一个大单被拆分成 5 笔小单成交,这里会显示 5 条记录,每条记录都有精确的时间和当时的价格。

如果您需要精确到“具体的成交时间和价格”,请务必使用 get_trades()


Q&A

Q: get_trades() 能获取历史日期的成交记录吗?
A: 不能。get_trades() 仅返回回测或模拟交易当天的成交记录。如果需要分析历史成交,需要在回测过程中每天通过 after_trading_end 将数据记录到全局变量或写入文件中,或者在回测结束后查看回测详情页的“交易详情”列表。

Q: 为什么我下了单,但是 get_trades() 返回是空的?
A: 这通常意味着订单尚未成交。可能原因包括:订单未满足价格条件(限价单)、股票停牌、跌停无法卖出或涨停无法买入、或者资金/持仓不足导致废单。您可以配合 get_orders() 查看订单状态(status)是否为 open(未成交)或 rejected(已拒绝)。

Q: trade.amount 是正数还是负数?
A: 在 Trade 对象中,amount 通常为正数,表示成交的数量。要判断是买入还是卖出,需要通过关联的 order_id 获取 Order 对象,查看其 side('long'/'short')和 action('open'/'close')属性,或者查看 Order 对象的 is_buy 属性。