3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易平台中,监控融资融券(两融)账户的实时流水、合约发生额以及日间利息变化,主要依赖于信用账户专属的查询接口。通过结合 get_margin_contractreal(实时合约流水查询)和 get_margin_contract(合约查询)两个接口,您可以实现高频、精细化的信用账户监控。
get_margin_contractreal() - 实时合约流水查询
occur_balance: 发生金额(融资金额变化)occur_amount: 发生数量(融券数量变化)occur_interest: 发生利息post_balance / post_interest: 变动后的余额与余利息compact_type: 合约类别(0-融资,1-融券,2-其他负债)get_margin_contract() - 合约明细查询
real_compact_interest: 日间实时利息金额(动态更新的累计利息)real_compact_balance: 日间实时合约金额total_debit: 负债总额以下示例展示了如何在 ptrade 中利用 run_interval 定时器,每隔 10 秒自动获取并对比两融流水与利息变化:
def initialize(context):
# 设置操作标的
g.security = '600570.SS'
set_universe(g.security)
# 开启定时任务,每10秒监控一次信用账户流水与利息
run_interval(context, monitor_margin_account, seconds=10)
# 记录上次处理的流水ID,避免重复打印
g.last_processed_flow_ids = set()
def monitor_margin_account(context):
log.info("====== 开始执行两融账户实时监控 ======")
# 1. 查询实时合约流水
try:
df_flow = get_margin_contractreal()
if df_flow is not None and not df_flow.empty:
# 过滤出今日发生的流水
for index, row in df_flow.iterrows():
compact_id = row['compact_id']
# 如果是新产生的流水变动
if compact_id not in g.last_processed_flow_ids:
compact_type_str = "融资" if row['compact_type'] == '0' else "融券" if row['compact_type'] == '1' else "其他负债"
log.info(f"【流水变动提醒】合约ID: {compact_id} | 类型: {compact_type_str} | "
f"发生金额: {row['occur_balance']} 元 | 发生数量: {row['occur_amount']} | "
f"产生利息: {row['occur_interest']} 元 | 备注: {row['remark']}")
g.last_processed_flow_ids.add(compact_id)
else:
log.info("当前暂无实时合约流水变动。")
except Exception as e:
log.error(f"查询实时合约流水失败: {e}")
# 2. 查询当前合约的日间实时利息与负债
try:
df_contract = get_margin_contract()
if df_contract is not None and not df_contract.empty:
log.info("--- 当前未结清合约实时利息监控 ---")
for index, row in df_contract.iterrows():
# 仅监控开仓未归还(0)或部分归还(1)的活跃合约
if row['compact_status'] in ['0', '1']:
log.info(f"合约ID: {row['compact_id']} | 证券代码: {row['stock_code']} | "
f"实时合约金额: {row['real_compact_balance']} 元 | "
f"日间实时利息: {row['real_compact_interest']} 元 | "
f"归还截止日: {row['ret_end_date']}")
else:
log.info("当前无活跃的两融持仓合约。")
except Exception as e:
log.error(f"查询合约明细失败: {e}")
def handle_data(context, data):
pass
get_margin_contractreal、get_margin_contract)仅在实盘/仿真交易模块中可用,回测环境不支持此类实时流水接口。cash_group(1为普通头寸,2为专项头寸)。get_margin_contractreal 反映的是日间实时发生的流水,而利息 real_compact_interest 是由柜台根据日间持仓实时计提并动态更新的,非常适合用于日内风控和资金成本测算。