3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化投资中,ROE(净资产收益率)是衡量公司盈利能力的核心指标。通过选取连续多年维持高 ROE 的股票,可以有效筛选出优质的成长型或价值型企业。在 PTrade 量化交易平台中,我们可以通过 get_fundamentals 接口查询 profit_ability(盈利能力表)来轻松实现这一选股逻辑。
在 PTrade 中获取财务数据主要使用 get_fundamentals 函数:
get_fundamentals(security, table, fields=None, date=None, start_year=None, end_year=None, report_types=None, date_type=None, merge_type=None)
'profit_ability'(盈利能力表)'roe'(净资产收益率%摊薄公布值)start_year='2020', end_year='2022''4' 表示获取年度财报(年报)以下策略演示如何在盘前阶段(before_trading_start)获取全市场 A 股近三年的 ROE 数据,筛选出连续三年 ROE 均大于 15% 的股票并建立股票池:
import pandas as pd
import datetime
def initialize(context):
# 设置参考基准
set_benchmark('000300.SS')
# 选股周期:每周一盘前运行一次
run_daily(context, select_high_roe_stocks, time='09:15')
def select_high_roe_stocks(context):
# 仅在每周一执行选股逻辑
if context.blotter.current_dt.weekday() != 0:
return
# 1. 获取全市场A股代码
all_stocks = get_Ashares()
# 2. 计算近三年的年份(假设当前为2024年,取2021-2023年报)
current_year = context.blotter.current_dt.year
start_year = str(current_year - 3)
end_year = str(current_year - 1)
log.info(f"正在获取 {start_year} 至 {end_year} 年度的 ROE 数据...")
# 3. 按年份查询近三年年报 ROE 数据
# 返回数据类型为 Panel,Items 为股票代码
roe_panel = get_fundamentals(
security=all_stocks,
table='profit_ability',
fields='roe',
start_year=start_year,
end_year=end_year,
report_types='4' # 年报
)
selected_stocks = []
# 4. 遍历股票进行 ROE 条件筛选(连续三年 ROE > 15%)
if roe_panel is not None:
for stock in roe_panel.items:
df_stock = roe_panel[stock]
if 'roe' in df_stock.columns and len(df_stock['roe'].dropna()) >= 3:
# 判断是否三年都大于 15%
if (df_stock['roe'] > 15.0).all():
selected_stocks.append(stock)
# 过滤 ST、停牌及退市股票
selected_stocks = filter_stock_by_status(selected_stocks, ["ST", "HALT", "DELISTING"])
g.security = selected_stocks[:20] # 取前20只
set_universe(g.security)
log.info(f"筛选出的高 ROE 股票池: {g.security}")
def handle_data(context, data):
# 盘中交易逻辑(例如均等仓位买入股票池标的)
pass
get_fundamentals 接口每秒调用限制为 100 次,单次最大返回 500 条数据。若对全市场多年份查询,建议适当切分股票列表或在循环中加上 time.sleep() 保护。date 参数结合 date_type 模式按发布日期查询),以防产生未来函数。valuation 表中的 pe_ttm(市盈率)或 pb(市净率)进行二次筛选,避免买入估值过高的标的过高的股票。