3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在融资融券(两融)量化交易中,融券卖出常用于对冲大盘风险或捕捉个股下行Alpha收益。然而,融券交易受限于券商的券源池库存以及实时可用额度。如果直接下单而不预先查询可用数量,极易导致委托废单。
本文将详细介绍如何在 ptrade 量化平台上通过 API 实时查询融券标的可用数量,并构建带有风控机制的自动化融券卖出策略。
get_marginsec_open_amount(security, price=None){'600030.SS': 10000}。get_enslo_security_info(cash_group=None)enable_amount(可用数量)、slo_status(融券状态,0为正常)等。marginsec_open(security, amount, limit_price=None)security:股票代码(如 '600030.SS')amount:卖出数量(正整数,必须为 100 的整数倍)limit_price:委托限价(不传则默认取当前最新价)以下是一个完整的 ptrade 量化策略源码,展示了如何在盘中进行双均线死叉信号检测、券源可用量校验以及自动融券下单:
# ptrade 融券卖出策略示例
def initialize(context):
# 设置目标交易标的(需确保属于融券标的)
g.security = '600030.SS' # 中信证券
set_universe(g.security)
g.flag = False # 防止重复下单标识
def before_trading_start(context, data):
g.flag = False
# 检查策略是否在两融交易业务环境下运行
if get_business_type() != 'rzrq':
log.error('当前策略非两融业务类型,融券接口将无法正常执行!')
def handle_data(context, data):
if g.flag:
return
security = g.security
# 1. 计算均线指标(5日均线与10日均线)
df = get_history(10, '1d', 'close', security, fq=None, include=False)
ma5 = df['close'][-5:].mean()
ma10 = df['close'][-10:].mean()
# 2. 触发死叉空头信号(MA5 下穿 MA10)
if ma5 < ma10:
# 3. 校验券源与最大可融券数量
marginsec_dict = get_marginsec_open_amount(security)
if not marginsec_dict or security not in marginsec_dict:
log.warning('无法获取标的 %s 的融券额度信息' % security)
return
max_sell_amount = marginsec_dict.get(security, 0)
log.info('标的 %s 当前最大可融券卖出数量为: %d' % (security, max_sell_amount))
# 4. 风控判断:可用券量必须 >= 100 股
if max_sell_amount >= 100:
# 按照最小单位 100 股整取进行下单(此处示例取可卖量的 50% 且向下取整)
order_amount = int((max_sell_amount * 0.5) // 100) * 100
if order_amount >= 100:
# 取当前最新价作为限价单价格
current_price = data[security]['close']
order_id = marginsec_open(security, order_amount, limit_price=current_price)
log.info('成功提交融券卖出委托,订单ID: %s, 委托数量: %d, 价格: %.2f' % (order_id, order_amount, current_price))
g.flag = True
else:
log.warning('标的 %s 可用融券量不足 100 股,取消下单' % security)
marginsec_open、get_marginsec_open_amount 等接口仅在 两融实盘/模拟盘 环境下可用,普通股票账户调用会报错。int(amount // 100) * 100 进行向下取整处理。get_snapshot 获取实时买一/卖一档价格或参考保护限价,避免报单因超出价格笼子而被柜台废单。