3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)量化交易平台中,进行融资融券交易时,除了通过“卖券还款”(margincash_close)之外,如果账户内有可用现金,还可以使用 margincash_direct_refund API 实现现金直接偿还融资负债。本指南将详细介绍信用账户的初始化与直接还款的完整流程。
聚宽默认的账户类型(type='stock')不支持融资融券操作。要使用融资融券功能,必须在 initialize 函数中通过 set_subportfolios 设定账户类型为 'stock_margin'。
def initialize(context):
# 设置初始资金
init_cash = context.portfolio.starting_cash
# 设定账户类型为融资融券账户
set_subportfolios([SubPortfolioConfig(cash=init_cash, type='stock_margin')])
# 可选:设置融资利率(默认年化 8%)
set_option('margincash_interest_rate', 0.08)
# 可选:设置融资保证金比率(默认 100%)
set_option('margincash_margin_rate', 1.0)
margincash_direct_refund(value, pindex=0)value:还款金额(单位:元)。pindex:子账户序号,在使用多仓位时指定,默认为 0。None。以下是一个简单的示例,展示如何先进行融资买入,并在触发特定条件时使用现金直接还款:
import jqdata
def initialize(context):
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
# 1. 初始化融资融券账户
init_cash = context.portfolio.starting_cash
set_subportfolios([SubPortfolioConfig(cash=init_cash, type='stock_margin')])
# 全局变量控制交易
g.security = '000001.XSHE'
g.bought = False
def handle_data(context, data):
security = g.security
subportfolio = context.subportfolios[0]
# 2. 检查标的是否在标的列表中并进行融资买入
if not g.bought and security in get_margincash_stocks():
# 融资买入 1000 股平安银行
order_obj = margincash_open(security, 1000)
if order_obj is not None:
log.info("融资买入成功:%s" % security)
g.bought = True
# 3. 当存在融资负债且账户有可用现金时,执行直接还款
if subportfolio.cash_liability > 0 and subportfolio.available_cash > 0:
# 还款金额取可用现金与总融资负债的较小者
refund_amount = min(subportfolio.available_cash, subportfolio.cash_liability)
log.info("开始执行直接还款,金额:%f" % refund_amount)
# 调用直接还款接口
margincash_direct_refund(refund_amount, pindex=0)
margincash_direct_refund 前,请确保账户内有足够的可用现金(context.subportfolios[pindex].available_cash),否则可能导致还款金额不符合预期。get_margincash_stocks() 依赖交易所披露数据,无法获取当前未完结交易日实时更新的标的变动。