3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)策略中,下达融资买入(向券商借钱买入股票)指令,主要使用 margincash_open 函数。
关键注意事项:
默认情况下,聚宽策略的账户类型是普通股票账户(stock)。要进行融资融券操作,必须在 initialize 函数中通过 set_subportfolios 将账户类型设置为融资融券账户(stock_margin)。
以下是具体的步骤和代码示例:
initialize 中设置 type='stock_margin'。get_margincash_stocks() 检查标的是否属于可融资标的。margincash_open(security, amount) 进行融资买入。# -*- coding: utf-8 -*-
from jqdata import *
def initialize(context):
# 1. 设定账户为融资融券账户 (必须步骤)
# 如果不设置,默认为普通账户,无法调用融资接口
set_subportfolios([SubPortfolioConfig(cash=context.portfolio.starting_cash, type='stock_margin')])
# 设定沪深300作为基准
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 设定融资利率 (可选,默认8%)
set_option('margincash_interest_rate', 0.08)
# 设定融资保证金比率 (可选,默认100%)
set_option('margincash_margin_rate', 1.0)
# 每天开盘时运行
run_daily(market_open, time='09:30')
def market_open(context):
security = '000001.XSHE' # 平安银行
# 2. 获取当前市场上所有可融资的标的列表
margin_stocks = get_margincash_stocks()
# 检查标的是否可融资
if security in margin_stocks:
# 3. 下达融资买入指令
# 参数:标的代码,数量(股)
# 这里的 1000 表示融资买入 1000 股
order = margincash_open(security, 1000)
if order:
log.info(f"融资买入成功: {security}, 数量: 1000")
else:
log.info(f"融资买入失败: {security}")
else:
log.info(f"{security} 不是融资标的,无法进行融资买入")
# 打印当前账户的融资负债
# cash_liability 代表融资负债金额
log.info(f"当前融资负债: {context.portfolio.cash_liability}")
margincash_open用于融资买入标的。
margincash_open(security, amount, style=None, pindex=0)security: 标的代码(如 '000001.XSHE')。amount: 交易数量(股数),必须为正数。style: 下单类型,默认为 None(市价单),也可以传入 LimitOrderStyle(限价单)。pindex: 仓位索引,默认为 0。Order 对象或者 None(如果创建委托失败)。融资买入后,通常涉及偿还负债,主要有两种方式:
卖券还款 (margincash_close):
卖出持有的股票,资金自动用于归还融资负债。
# 卖出 1000 股平安银行用于还款
margincash_close('000001.XSHE', 1000)
直接还款 (margincash_direct_refund):
使用账户内的可用现金直接归还融资负债。
# 直接还款 10000 元
margincash_direct_refund(10000)
Q: 为什么调用 margincash_open 报错提示没有权限或函数不存在?
A: 最常见的原因是没有在 initialize 函数中初始化融资融券账户。请确保添加了代码:set_subportfolios([SubPortfolioConfig(cash=..., type='stock_margin')])。默认的 type='stock' 不支持融资融券。
Q: 如何查询一只股票是否可以融资买入?
A: 使用 get_margincash_stocks() 函数可以获取当前交易日所有可融资标的的列表。建议在下单前判断目标股票是否在该列表中。
Q: 融资买入的利息和保证金比例是多少?
A: 默认融资利率为年化 8%,默认保证金比例为 100%。您可以通过 set_option('margincash_interest_rate', value) 和 set_option('margincash_margin_rate', value) 在 initialize 中进行修改以匹配您的需求。
Q: 融资买入后,持仓成本 (avg_cost) 如何计算?
A: 融资买入会增加持仓数量,其成本计算逻辑与普通买入一致,即 (原持仓价值 + 新买入价值 + 手续费) / 总数量。但请注意,融资会产生负债 (cash_liability) 和利息 (interest),这些会在账户总资产中体现。