🚀 AI 一键生成 ptrade 策略代码

PTrade 融资融券入门:如何使用 margin_trade 函数买卖担保品?

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

问题描述

在融资融券账户里,如何用代码直接买卖作为担保品的股票?

解决方案

在 PTrade 的融资融券(两融)账户中,若要直接使用自有资金买入股票作为担保品,或者卖出持有的担保品股票,需要使用 margin_trade 函数。

该函数专门用于担保品买卖,区别于融资买入(margincash_open)和融券卖出(marginsec_open)。

核心函数说明

margin_trade(security, amount, limit_price=None, market_type=None)

  • security: 股票代码(例如 '600570.SS')。
  • amount: 交易数量。
    • 正数 (+):代表担保品买入(使用自有资金买入)。
    • 负数 (-):代表担保品卖出(卖出持仓股票换回资金)。
  • limit_price: (可选)限价单的价格。如果不传且不传 market_type,默认以最新价限价委托。
  • market_type: (可选)市价委托类型(如 2 代表本方最优价格,4 代表最优五档即时成交剩余撤销等)。

策略代码示例

以下是一个完整的策略示例,展示了如何在两融账户中进行担保品的买入和卖出操作。

def initialize(context):
    """
    初始化函数,设置股票池和全局变量
    """
    # 设置要操作的股票代码
    g.security = '600570.SS'
    # 设置股票池(虽然实盘主要看持仓,但设置universe是好习惯)
    set_universe(g.security)
    
    # 设置一个标志位,用于控制示例中的买卖逻辑
    g.traded = False

def handle_data(context, data):
    """
    盘中运行函数,每个周期(如每天或每分钟)运行一次
    """
    # 获取当前股票的最新价
    current_price = data[g.security]['close']
    
    # 示例逻辑:仅执行一次
    if not g.traded:
        
        # ---------------------------------------------------
        # 场景 1:担保品买入 (使用自有资金买入股票)
        # ---------------------------------------------------
        # 方式 A:限价买入 100 股,价格为当前价
        log.info("开始担保品买入: %s" % g.security)
        margin_trade(g.security, 100, limit_price=current_price)
        
        # 方式 B:市价买入 100 股 (使用 market_type=2 本方最优)
        # margin_trade(g.security, 100, market_type=2)
        
        # ---------------------------------------------------
        # 场景 2:担保品卖出 (卖出持仓股票)
        # ---------------------------------------------------
        # 注意:卖出时 amount 为负数
        
        # 检查是否有持仓,避免卖空
        position = get_position(g.security)
        if position.amount >= 100:
            log.info("开始担保品卖出: %s" % g.security)
            # 限价卖出 100 股
            margin_trade(g.security, -100, limit_price=current_price)
        
        g.traded = True

def before_trading_start(context, data):
    """
    盘前处理
    """
    pass

def after_trading_end(context, data):
    """
    盘后处理
    """
    pass

注意事项

  1. 适用范围margin_trade 仅在两融账号(信用账户)的交易环境或两融回测中有效。如果是普通股票账户,请使用 order 系列函数。
  2. 资金与持仓
    • 买入时,使用的是账户里的可用资金(自有资金),不会产生融资负债。
    • 卖出时,卖出的是账户里的担保品持仓,获得的资金会优先偿还负债(如果有),剩余部分变为可用资金。
  3. 市价委托:如果使用市价委托(market_type),请确保了解不同参数(如 0, 1, 2, 3, 4, 5)对应的具体市价策略(如五档即成剩撤、本方最优等),这与普通交易的 order_market 参数定义一致。

Q&A

Q1: 在两融账户里使用 order() 函数会发生什么?
A1: 在 PTrade 的两融交易模块中,通常建议使用专用的两融函数。虽然部分券商环境可能兼容 order() 映射为担保品买卖,但为了代码的明确性和避免歧义,强烈建议使用 margin_trade 来进行普通买卖,使用 margincash_open 进行融资买入,使用 marginsec_open 进行融券卖出。

Q2: margin_trade 买入的股票可以用来抵押融资吗?
A2: 可以。通过 margin_trade 买入的股票即成为您的担保品(Collateral)。系统会根据该股票的折算率自动计算您的保证金可用余额,从而增加您的融资融券额度。

Q3: 如何查询当前账户里有哪些股票可以作为担保品卖出?
A3: 您可以使用 get_position(security) 函数获取特定股票的持仓,或者使用 get_positions() 获取所有持仓。返回对象的 amount 属性即为总持仓数量,enable_amount 为可用数量。