Wind终端数据体系概览:认识股票、债券、基金、指数、期货、期权、外汇等主要数据类别及其字段结构
Wind金融终端之所以能成为国内金融机构投研、交易与风控的核心基础设施,其根本原因在于它构建了一套覆盖全球多资产、多市场、多频次的数据仓库体系。对于自动化导出与二次开发而言,理解这套数据体系的分类逻辑与字段结构,是避免“取数错、取数漏、取数慢”的第一道关卡。本章将系统拆解Wind终端中股票、债券、基金、指数、期货、期权、外汇七大类资产的数据组织方式,重点剖析其字段命名规则、板块归属逻辑以及不同资产间数据粒度的差异,为后续编写高效的提取公式与自动化脚本打下坚实基础。
上图展示了Wind数据体系的核心架构。可以看到,无论资产类别如何多样,其底层都共享一套“代码+日期+指标+参数”的字段结构逻辑。在实际操作中,我们通过Wind的API(如WSD、WSS、WSP等函数)提取数据时,本质上就是在与这套字段结构打交道。理解不同资产在字段命名上的差异(例如股票用close,债券用dirty_cnbd,期权用implied_index),是避免取数错误的关键。
3.1 股票数据:最基础的标准化结构
核心原理:股票数据是Wind体系中最成熟、字段最标准化的部分。A股、港股、美股虽然交易规则不同,但Wind通过统一的“证券代码+市场后缀”机制(如600519.SH、00700.HK、AAPL.O)进行区分。股票字段主要分为四大类:基础信息(上市日期、总股本)、行情快照(最新价、涨跌幅)、财务数据(营收、净利润)、估值数据(PE、PB)。
判断方法与操作流程:在自动化导出时,需明确所需字段的“字段ID”。例如,要提取贵州茅台的历史收盘价,使用WSD函数:WSD("600519.SH", "close", "2024-01-01", "2024-12-31", "")。若需要复权因子,则需指定参数PriceAdj=F(前复权)或B(后复权)。
| 字段类别 | 典型字段ID | 说明 | 适用场景 |
|---|---|---|---|
| 行情 | close / open / high / low | 不复权价格 | 实时监控 |
| 复权行情 | close_adj | 前复权收盘价 | 量化回测 |
| 财务 | tot_oper_rev / net_profit | 营业总收入/净利润 | 基本面分析 |
| 估值 | pe_ttm / pb_lf | 滚动市盈率/市净率 | 横向对比 |
NaN或上一交易日价格,自动化脚本中需增加is_trading字段进行过滤,否则会导致回测信号失真。
3.2 债券数据:复杂的计息规则与估值体系
核心原理:债券数据的复杂度远高于股票,其核心在于“净价与全价”的区分、应计利息的计算以及久期/凸性等风险指标。Wind将债券分为利率债(国债、政金债)、信用债(中票、短融、企业债)和可转债。字段结构上,债券的行情字段包含dirty_cnbd(中债全价)、clean_cnbd(中债净价),而估值字段则包含ytm(到期收益率)、duration_mod(修正久期)。
操作流程与案例拆解:假设需要导出某只城投债的估值收益率曲线数据。使用WSD函数时,必须指定债券的估值来源(中债、中证或上清所)。例如:WSD("127210.SH", "ytm_cnbd", "2024-01-01", "2024-12-31", "BondVal=中债")。如果不指定BondVal参数,Wind默认返回中债估值,但部分私募债可能只有中证估值,此时就会返回空值。
maturity_date)与“剩余期限”字段(remain_term)在自动化导出时极易混淆。前者是静态字段,后者是随日期变化的动态字段。在构建债券池筛选策略时,应使用remain_term而非maturity_date,否则筛选结果会包含已到期债券。
3.3 基金数据:净值、份额与持仓穿透
核心原理:基金数据分为公募基金与私募基金。公募基金的核心字段是单位净值(unit_nav)、累计净值(accum_nav)和复权净值(adj_nav)。对于ETF,还需关注实时估值(IOPV)与折溢价率。私募基金数据则更多依赖于Wind的另类数据采集,字段结构不如公募标准化。
实战场景:在自动化导出基金持仓时,Wind提供“持仓穿透”功能。例如,提取某只FOF基金的前十大重仓基金,需使用WSS("F000001.OF", "fund_stockportfolioratio", "2024-12-31")。但要注意,基金季报的披露有滞后性,且部分基金只披露前十大持仓,无法穿透全部资产。此时,需要结合定期报告中的“资产组合情况”字段进行补充。
WSD函数并设置StartDate为基金成立日,而非统一日期,否则会导致大量缺失值。
3.4 指数数据:成分股权重与编制方案
核心原理:指数数据包含两类:一是指数本身的行情(点位、成交量),二是指数的成分股列表及权重。Wind对指数成分股的字段结构设计为“快照型”与“区间型”结合。例如,沪深300指数的成分股调整在每年6月和12月生效,Wind通过index_weights字段提供某一时点的权重快照。
操作流程:若要导出某指数过去一年的日度成分股权重,需使用WSD("000300.SH", "index_weights", "2024-01-01", "2024-12-31", "Fill=Previous")。这里的Fill=Previous参数至关重要,它表示在非调整日沿用上一次的权重数据,否则Wind只返回调整日的权重,导致时间序列不连续。
| 指数类型 | 代码后缀 | 字段示例 | 更新频率 |
|---|---|---|---|
| 宽基指数 | .SH / .SZ | close / pe / pb | 实时 |
| 行业指数 | .CSI / .CI | index_weights | 定期调整 |
| 策略指数 | .H / .WI | turnover_rate | 月度 |
3.5 期货与期权:合约连续性与希腊字母
核心原理:期货数据的关键在于“合约月份”与“主力连续”的映射。Wind提供主力合约(代码如RB9999.SHF)和指数连续(如RB8888.SHF)两种特殊代码,用于解决合约换月带来的价格跳空问题。期权数据则更为复杂,除了标的价格外,还需包含行权价、到期日、看涨/看跌类型以及隐含波动率、Delta、Gamma等希腊字母字段。
案例拆解:假设需要构建一个商品期货的动量策略,自动化导出螺纹钢主力合约的日线数据。使用WSD("RB9999.SHF", "close", "2024-01-01", "2024-12-31", "")。但这里存在一个陷阱:RB9999在换月日会切换合约,导致价格序列出现人为跳变。正确的做法是使用RB8888.SHF(指数连续),该序列通过加权计算消除了换月跳空,更适合量化建模。
implied_index(隐含波动率)并非Wind直接计算,而是基于交易所的波动率指数或通过BS模型反推。在导出时,需注意不同到期日、不同行权价的隐含波动率不可直接横向比较,必须进行期限结构和偏度调整。
3.6 外汇数据:多币种报价与交叉汇率
核心原理:外汇数据在Wind中分为即期汇率、远期汇率和掉期点。字段结构上,即期汇率通常包含bid、ask、mid三个价格,而远期汇率则需指定合约期限(如1M、3M)。交叉汇率(如EUR/JPY)由Wind通过基础汇率自动计算,但计算逻辑基于特定时点的中间价。
操作流程:导出美元兑人民币的即期汇率,使用WSD("USDCNY.IB", "close", "2024-01-01", "2024-12-31", "")。注意,外汇代码的后缀.IB代表银行间市场,而.FX代表零售市场。两个市场的报价存在点差差异,自动化导出时需明确数据来源,否则会导致套利策略的误判。
close单位是元,而期货的close单位是点,外汇的close则保留四位小数。忽略这些细节,往往会导致最终计算结果偏差巨大。