🚀 AI 一键生成 ptrade 策略代码

PTrade API 教程:如何查询股票是否为融资标的 (get_margincash_stocks)?

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

问题描述

如何在下单前判断某只股票是否可以融资买入?

解决方案

在 PTrade 中,要在下单前判断某只股票是否可以进行融资买入(即是否为融资标的),可以使用 get_margincash_stocks() 接口。

该接口会返回当前市场上所有可融资买入的标的列表。您只需要判断目标股票代码是否存在于该列表中即可。

实现步骤

  1. 获取融资标的列表:调用 get_margincash_stocks() 获取所有可融资股票代码的列表。
  2. 判断资格:使用 Python 的 in 关键字判断您的目标股票代码是否在该列表中。
  3. 执行交易:如果判断为 True,则使用 margincash_open 进行融资买入;否则不操作或打印提示。

策略代码示例

以下是一个完整的策略示例,展示了如何在每日交易开始前获取融资标的列表,并在盘中判断指定股票是否可融资买入。

def initialize(context):
    # 设置我们要操作的股票,例如恒生电子
    g.security = '600570.SS'
    # 设置股票池
    set_universe(g.security)

def before_trading_start(context, data):
    # 获取当前市场上所有的融资标的列表
    # 建议在盘前获取一次,避免在handle_data中频繁调用接口
    g.margin_cash_stocks = get_margincash_stocks()
    
    if g.margin_cash_stocks:
        log.info("成功获取融资标的列表,数量:%s" % len(g.margin_cash_stocks))
    else:
        log.warn("未获取到融资标的列表,请检查账户权限或回测设置")

def handle_data(context, data):
    # 获取目标股票代码
    target_stock = g.security
    
    # 1. 判断是否为融资标的
    # 注意:g.margin_cash_stocks 是一个列表,包含如 ['600570.SS', '000001.SZ', ...]
    if target_stock in g.margin_cash_stocks:
        log.info("股票 %s 是融资标的,准备进行融资买入" % target_stock)
        
        # 2. 检查是否已持仓(防止重复下单,仅作示例逻辑)
        position = get_position(target_stock)
        if position.amount == 0:
            # 3. 下单:融资买入 100 股
            # 注意:融资买入需使用 margincash_open 接口
            margincash_open(target_stock, 100)
            log.info("融资买入下单成功")
            
    else:
        log.info("股票 %s 不是融资标的,无法进行融资买入" % target_stock)

注意事项

  1. 账户类型:此功能仅在**融资融券(两融)**账户或回测模式下有效。如果是普通股票账户,调用此接口可能会返回空或报错,且无法执行 margincash_open
  2. 数据更新:融资标的名单可能会调整,建议在 before_trading_start 中每日更新一次列表。
  3. 代码后缀:PTrade 中的股票代码包含后缀(如 .SS.SZ),get_margincash_stocks() 返回的列表也包含后缀,比对时请确保格式一致。

Q&A

Q: get_margincash_stocks() 接口在回测中可以使用吗?
A: 可以。在回测模式下,该接口会返回回测日期当时交易所披露的融资标的列表,避免了使用未来数据。

Q: 如果我想判断股票是否可以“融券卖出”,应该用哪个接口?
A: 判断融券卖出资格,请使用 get_marginsec_stocks() 接口,它返回的是可融券标的列表。

Q: 融资买入下单时,可以使用普通的 order() 函数吗?
A: 不可以。融资买入必须使用 margincash_open() 函数。普通的 order() 函数使用的是自有资金买入(担保品买入)。