问题描述
解决方案
在 PTrade 中,查询信用账户(融资融券账户)的资产、负债和保证金信息,需要使用 get_margin_assert() 函数。
该函数仅在 两融交易模块 中可用(实盘交易),它返回一个字典,包含了信用账户的详细资产状况。
核心代码实现
以下是一个完整的策略示例,展示如何在 handle_data 中获取并打印这三项关键数据:
def initialize(context):
# 初始化设置,这里设置一个标的仅为了策略能运行
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 获取信用资产查询信息
# 注意:函数名是 get_margin_assert (assert 是 PTrade API 的拼写,非 asset)
margin_data = get_margin_assert()
if margin_data:
# 1. 获取担保资产 (即信用账户总资产)
total_assets = margin_data.get('assure_asset')
# 2. 获取负债总额
total_liabilities = margin_data.get('total_debit')
# 3. 获取可用保证金
available_margin = margin_data.get('enable_bail_balance')
# 打印日志信息
log.info("========== 信用账户资产信息 ==========")
log.info("总资产 (担保资产): %s" % total_assets)
log.info("总负债: %s" % total_liabilities)
log.info("可用保证金: %s" % available_margin)
log.info("======================================")
else:
log.info("未获取到信用资产信息,请确认当前是否为两融账号或交易环境。")
字段说明
get_margin_assert() 返回的字典中,对应的键(Key)含义如下:
| 您的需求 | 对应 API 字段名 | 说明 |
|---|---|---|
| 总资产 | assure_asset |
即“担保资产”,指信用账户内的总资产价值。 |
| 总负债 | total_debit |
负债总额,包含融资合约金额、融券合约金额及相关利息费用等。 |
| 可用保证金 | enable_bail_balance |
账户当前可用于新开仓(融资或融券)的保证金余额。 |
注意事项
- 适用范围:该函数仅支持 Ptrade 客户端,且仅在 两融交易模块(实盘)可用。普通股票账户或回测环境通常无法获取有效数据。
- 函数拼写:请特别注意函数名为
get_margin_assert(末尾是assert而不是asset),这是 PTrade API 的特定命名。 - 数据更新:该数据通常是实时或准实时的,具体更新频率取决于券商柜台的推送机制。
Q&A
Q1: get_margin_assert() 函数能查询到具体的融资或融券合约明细吗?
A1: 不能。get_margin_assert() 主要用于查询账户层面的汇总资产数据。如果您需要查询具体的合约明细(如每笔融资的开仓日期、金额等),请使用 get_margin_contract()(查询所有合约)或 get_margin_contractreal()(查询实时合约流水)。
Q2: 为什么我在回测中调用此函数返回了空字典或报错?
A2: 该函数主要设计用于实盘交易中的两融账户。在普通股票回测或未配置两融环境的回测中,该函数可能无法获取数据。如果您需要测试两融策略,请确保回测环境已开启融资融券功能(如果平台支持)或在实盘仿真环境中测试。
Q3: enable_bail_balance (可用保证金) 和 enable_balance (可用资金) 有什么区别?
A3: enable_bail_balance 是信用账户特有的概念,指可以用来作为担保品进行融资融券开仓的额度;而 enable_balance 通常指账户内的现金余额(可通过 get_crdt_fund() 查询)。在两融交易中,开仓能力主要受限于可用保证金。