🚀 AI 一键生成 ptrade 策略代码

如何在 PTrade 平台进行融资买入、融券卖出等信用交易操作?

ptrade | 发布时间: 2025/11/25
以下内容由 EasyQuant 生成。

问题描述

我想要编写一个融资融券策略,请问如何用代码实现融资买入和融券卖出?

解决方案

在PTrade中,融资融券(两融)交易有专门的API接口。与普通买卖不同,两融交易需要区分是“融资买入”还是“融券卖出”。

以下是具体的代码实现方式及说明:

核心函数说明

  1. 融资买入 (Long/Leveraged Buy)

    • 函数: margincash_open(security, amount, limit_price=None, market_type=None)
    • 说明: 向券商借钱买入股票。
    • 参数:
      • security: 股票代码(如 '600519.SS')。
      • amount: 买入数量(必须为正整数,通常为100的倍数)。
      • limit_price: (可选) 限价价格。如果不传,默认使用最新价。
  2. 融券卖出 (Short Sell)

    • 函数: marginsec_open(security, amount, limit_price=None)
    • 说明: 向券商借股票卖出(做空)。
    • 参数:
      • security: 股票代码。
      • amount: 卖出数量(必须为正整数)。
      • limit_price: (可选) 限价价格。

完整策略示例代码

以下代码展示了一个简单的策略:在初始化时设置标的,在盘中检查最大可买/可卖数量,并执行融资买入和融券卖出操作。

def initialize(context):
    # 设置要操作的标的,这里以贵州茅台为例
    g.security = '600519.SS'
    # 设置股票池
    set_universe(g.security)
    
    # 设置一个标志位,防止在示例中重复下单
    g.traded = False

def handle_data(context, data):
    # 如果已经交易过,则不再执行
    if g.traded:
        return

    # ---------------------------------------------------
    # 1. 融资买入示例
    # ---------------------------------------------------
    
    # 查询该标的当前最大可融资买入数量
    # 返回的是一个字典,key是股票代码,value是数量
    cash_open_info = get_margincash_open_amount(g.security)
    max_cash_buy = cash_open_info.get(g.security, 0)
    
    log.info("最大可融资买入数量: %s" % max_cash_buy)
    
    # 如果额度足够,买入100股
    if max_cash_buy >= 100:
        # 下单:融资买入 100股
        margincash_open(g.security, 100)
        log.info("执行融资买入: %s, 数量: 100" % g.security)
    else:
        log.info("融资额度不足,无法买入")

    # ---------------------------------------------------
    # 2. 融券卖出示例
    # ---------------------------------------------------
    
    # 查询该标的当前最大可融券卖出数量
    sec_open_info = get_marginsec_open_amount(g.security)
    max_sec_sell = sec_open_info.get(g.security, 0)
    
    log.info("最大可融券卖出数量: %s" % max_sec_sell)
    
    # 如果额度足够,卖出100股
    if max_sec_sell >= 100:
        # 下单:融券卖出 100股
        marginsec_open(g.security, 100)
        log.info("执行融券卖出: %s, 数量: 100" % g.security)
    else:
        log.info("融券券源不足,无法卖出")

    # 标记为已交易
    g.traded = True

注意事项

  1. 账户权限:该代码仅在两融账号(信用账户)的交易环境或支持两融的回测环境中有效。如果在普通股票账户运行会报错或无效。
  2. 标的限制:并非所有股票都支持融资融券。可以使用 get_margincash_stocks() 获取融资标的列表,使用 get_marginsec_stocks() 获取融券标的列表。
  3. 查询额度:在实盘中,直接下单可能会因为额度不足或券源不足而失败。建议在下单前调用 get_margincash_open_amount(查询可融资数量)或 get_marginsec_open_amount(查询可融券数量)进行检查。
  4. 平仓操作
    • 融资买入的平仓操作是 卖券还款,使用函数 margincash_close(security, amount)
    • 融券卖出的平仓操作是 买券还券,使用函数 marginsec_close(security, amount)