问题描述
解决方案
在 PTrade 量化交易平台中,查询当日融资融券(两融)的实时合约流水记录,可以使用 get_margin_contractreal 函数。
以下是关于该函数的详细说明及代码示例。
1. 函数说明
- 函数名称:
get_margin_contractreal() - 功能:用于查询当日的实时合约流水信息。
- 适用范围:仅支持 PTrade客户端,且仅在 两融交易 模块可用(回测或其他模式不可用)。
- 返回值:正常情况下返回一个
pandas.DataFrame对象,包含了合约流水的详细信息;若查询异常或无数据则返回None。
2. 策略代码示例
以下代码展示了如何在盘中(handle_data)调用该接口并打印流水信息:
def initialize(context):
# 初始化策略,设置股票池(此处仅为示例)
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 获取当日实时合约流水
df_contract_real = get_margin_contractreal()
# 判断返回值是否有效
if df_contract_real is not None and not df_contract_real.empty:
log.info("查询到当日实时合约流水记录:")
log.info(df_contract_real)
# 示例:遍历打印每一条流水的合约编号和发生金额
# 注意:DataFrame的列名需参考API文档
for index, row in df_contract_real.iterrows():
compact_id = row['compact_id'] # 合约编号
stock_code = row['stock_code'] # 证券代码
occur_balance = row['occur_balance'] # 发生金额
business_flag = row['business_flag'] # 业务标志
log.info("合约编号: %s, 证券代码: %s, 业务标志: %s, 发生金额: %s" % (
compact_id, stock_code, business_flag, occur_balance
))
else:
log.info("当前未查询到实时合约流水记录。")
3. 返回数据字段说明
get_margin_contractreal 返回的 DataFrame 包含以下主要字段(具体以券商柜台实际返回为准):
| 字段名 | 说明 | 类型 |
|---|---|---|
| init_date | 交易日期 | int |
| compact_id | 合约编号 | str |
| stock_code | 证券代码 | str |
| compact_type | 合约类别 (0-融资, 1-融券, 2-其他负债) | str |
| business_flag | 业务标志 | int |
| occur_balance | 发生金额 | float |
| post_balance | 后资金额 | float |
| occur_amount | 发生数量 | float |
| post_amount | 后证券额 | float |
| occur_fare | 发生费用 | float |
| occur_interest | 发生利息 | float |
| remark | 备注 | str |
4. 注意事项
- 环境限制:该函数无法在普通股票交易账户或回测环境中使用,必须在两融实盘交易环境中运行。
- 数据时效:该接口返回的是当日的“实时”流水,即当天的开仓、还款、还券等操作产生的流水记录。如果需要查询历史合约,请使用
get_margin_contract(查询存续合约)或其他历史查询接口。 - 异常处理:在实盘策略中,建议对返回结果进行
None值判断,以防止因网络或柜台原因导致的数据获取失败进而引发报错。
Q&A
Q1: get_margin_contractreal 和 get_margin_contract 有什么区别?
A1: get_margin_contractreal 用于查询当日发生的实时合约流水(如当日新开仓、当日产生的费用等动态记录);而 get_margin_contract 用于查询当前账户中存续的合约信息(即尚未了结的负债合约状态)。
Q2: 为什么我在回测中调用此函数报错或返回 None?
A2: 该函数是交易专用函数,依赖于柜台的实时推送数据。回测环境不支持两融柜台的实时流水查询,因此无法在回测中使用。
Q3: 如何判断合约流水的具体业务类型(如是融资开仓还是卖券还款)?
A3: 可以通过返回数据中的 business_flag(业务标志)字段来判断,或者结合 compact_type(合约类别)和 occur_amount/occur_balance 的正负值进行逻辑推断。具体业务标志代码需参考券商提供的柜台数据字典。