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

ptrade 平台 get_history 接口如何获取昨收盘、涨停价、跌停价字段?(附盘前过滤源码)

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

问题描述

ptrade 行情获取:get_history 中昨收盘(preclose)与涨跌停价字段的调用与过滤
ptrade get_history 接口的昨收盘、涨停价、跌停价字段怎么获取?能用来在盘前过滤吗?

解决方案

在 ptrade 量化交易平台中,get_history 接口支持获取丰富的日线级别行情字段。对于需要进行盘前分析或股票筛选的策略,获取昨收盘价、涨停价和跌停价是非常核心的需求。

一、 字段获取规则与注意事项

  1. 频级限制:昨收盘价(preclose)、涨停价(high_limit)和跌停价(low_limit)字段仅在日线级别(frequency='1d')下返回。在分钟级别下调用这些字段将无法获取有效数据。
  2. 盘前调用:可以在盘前事件 before_trading_start 中调用 get_history 获取前一交易日及历史的这些数据,用于计算今日的过滤池。
  3. 停牌处理get_history 接口在遇到停牌时,会使用停牌前的数据填充,成交量为 0。可以通过成交量是否为 0 来辅助过滤停牌股。

二、 核心字段说明

在调用 get_history 时,通过 field 参数传入以下字段:

  • preclose:昨收盘价(float)
  • high_limit:涨停价(float)
  • low_limit:跌停价(float)
  • close:收盘价(float)

三、 盘前过滤示例源码

以下源码展示了如何在 before_trading_start(盘前事件,每日 9:10 触发)中,获取股票池中所有股票的昨收盘价与涨跌停价,并过滤掉昨日未开盘(停牌)或不符合价格区间的股票。

# -*- coding: utf-8 -*-

def initialize(context):
    # 设置初始股票池
    g.security_list = ['600570.SS', '000001.SZ', '600000.SS']
    set_universe(g.security_list)

def before_trading_start(context, data):
    log.info("------ 盘前开始执行过滤逻辑 ------")
    
    # 获取股票池中股票最近1天的日线数据,包含昨收、涨停价、跌停价、收盘价和成交量
    # include=False 表示不包含今天未开盘的K线,确保获取的是昨日已确定的历史数据
    fields = ['close', 'preclose', 'high_limit', 'low_limit', 'volume']
    
    # 获取历史行情数据
    df_history = get_history(
        count=1, 
        frequency='1d', 
        field=fields, 
        security_list=g.security_list, 
        fq=None, 
        include=False
    )
    
    g.filtered_pool = []
    
    for security in g.security_list:
        try:
            # 筛选单只股票的数据
            sub_df = df_history.query('code == @security')
            if sub_df.empty:
                continue
                
            # 获取昨日的具体数值
            last_close = sub_df['close'].values[-1]
            pre_close = sub_df['preclose'].values[-1]
            high_limit = sub_df['high_limit'].values[-1]
            low_limit = sub_df['low_limit'].values[-1]
            volume = sub_df['volume'].values[-1]
            
            log.info(f"{security} - 昨收: {pre_close}, 昨收盘: {last_close}, 涨停价: {high_limit}, 跌停价: {low_limit}, 成交量: {volume}")
            
            # 过滤逻辑1:排除昨日停牌的股票(成交量为0)
            if volume == 0:
                log.info(f"{security} 昨日停牌,予以过滤。")
                continue
                
            # 过滤逻辑2:排除昨日收盘价低于5元或高于100元的股票
            if last_close < 5.0 or last_close > 100.0:
                log.info(f"{security} 价格不满足区间 [5, 100],予以过滤。")
                continue
                
            # 过滤成功,加入今日交易候选池
            g.filtered_pool.append(security)
            
        except Exception as e:
            log.error(f"处理 {security} 数据时出现异常: {e}")
            
    log.info(f"今日最终可交易股票池: {g.filtered_pool}")

def handle_data(context, data):
    # 盘中仅对过滤后的股票池进行操作
    for security in g.filtered_pool:
        # 策略买卖逻辑
        pass