3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化投资中,财务基本面选股是构建中长期选股策略的重要手段。资产负债率(负债合计 / 资产总计)是衡量企业财务风险与偿债能力的关键指标。
本文将介绍如何在 QMT (迅投 Quant) 平台中使用 ContextInfo.get_financial_data() 接口提取资产负债表数据并计算资产负债率。
QMT 提供了读取本地财务数据的 Python API 接口 ContextInfo.get_financial_data。要计算资产负债率,需要获取以下两个资产负债表 (ASHAREBALANCESHEET) 字段:
tot_liab (中文字段:负债合计 或 ASHAREBALANCESHEET.tot_liab)tot_assets (中文字段:资产总计 或 ASHAREBALANCESHEET.tot_assets)ContextInfo.get_financial_data(fieldList, stockList, startDate, endDate, report_type='announce_time')
['ASHAREBALANCESHEET.tot_liab', 'ASHAREBALANCESHEET.tot_assets']YYYYMMDD)'announce_time'(按公告日),或 'report_time'(按报告期)计算公式:
$$\text{资产负债率} = \frac{\text{负债合计 (tot_liab)}}{\text{资产总计 (tot_assets)}} \times 100%$$
#coding:gbk
import pandas as pd
def init(ContextInfo):
# 设定股票池(以沪深300为例)
stocks = ContextInfo.get_stock_list_in_sector('沪深300')
ContextInfo.set_universe(stocks)
def handlebar(ContextInfo):
# 仅在最后一根 Bar 上执行选股
if not ContextInfo.is_last_bar():
return
stocks = ContextInfo.get_universe()
fields = ['ASHAREBALANCESHEET.tot_liab', 'ASHAREBALANCESHEET.tot_assets']
# 获取财务数据
df_financial = ContextInfo.get_financial_data(fields, stocks, '20230101', '20231231', report_type='announce_time')
# 筛选资产负债率小于 50% 的股票
selected_stocks = []
for stock in stocks:
try:
if isinstance(df_financial, dict) and stock in df_financial:
df_stock = df_financial[stock]
tot_liab = df_stock['ASHAREBALANCESHEET.tot_liab'].iloc[-1]
tot_assets = df_stock['ASHAREBALANCESHEET.tot_assets'].iloc[-1]
if tot_assets > 0:
debt_asset_ratio = (tot_liab / tot_assets) * 100
if debt_asset_ratio < 50:
selected_stocks.append((stock, debt_asset_ratio))
except Exception as e:
continue
print("筛选出的低资产负债率股票列表:", selected_stocks)
get_financial_data 返回 Pandas 数据结构,因此策略运行环境中需安装 pandas。