🚀 AI 一键生成 ptrade 策略代码

ptrade 平台如何设定特定持股不参与盘中异动策略?(附 Python 源码)

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

问题描述

能否设定持股的股票代码不参与盘中异动策略?

/

解决方案

ptrade 平台如何设定特定持股不参与盘中异动策略?

在 ptrade 量化交易平台中,完全可以设定特定的持股股票不参与盘中异动策略。这通常通过在代码中引入黑名单机制(Blacklist)或在遍历股票池时进行条件过滤来实现。

以下是实现该功能的两种常用方法及对应的 Python 源码示例:

方法一:使用全局变量定义黑名单

你可以在 initialize 函数中定义一个全局变量(如 g.blacklist),将不希望参与策略的股票代码放入其中。在盘中处理函数(如 handle_datatick_data)中,判断当前股票是否在黑名单内,如果在则直接跳过(continuereturn)。

def initialize(context):
    # 设置股票池
    g.security = ['600570.SS', '000001.SZ', '600000.SS']
    set_universe(g.security)
    
    # 定义不参与盘中异动策略的股票黑名单(例如长线持仓的股票)
    g.blacklist = ['600000.SS']

def handle_data(context, data):
    for stock in g.security:
        # 如果股票在黑名单中,则跳过不处理
        if stock in g.blacklist:
            continue
            
        # 以下为盘中异动策略逻辑
        current_price = data[stock]['close']
        # 假设异动逻辑:价格突破某值
        if current_price > 50:
            order(stock, 100)
            log.info(f"{stock} 触发异动,买入100股")

方法二:动态获取持仓并过滤特定股票

如果你的需求是“只要是持仓中的某几只股票就不参与”,你可以结合 get_positions() 接口动态获取持仓,并进行过滤。

def initialize(context):
    g.security = ['600570.SS', '000001.SZ', '600000.SS']
    set_universe(g.security)
    
    # 设定需要保护的持仓股票(即使持仓也不卖出或不参与异动)
    g.protected_stocks = ['600570.SS']

def handle_data(context, data):
    # 获取当前所有持仓
    positions = get_positions()
    
    for stock in g.security:
        # 检查该股票是否在持仓中,且属于受保护的股票
        if stock in positions and stock in g.protected_stocks:
            log.info(f"{stock} 为受保护持仓,不参与盘中异动策略")
            continue
            
        # 执行异动策略逻辑
        snapshot = get_snapshot(stock)
        if snapshot:
            last_px = snapshot[stock].get('last_px', 0)
            # 异动买卖逻辑...

总结与建议

  1. 灵活性:使用 g.blacklist 是最简单直接的方法,适合固定的长线底仓。
  2. 动态管理:如果黑名单需要根据某些条件(如停牌、ST状态)动态变化,可以在 before_trading_start 中结合 get_stock_statusfilter_stock_by_status 接口每日更新 g.blacklist
  3. Tick 级别策略:如果你使用的是 tick_data 函数处理高频异动,过滤逻辑同样适用,只需在 tick_data 的开头加上 if stock in g.blacklist: return 即可有效降低不必要的计算和误触发。