KB / ARTICLE

账户、持仓与订单查询

策略文档修订 R1发布于 2026-11-05

本文汇总持仓数量、可卖数量、持仓 Bar 数、账户快照,以及活动订单、单笔订单与已闭合交易的查询接口。

持仓查询

get_position(symbol=None)

读取净持仓数量。多头为正,空头为负,无持仓为 0.0。

参数 类型 默认值 说明
symbol str \ None 当前标的 省略时使用当前 Bar 或 Tick 的代码。盘前、定时回调里要写出代码

返回值:float。

from qmfquant import  Strategy


class MyStrategy(Strategy):

    def on_bar(self, bar) -> None:
        qty = self.get_position(bar.symbol)
        qty = self.get_position(bar.symbol)

get_available_position(symbol=None)

读取当前可卖、可平数量。参数与 get_position() 相同。

返回值:float。可能小于总持仓。股票 T+1 下,当天买入的部分不在这个数量里。

判断能否卖出用这个返回值。总持仓用 get_position()。

from qmfquant import  Strategy


class MyStrategy(Strategy):

    def on_bar(self, bar) -> None:
        available = self.get_available_position(bar.symbol)
        if available >= 100:
            self.sell(bar.symbol, quantity=available)

get_holding_bars(symbol=None)

读取当前连续持仓经过的 Bar 数。参数与 get_position() 相同。

返回值:int。未持仓为 0。持仓归零或方向反转后重新计数。

实盘恒返回 0。需要“持有 N 根 K 线后离场”时,在 on_trade() 里自己记录入场时间或 bar 序号。

from qmfquant import  Strategy


class MyStrategy(Strategy):

    def on_bar(self, bar) -> None:
        bars = self.get_holding_bars(bar.symbol)  

positions

无参数。当前全部非零持仓。

返回值:dict[str, float]。键是标的代码,值是净持仓数量。空仓时为 {}。

from qmfquant import  Strategy


class MyStrategy(Strategy):

    def on_bar(self, bar) -> None:
        for symbol, qty in self.positions.items():
            self.log(f"{symbol} 持仓={qty}")

position

无参数。当前事件标的的仓位对象,适合单标的的 on_bar()、on_tick()。多标的要查指定代码时用 get_position(symbol)。

参数 参数名称 参数类型 描述
size 净持仓 float 与 get_position() 的当前标的结果相同
available 可卖数量 float 与 get_available_position() 的当前标的结果相同
entry_price 成本价 float 持仓成本
avg_price 成本价 float 与 entry_price 相同
from qmfquant import  Strategy


class MyStrategy(Strategy):

    def on_bar(self, bar) -> None:
        pos = self.position
        self.log(f"持仓={pos.size} 可卖={pos.available} 成本={pos.entry_price}")

账户查询 get_account()

无参数。返回字典,用 account["cash"] 或 account.get("cash") 读取。不是列表,也不是对象。普通股票策略最常使用 cash、equity、market_value、frozen_cash 和 free_margin。

参数 参数名称 参数类型 描述
cash 现金 float 现金余额
equity 账户权益 float 现金加持仓市值
market_value 持仓市值 float 当前持仓市值。空仓时为 0.0
notional_value 名义价值 float 名义持仓价值。股票现货空仓时为 0.0
frozen_cash 冻结资金 float 未完成订单占用的资金
free_margin 可用资金 float 当前可用资金。现金账户且无冻结时等于 cash
margin 占用保证金 float 当前保证金占用。与 used_margin 数值相同
used_margin 已用保证金 float 已占用保证金
unrealized_pnl 未实现盈亏 float 浮动盈亏
borrowed_cash 融资负债 float 现金为负时的负债。现券账户为 0.0
short_market_value 空头市值 float 空头持仓市值。现券账户为 0.0
maintenance_ratio 维持担保比例 float 信用账户维持担保比例。现券样本为 0.0
account_mode 账户模式 str "cash" 或 "margin"。现券回测为 "cash"
accrued_interest 累计利息 float 累计计提利息
daily_interest 当日利息 float 当日计提利息
from qmfquant import  Strategy


class MyStrategy(Strategy):

    def on_bar(self, bar) -> None:
        account = self.get_account()
        free_cash = float(account.get("cash", 0)) - float(account.get("frozen_cash", 0))
        self.log(f"权益={account.get('equity', 0):.2f} 估算未冻结现金={free_cash:.2f}")

账户字典是调用时点的快照。不要长期保存后当作实时账户使用。

信用账户回测若需融资/融券,应在任务或回测配置中显式切换到 margin 并打开 enable_short_sell。现券现金账户不要按信用账户语义编写。

订单与成交查询

get_open_orders(symbol=None)

读取尚未结束的订单。已成交、已撤销、已拒绝、已过期的不在其中。元素字段见「Order 订单对象」。

参数 类型 默认值 说明
symbol str \ None None 填写后只查该标的。省略则查当前全部活动订单

返回值:list[Order]。没有活动订单时为 [],不是 None。

from qmfquant import  Strategy


class MyStrategy(Strategy):

    def on_bar(self, bar) -> None:
        if self.get_open_orders(bar.symbol):
            return
        self.buy(bar.symbol, quantity=100)

get_order(order_id)

按订单号查一笔订单,包括已经结束的。

参数 类型 说明
order_id str 订单号,对应 OrderReceipt.primary 或 order.id

返回值:找到时为 Order,找不到时为 None。实盘能查到的范围取决于交易通道。

from qmfquant import  Strategy


class MyStrategy(Strategy):

    def on_bar(self, bar) -> None:
        receipt = self.get_order(bar.symbol)
        order = self.get_order(receipt.primary)
        if order is not None:
            self.log(f"{order.id} {order.status} {order.filled_quantity}/{order.quantity}")

get_trades()

无参数。读取已经完成开平配对的交易。未平仓的不会出现。元素字段见「ClosedTrade 闭合交易」。

返回值:list[ClosedTrade]。没有闭合交易时为 []。

on_trade() 每次收到的是一笔成交,参数是 Trade。这里返回的是配对完成后的 ClosedTrade。两者都不是字典。

from qmfquant import  Strategy


class MyStrategy(Strategy):

    def on_bar(self, bar) -> None:
        closed = self.get_trades()
        self.log(f"已平仓笔数={len(closed)}")

相关阅读

已复制到剪贴板
策略文档修订 R1

返回策略文档板块

评论