3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在PTrade中,获取财务数据主要通过 get_fundamentals 函数实现。该函数支持查询估值表、资产负债表、利润表、现金流量表等多种财务数据。
针对您的需求:
'valuation'。'balance_statement'。以下是一个完整的策略示例代码,展示如何在盘前阶段获取指定股票的这些数据并打印出来。
def initialize(context):
# 设置要查询的股票池,这里以恒生电子(600570.SS)和浦发银行(600000.SS)为例
g.security = ['600570.SS', '600000.SS']
set_universe(g.security)
def before_trading_start(context, data):
# 1. 获取估值数据 (PE, PB)
# 表名: 'valuation'
# 字段:
# pe_ttm: 市盈率(TTM)
# pb: 市净率
# pe_static: 静态市盈率 (可选)
# turnover_rate: 换手率 (可选)
val_fields = ['pe_ttm', 'pb', 'pe_static', 'turnover_rate']
# date参数不传默认取回测当前日期前一交易日的数据(避免未来函数)
df_valuation = get_fundamentals(g.security, 'valuation', val_fields)
log.info("=== 估值数据 (Valuation) ===")
log.info(df_valuation)
# 2. 获取资产负债表数据
# 表名: 'balance_statement'
# 字段:
# total_assets: 资产总计
# total_liability: 负债合计
# total_shareholder_equity: 所有者权益合计
bal_fields = ['total_assets', 'total_liability', 'total_shareholder_equity']
# 获取最近一期发布的资产负债表数据
df_balance = get_fundamentals(g.security, 'balance_statement', bal_fields)
log.info("=== 资产负债表数据 (Balance Sheet) ===")
log.info(df_balance)
def handle_data(context, data):
pass
get_fundamentals(security, table, fields, ...): 这是核心查询函数。
security: 股票代码列表。table: 数据表名(如 'valuation', 'balance_statement')。fields: 需要查询的具体字段列表。valuation 表常用字段:
pe_ttm: 滚动市盈率(推荐使用,更能反映近期盈利能力)。pe_static: 静态市盈率(基于上年度财报)。pb: 市净率。balance_statement 表常用字段:
total_assets: 总资产。total_liability: 总负债。total_shareholder_equity: 股东权益。pandas.DataFrame 对象,索引(Index)通常是股票代码,列(Columns)是你请求的字段名。date 参数,默认获取的是当前回测日期之前已发布的最新数据,这样可以避免用到“未来数据”。get_fundamentals 接口有流量限制(通常每秒不超过100次,单次不超过500条数据)。如果您查询的股票数量非常多(例如全市场扫描),建议分批查询并在批次之间加入 time.sleep(1)。