问题描述
/
解决方案
在 ptrade 量化交易平台中,进行融资融券(两融)交易时,可以通过 get_margin_contract() 接口查询合约信息。其中,compact_status 字段代表了合约状态。
“未形成负债”的含义
当 compact_status 的值为 "5" 时,表示该合约的状态为 “未形成负债”。
这通常意味着:
- 委托未成交或已撤单:您发起了融资买入或融券卖出的委托,但该委托尚未成交,或者在成交前已经被撤销,因此没有实际占用券商的资金或券源,未产生实际负债。
- 自有资金/券足额:在某些柜台逻辑中,如果您的账户内有足额的自有资金或自有证券,系统优先使用了自有资产完成交易,从而没有触发实际的融资或融券负债。
ptrade 中完整的合约状态字典 (compact_status)
根据 ptrade API 数据字典,compact_status 包含以下几种状态:
- "0" -- 开仓未归还
- "1" -- 部分归还
- "2" -- 合约已过期
- "3" -- 客户自行归还
- "4" -- 手工了结
- "5" -- 未形成负债
如何在策略中查询合约状态?
您可以使用 get_margin_contract() 函数来获取当前账户的合约信息,并筛选出特定状态的合约:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 获取所有合约信息,返回 DataFrame
df_contracts = get_margin_contract()
if df_contracts is not None and not df_contracts.empty:
# 筛选出“未形成负债”的合约记录
no_liability_contracts = df_contracts[df_contracts['compact_status'] == '5']
log.info("未形成负债的合约记录:\n%s" % no_liability_contracts)
在编写两融策略时,正确理解和处理这些合约状态,有助于精准计算账户的实际负债和可用额度,避免因状态误判导致的重复委托或资金计算错误。