🚀 AI 一键生成 ptrade 策略代码
立即体验

PTrade 融券交易策略开发:融券卖出与买券还券全流程指南(附 Python 源码)

ptrade | 发布时间: 2026/7/29
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: PTrade 两融实战:从 marginsec_open 融券卖出到 marginsec_close 买券还券全流程

Question: 请帮我编写一个完整的 ptrade 融券卖出与买券还券交易策略

解决方案

PTrade 融券交易策略开发:从 marginsec_open 到 marginsec_close 全流程指南

在 PTrade 量化平台中,融资融券(两融)交易是实现做空机制和对冲风险的重要手段。本文将详细讲解如何使用 marginsec_open(融券卖出)与 marginsec_close(买券还券)API,并提供一套完整的 Python 策略源码。


一、核心两融 API 介绍

在 PTrade 平台进行融券交易时,需要使用两融专用的交易接口:

  1. marginsec_open(security, amount, limit_price=None)

    • 功能:融券卖出(做空)。
    • 参数
      • security (str):股票代码,如 '600030.SS'
      • amount (int):交易数量(正整数)。
      • limit_price (float, 可选):限价价格。若不传则默认取当前最新价委托。
  2. marginsec_close(security, amount, limit_price=None)

    • 功能:买券还券(平空)。
    • 参数
      • security (str):股票代码。
      • amount (int):交易数量(正整数)。
      • limit_price (float, 可选):限价价格。
  3. get_marginsec_stocks()

    • 功能:获取交易所最新披露的融券标的列表。
  4. get_marginsec_open_amount(security, price=None)

    • 功能:查询指定标的最大可融券卖出数量。
  5. get_marginsec_close_amount(security, price=None)

    • 功能:查询买券还券标的最大可买数量。

二、完整的融券交易策略源码

以下策略基于双均线死叉与金叉逻辑:当 5 日均线向下穿过 10 日均线时触发融券卖出;当 5 日均线向上穿过 10 日均线时触发买券还券

# PTrade 融资融券实战策略:融券卖出与买券还券

def initialize(context):
    # 设置目标做空标的
    g.security = '600030.SS'
    set_universe(g.security)
    
    # 交易标识,防止同日重复下单
    g.short_flag = False
    g.cover_flag = False

def before_trading_start(context, data):
    # 每日盘前重置交易标识
    g.short_flag = False
    g.cover_flag = False
    
    # 校验标的是否属于融券标的
    sec_stocks = get_marginsec_stocks()
    if g.security in sec_stocks:
        log.info(f"{g.security} 属于可融券标的")
    else:
        log.warning(f"{g.security} 当前不可融券,请注意风险")

def handle_data(context, data):
    security = g.security
    
    # 获取过去10个交易日的收盘价
    df = get_history(10, '1d', 'close', security, fq=None, include=False)
    if df is None or len(df) < 10:
        return
    
    # 计算 5 日与 10 日移动平均线
    ma5 = round(df['close'][-5:].mean(), 3)
    ma10 = round(df['close'][-10:].mean(), 3)
    
    # 获取持仓信息
    position = get_position(security)
    short_amount = position.short_amount  # 空头持仓量
    
    # 逻辑 1:死叉(ma5 < ma10)且无空头持仓 -> 融券卖出(做空)
    if ma5 < ma10 and short_amount == 0:
        if not g.short_flag:
            # 查询最大可融券卖出数量
            open_info = get_marginsec_open_amount(security)
            max_short_amount = open_info.get(security, 0) if open_info else 0
            
            # 设定本次融券卖出数量(例如买入 1000 股或最大可用量)
            target_amount = min(1000, max_short_amount)
            if target_amount >= 100:
                order_id = marginsec_open(security, target_amount)
                log.info(f"触发死叉,融券卖出 {security},数量:{target_amount},订单ID:{order_id}")
                g.short_flag = True
            else:
                log.warning(f"可融券数量不足({max_short_amount}),无法下单")
                
    # 逻辑 2:金叉(ma5 > ma10)且存在空头持仓 -> 买券还券(平空)
    elif ma5 > ma10 and short_amount > 0:
        if not g.cover_flag:
            # 查询最大可买券还券数量
            close_info = get_marginsec_close_amount(security)
            max_close_amount = close_info.get(security, 0) if close_info else 0
            
            target_close = min(short_amount, max_close_amount)
            if target_close > 0:
                order_id = marginsec_close(security, target_close)
                log.info(f"触发金叉,买券还券 {security},数量:{target_close},订单ID:{order_id}")
                g.cover_flag = True
            else:
                log.warning(f"买券还券可用数量不足,当前空头持仓:{short_amount}")

三、注意事项与实战技巧

  1. 运行环境要求:两融 API(如 marginsec_openmarginsec_close)仅在 PTrade 客户端的两融交易模块 中有效,普通股票账户或回测环境不支持该接口。
  2. 额度与券源校验:融券前务必通过 get_marginsec_stocks()get_marginsec_open_amount() 检查券商是否有对应券源及足够额度,避免因无券导致报单失败。
  3. 下单价格精度:股票交易价格限制为两位小数,限价单下单时需注意价格精度规范。