3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)平台进行融券卖出(开空单),主要使用 marginsec_open 函数。
但在调用该函数之前,必须确保策略账户已初始化为融资融券账户(stock_margin),否则无法执行信用交易。
以下是详细的步骤和代码示例:
initialize 函数中,使用 set_subportfolios 将账户类型设置为 'stock_margin'。get_marginsec_stocks)。marginsec_open(security, amount) 进行融券卖出。marginsec_open(security, amount, style=None, pindex=0)
'000001.XSHE')。以下代码展示了如何配置账户并在开盘时对平安银行进行融券卖出操作:
# -*- coding: utf-8 -*-
from jqdata import *
def initialize(context):
# 1. 设定基准
set_benchmark('000300.XSHG')
# 2. 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 3. 【关键步骤】设置账户类型为融资融券账户 ('stock_margin')
# 如果不设置,默认为普通股票账户('stock'),无法调用 marginsec_open
init_cash = context.portfolio.starting_cash
set_subportfolios([SubPortfolioConfig(cash=init_cash, type='stock_margin')])
# 设定要操作的股票
g.security = '000001.XSHE'
# 每天开盘时运行
run_daily(market_open, time='09:30')
def market_open(context):
security = g.security
# 4. 获取当前可融券的标的列表
margin_sec_stocks = get_marginsec_stocks()
# 检查标的是否在可融券列表中
if security in margin_sec_stocks:
# 获取该标的当前的融券卖出量(空头持仓)
# 注意:融资融券账户中,short_positions 存储融券卖出的仓位
short_position = context.portfolio.short_positions[security].total_amount
# 如果当前没有空头持仓,则进行融券卖出
if short_position == 0:
log.info("标的 %s 在可融券列表中,准备融券卖出" % security)
# 【核心API】融券卖出 1000 股
# 注意:amount 为正数
order_res = marginsec_open(security, 1000)
if order_res:
log.info("融券卖出成功,成交均价: %s" % order_res.price)
else:
log.info("融券卖出失败")
else:
log.info("已有空头持仓,不再开仓")
# 如果需要平仓(买券还券),使用 marginsec_close
# marginsec_close(security, 1000)
else:
log.info("标的 %s 当前不可融券" % security)
initialize 中显式设置 type='stock_margin',否则调用 marginsec_open 会报错或无效。marginsec_close(security, amount) 函数,或者使用 marginsec_direct_refund(security, amount) 进行直接还券(前提是账户里已经持有现券)。set_option('marginsec_interest_rate', value) 设置融券利率,默认通常为年化 8% 或 10%(具体视平台默认配置而定)。Q: 调用 marginsec_open 时报错 "Account type not supported" 是什么原因?
A: 这是因为没有在 initialize 中初始化融资融券账户。必须使用 set_subportfolios([SubPortfolioConfig(..., type='stock_margin')]) 将账户类型设为 stock_margin。
Q: 融券卖出后如何查询持仓?
A: 融券卖出属于空头仓位,可以通过 context.portfolio.short_positions 字典查询。例如 context.portfolio.short_positions['000001.XSHE'].total_amount。
Q: 融券卖出可以使用限价单吗?
A: 可以。marginsec_open 的第三个参数 style 可以接受 LimitOrderStyle。例如:marginsec_open('000001.XSHE', 1000, style=LimitOrderStyle(10.5)) 表示以 10.5 元的价格限价融券卖出。