2. 金融数据基础
做金融时序预测,第一步不是建模,而是把数据拿对、读懂、对齐。不同资产类别的数据在来源、字段结构、时间语义和获取方式上差异很大。如果一开始就把股票日线、期货分钟线和加密货币7×24小时数据混在一起处理,后续的特征工程和回测几乎必然出错。本节围绕四类主流资产,梳理数据来源、核心字段与获取方式,并给出可落地的统一处理思路。
一、核心原理:四类资产的数据差异从何而来
数据差异的根源在于交易机制不同。股票有固定开盘收盘和涨跌停;期货有合约到期、换月和保证金制度;外汇是场外市场,没有统一交易所,报价来自做市商;加密货币是7×24小时连续交易,且存在多个交易所价差。这些机制直接决定了字段含义和时间戳语义。
二、方法流程:从数据源到可用数据集的四步
- 确定资产与频率:先明确预测目标是日频、分钟频还是Tick级。股票日频可用公开接口,期货分钟频通常需要CTP或付费数据商,加密货币可直接用交易所REST/WebSocket。
- 选择数据源并获取:优先使用官方或权威源。股票用交易所或Tushare,期货用交易所或Wind,外汇用OANDA,加密货币用Binance。获取方式包括REST API、WebSocket推送和本地文件下载。
- 字段解析与标准化:统一时间戳为UTC或交易所本地时间,统一字段命名,如将open/high/low/close/volume映射为统一列名,并补充资产类别标识。
- 质量校验与对齐:检查缺失值、重复时间戳、异常价格和停牌日,按交易日历对齐,生成最终建模数据集。
三、核心字段含义与获取方式
无论哪类资产,最基础的字段都是OHLCV,但每类资产都有其专属字段。下表给出四类资产的核心字段与典型获取方式。
| 资产类别 | 核心字段 | 字段含义 | 典型获取方式 |
|---|---|---|---|
| 股票 | open/high/low/close/volume/amount | 开盘、最高、最低、收盘、成交量、成交额 | Tushare、AkShare、Yahoo Finance |
| 股票 | adj_factor | 复权因子,用于处理分红送股 | Tushare、Wind |
| 期货 | open_interest | 持仓量,反映市场参与度 | 交易所、CTP、Wind |
| 期货 | contract_code | 合约代码,如rb2405 | 交易所、聚宽 |
| 外汇 | bid/ask/mid | 买价、卖价、中间价 | OANDA、Dukascopy |
| 外汇 | spread | 点差,交易成本指标 | OANDA、FXCM |
| 加密货币 | open/high/low/close/volume | 标准K线字段 | Binance REST API |
| 加密货币 | funding_rate | 永续合约资金费率 | Binance、Bybit |
以Binance获取BTC/USDT日线为例,REST接口调用如下:
import requests
import pandas as pd
url = "https://api.binance.com/api/v3/klines"
params = {
"symbol": "BTCUSDT",
"interval": "1d",
"limit": 500
}
resp = requests.get(url, params=params)
data = resp.json()
df = pd.DataFrame(data, columns=[
"open_time", "open", "high", "low", "close", "volume",
"close_time", "quote_volume", "trades",
"taker_buy_base", "taker_buy_quote", "ignore"
])
df["open_time"] = pd.to_datetime(df["open_time"], unit="ms")
df[["open","high","low","close","volume"]] = df[["open","high","low","close","volume"]].astype(float)
print(df[["open_time","open","high","low","close","volume"]].head())
提示:加密货币接口通常返回毫秒时间戳,务必转换为可读时间;股票和期货数据要注意交易日历,避免把非交易日错误插值。
四、案例场景:构建多资产统一数据集
假设我们要同时预测A股、螺纹钢期货、EUR/USD和BTC/USDT。第一步,分别从Tushare、CTP、OANDA和Binance获取数据;第二步,统一时间戳为UTC,统一字段名为open/high/low/close/volume;第三步,为每行增加asset_type和symbol字段;第四步,按各自交易日历对齐,股票和期货只保留交易日,外汇和加密货币保留自然日。最终得到一张宽表或长表,供后续特征工程使用。
误区复盘:常见错误包括:把股票停牌日当作缺失值直接删除,导致时间序列断裂;把期货主力合约价格直接拼接,忽略换月跳空;把外汇的bid价当作close价;把加密货币的7×24小时数据与股票交易日直接对齐。这些都会引入前视偏差或虚假信号。正确做法是:停牌日保留并标记,期货使用复权连续合约,外汇使用mid价并记录spread,加密货币单独处理时间对齐。
数据基础打牢后,后续的特征工程和模型训练才有可靠输入。建议在项目初期就建立数据字典,记录每个字段的来源、含义、频率和缺失处理方式,避免后期反复返工。