问题描述
解决方案
在PTrade中,查询信用账户中用于“融资买入”的可用资金(即融资可用额度),主要使用 get_margin_assert() 函数。
该函数返回一个字典,其中包含了信用账户的各项资产数据。你需要关注的字段是 fin_enable_quota(融资可用额度)。
以下是具体的代码实现和字段说明。
核心代码实现
def initialize(context):
# 初始化设置,设置一个标的以便策略运行
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 获取信用账户资产信息
# 注意:该函数仅在两融交易模块(实盘或两融回测)中可用
margin_assets = get_margin_assert()
if margin_assets:
# 1. 获取融资可用额度 (可以直接用来融资买入的金额上限)
fin_enable_quota = margin_assets.get('fin_enable_quota')
# 2. 获取融资已用额度 (已经借来的钱)
fin_used_quota = margin_assets.get('fin_used_quota')
# 3. 获取融资额度上限 (总授信额度)
fin_max_quota = margin_assets.get('fin_max_quota')
# 4. 获取可用保证金 (账户里的自有可用资金,可用于充当保证金)
enable_bail_balance = margin_assets.get('enable_bail_balance')
log.info("========== 信用账户资金详情 ==========")
log.info("融资可用额度 (可买入金额): %s" % fin_enable_quota)
log.info("融资已用额度: %s" % fin_used_quota)
log.info("融资总额度上限: %s" % fin_max_quota)
log.info("可用保证金余额: %s" % enable_bail_balance)
else:
log.info("未能获取到信用资产信息,请检查是否处于两融账号环境。")
关键字段详解
调用 get_margin_assert() 返回的字典中,与资金相关的关键字段如下:
| 字段名 | 中文含义 | 说明 |
|---|---|---|
fin_enable_quota |
融资可用额度 | 这是你最关心的字段。它表示你当前还可以向券商借多少钱来买入股票。 |
fin_used_quota |
融资已用额度 | 表示你已经借了多少钱(负债本金部分)。 |
fin_max_quota |
融资额度上限 | 券商给你核定的总融资授信额度。 |
enable_bail_balance |
可用保证金 | 账户内可用的自有资金,这部分钱可以用来买担保品,也可以作为融资买入的保证金。 |
assure_asset |
担保资产 | 账户内的总资产(现金+持仓市值)。 |
注意事项
- 适用范围:
get_margin_assert()仅支持 Ptrade客户端,且仅在 两融交易模块(包括两融回测和实盘)中可用。如果在普通股票账户回测中调用,可能会返回空字典或报错。 - 数据更新:该接口获取的是柜台的实时数据(实盘中),但在回测中依赖于回测引擎的撮合逻辑。
- 买入限制:实际能买入的股票数量,除了受限于
fin_enable_quota(钱够不够),还受限于你的维持担保比例和标的证券的折算率。如果维持担保比例过低,即使有额度也可能无法开新仓。
Q&A
Q: fin_enable_quota 和 enable_bail_balance 有什么区别?
A: fin_enable_quota 是借贷额度,代表你还能从券商那里借多少钱;enable_bail_balance 是你的自有资金(可用保证金),代表你账户里还没用掉的现金。融资买入时,使用的是借贷额度,但需要自有资金或持仓作为担保。
Q: 如果我想查询某一只特定股票最大能融资买入多少股,用哪个函数?
A: 请使用 get_margincash_open_amount(security, price=None)。该函数会综合考虑你的可用额度、保证金比例以及该股票的折算率,直接返回该股票的最大可买数量。
Q: 为什么我在回测的 initialize 里调用这个函数报错?
A: 交易类和资产查询类函数通常建议在 handle_data、before_trading_start 或 run_daily 调用的函数中使用。在 initialize 阶段,策略尚未正式启动交易循环,账户数据可能尚未初始化完毕。