3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 量化交易平台中,查询当日融资融券(两融)的实时合约流水记录,可以使用 get_margin_contractreal 函数。
以下是关于该函数的详细说明及代码示例。
get_margin_contractreal()pandas.DataFrame 对象,包含了合约流水的详细信息;若查询异常或无数据则返回 None。以下代码展示了如何在盘中(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("当前未查询到实时合约流水记录。")
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 |
get_margin_contract(查询存续合约)或其他历史查询接口。None 值判断,以防止因网络或柜台原因导致的数据获取失败进而引发报错。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 的正负值进行逻辑推断。具体业务标志代码需参考券商提供的柜台数据字典。