3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易平台中,get_history 接口支持获取丰富的日线级别行情字段。对于需要进行盘前分析或股票筛选的策略,获取昨收盘价、涨停价和跌停价是非常核心的需求。
preclose)、涨停价(high_limit)和跌停价(low_limit)字段仅在日线级别(frequency='1d')下返回。在分钟级别下调用这些字段将无法获取有效数据。before_trading_start 中调用 get_history 获取前一交易日及历史的这些数据,用于计算今日的过滤池。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