3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 平台的两融(融资融券)交易中,margincash_close(卖券还款)与 margincash_direct_refund(直接还款)是两种用于偿还融资负债的 API 接口。二者在还款资金来源、接口入参以及交易机制上存在本质区别。
| 区别维度 | 卖券还款 (margincash_close) |
直接还款 (margincash_direct_refund) |
|---|---|---|
| 资金/证券来源 | 卖出当前持有的担保品股票,使用变现资金偿还融资负债。 | 使用账户内已有的可用现金(可用资金)直接偿还融资负债。 |
| 交易行为 | 会产生证券卖出报单(向柜台报委托单)。 | 不产生证券买卖报单,仅涉及账户资金的内部划转与负债清偿。 |
| 核心参数 | security(股票代码), amount(卖出数量), limit_price(委托限价)。 |
value(还款金额,单位:元)。 |
| 交易限制 | 受交易时间、股票停牌、限价笼子及成交流动性影响。 | 只要账户内有足够的可用现金即可随时/即时执行。 |
margincash_closemargincash_close(security, amount, limit_price=None)
amount 需输入正整数(如卖数 100 股则填 100)。limit_price,系统默认使用行情快照最新价报单。margincash_direct_refundmargincash_direct_refund(value)
value 为还款金额(float),不能超过账户当前负债总额或可用资金。get_margin_assert() 获取当前融资负债总额。以下示例展示了如何在 ptrade 策略中查询信用资产,并根据条件分别执行直接还款与卖券还款:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 1. 查询两融信用资产信息
margin_assert = get_margin_assert()
if not margin_assert:
return
# 获取融资合约金额(负债)与可用现金
fin_compact_balance = margin_assert.get('fin_compact_balance', 0.0)
cash = context.portfolio.cash
# 场景 A:如果可用现金大于等于负债金额,且存在负债,执行【直接还款】
if fin_compact_balance > 0 and cash >= fin_compact_balance:
log.info("执行直接还款,还款金额: %s" % fin_compact_balance)
margincash_direct_refund(fin_compact_balance)
# 场景 B:如果现金不足以还债,但达到卖出止盈条件,执行【卖券还款】
elif fin_compact_balance > 0:
# 查询当前股票最大可卖还款数量
close_dict = get_margincash_close_amount(g.security)
max_close_amount = close_dict.get(g.security, 0) if close_dict else 0
if max_close_amount >= 100:
log.info("执行卖券还款,卖出数量: %s" % max_close_amount)
margincash_close(g.security, max_close_amount)