3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化交易平台上,进行融资融券(信用交易)需要先对策略账户进行特定配置,并调用专属的融资融券 API。本文将详细讲解如何初始化信用账户,以及如何使用 margincash_open(融资买入)和 marginsec_close(买券还券)。
默认的账户类型为普通股票账户(type='stock'),无法直接调用融资融券接口。进行信用交易时,必须在 initialize 函数中使用 set_subportfolios 建立类型为 'stock_margin' 的子账户。
pythonSubPortfolioConfig(cash=init_cash, type='stock_margin')
margincash_open向券商借入资金买入标的股票。
margincash_open(security, amount, style=None, pindex=0)security: 标的代码(如 '000001.XSHE')。amount: 买入数量(股数)。style: 订单类型,默认为市价单 MarketOrderStyle(),也可指定限价单 LimitOrderStyle(price)。pindex: 子账户序号,默认为 0。marginsec_close在进行融券卖出后,通过在二级市场买入标的股票并归还给券商,以平掉融券空头头寸。
marginsec_close(security, amount, style=None, pindex=0)security: 标的代码。amount: 买入归还的数量。style: 订单类型,默认市价单。pindex: 子账户序号,默认为 0。以下示例展示了如何在 JoinQuant 中配置融资融券账户,并在盘中分别执行融资买入(margincash_open)与买券还券(marginsec_close)操作。
import jqdata
def initialize(context):
# 1. 设定基准与真实价格模式
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
# 2. 初始化信用账户(融资融券账户)
init_cash = context.portfolio.starting_cash
set_subportfolios([SubPortfolioConfig(cash=init_cash, type='stock_margin')])
# 3. 设置融资融券利率与保证金比例(可选,系统有默认值)
set_option('margincash_interest_rate', 0.08) # 年化 8% 融资利率
set_option('marginsec_margin_rate', 1.0) # 融券保证金比率 100%
# 设定操作标的
g.security = '000001.XSHE'
# 4. 定时运行交易逻辑
run_daily(trade_margin, time='10:00')
def trade_margin(context):
security = g.security
# 检查标的是否在可融资/融券列表中
margincash_stocks = get_margincash_stocks()
marginsec_stocks = get_marginsec_stocks()
# 示例 1: 执行融资买入(margincash_open)
if security in margincash_stocks:
# 融资买入 1000 股平安银行
order_result = margincash_open(security, 1000)
if order_result:
log.info("融资买入委托成功:%s 1000股" % security)
# 示例 2: 执行买券还券(marginsec_close)
# 假设此前已存在融券空头头寸(short_positions)
subport = context.subportfolios[0]
if security in subport.short_positions:
short_amount = subport.short_positions[security].total_amount
if short_amount > 0 and security in marginsec_stocks:
# 买入 1000 股或平掉所有融券空头用于还券
close_amount = min(1000, short_amount)
order_result = marginsec_close(security, close_amount)
if order_result:
log.info("买券还券委托成功:%s %d股" % (security, close_amount))
get_margincash_stocks() 和 get_marginsec_stocks() 进行校验。marginsec_direct_refund),可以使用当日买入的券归还;但如果是执行买券还券操作,需遵循交易规则及资金保证金限制。get_margincash_stocks 与 get_marginsec_stocks 依赖交易所上一交易日披露的数据,无法获取当前未完结交易日的即时变动。