问题描述
解决方案
在融资交易(Margin Trading)中,归还借款主要有两种方式:卖券还款(Sell to Repay)和直接还款(Direct Repay)。
选择哪种方式,核心取决于你是否希望继续持有这只股票以及账户内是否有足够的可用现金。
以下是这两种方式的详细区别及在 JoinQuant 聚宽平台中的实现代码:
1. 卖券还款 (Sell to Repay)
含义:
你将融资买入的股票卖出,卖出获得的资金会自动优先用于偿还融资负债。
特点:
- 持仓变化:股票持仓减少或清空。
- 资金变化:不需要额外的现金。卖出股票的钱还掉负债后,剩余的钱(如果有盈利)会回到可用资金;如果亏损,则扣除本金。
- 费用:因为涉及卖出操作,需要支付交易佣金和印花税。
- 适用场景:你认为股价已经见顶,或者需要止盈/止损,不再看好后市,希望平仓了结。
聚宽 API 实现:
使用 margincash_close 函数。
# 示例:卖出 1000 股平安银行,资金用于还款
# 如果卖出金额大于负债,多余部分变成现金;如果小于负债,剩余负债仍需偿还
margincash_close('000001.XSHE', 1000)
2. 直接还款 (Direct Repay / Cash Repay)
含义:
你使用账户里现有的可用现金(Available Cash)直接偿还融资负债,而不卖出股票。
特点:
- 持仓变化:股票持仓不变,你依然持有这些股票。
- 资金变化:账户内的可用现金减少。
- 费用:不涉及股票交易,因此没有交易佣金和印花税。
- 适用场景:你依然看好这只股票的后市,不想卖出,但想降低杠杆率、减少融资利息支出,或者账户里刚好有闲置资金。
聚宽 API 实现:
使用 margincash_direct_refund 函数。
# 示例:使用账户现金直接归还 10000 元融资负债
# 前提是 context.portfolio.available_cash >= 10000
margincash_direct_refund(10000)
总结对比表
| 比较维度 | 卖券还款 (margincash_close) | 直接还款 (margincash_direct_refund) |
|---|---|---|
| 股票持仓 | 减少 (股票被卖出) | 不变 (继续持有股票) |
| 资金来源 | 卖出股票所得资金 | 账户内原有的可用现金 |
| 交易成本 | 有 (佣金 + 印花税) | 无 (仅涉及资金划转) |
| 杠杆率 | 显著降低 (资产和负债同时减少) | 降低 (负债减少,净资产不变) |
| 核心目的 | 平仓获利或止损 | 降低负债/利息,长期持股 |
策略建议
- 如果看涨:如果你认为股票还会涨,且账户有现金,应选择直接还款。这样既降低了利息成本,又保留了上涨带来的收益潜力,且节省了卖出的交易费用。
- 如果看跌:如果你认为趋势坏了,应选择卖券还款。这能让你快速离场,锁定收益或截断亏损。
- 如果现金不足:如果账户没有可用现金,你只能选择卖券还款(或者卖出其他股票筹集现金后再直接还款)。
Q&A
Q: 融资买入的股票,必须当天还款吗?
A: 不需要。融资交易通常没有强制的当天还款限制(除非触及维持担保比例的平仓线)。你可以持有过夜,但需要支付融资利息。利息通常按日计提。
Q: 如果我卖券还款的金额不足以偿还全部负债怎么办?
A: 系统会先用卖出的资金偿还部分负债,剩余未偿还的负债会继续保留在账户中,并继续产生利息。
Q: 直接还款时,如果输入的金额大于我的实际负债会怎样?
A: 在聚宽的回测机制中,通常会偿还全部剩余负债,多余的金额不会被扣除。但在实盘中,建议先查询当前的融资余额 (fin_value),按需还款。
Q: 卖券还款和普通卖出(order_target)有什么区别?
A: 在融资融券账户中,margincash_close 是专门用于偿还融资负债的指令。虽然普通的卖出操作在某些券商柜台逻辑中也会优先还款,但在编写量化策略时,为了逻辑清晰和确保行为符合预期,建议明确使用 margincash_close 来处理融资负债,使用 order 系列函数处理普通自有资金持仓。