本文汇总持仓数量、可卖数量、持仓 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)}")
相关阅读

评论
登录后参与讨论,与站内账号体系共用。