金融市场数据基础:股票/期货K线数据结构、OHLCV含义、数据频率
各位同学,咱们今天聊点实在的。做量化交易,第一件事不是写策略,而是搞懂数据。你想想看,连数据长什么样都不清楚,后面那些花里胡哨的模型全是空中楼阁。
我个人习惯,拿到任何金融时间序列数据,先看三样东西:结构、含义、频率。这三样搞明白了,后面做特征工程、模型训练,心里才有底。
一、K线数据结构:一根柱子里的秘密
K线图,也叫蜡烛图,是金融市场最基础的数据载体。每一根K线,代表一个时间窗口内的交易情况。
举个例子,日K线就是一天的数据。这根柱子包含了四个关键价格:开盘价、收盘价、最高价、最低价。再加上成交量,就是咱们常说的OHLCV。
核心要点:每一根K线,都是一个时间窗口内的交易浓缩。你看到的不是一笔交易,而是无数笔交易在时间上的聚合。
我在项目中遇到过不少新手,上来就盯着收盘价看,觉得最高最低价没用。其实不然。最高价和最低价反映了当天的价格波动范围,这对判断市场情绪非常关键。
二、OHLCV含义:五个字母,五种信息
咱们一个一个拆开讲。
| 字段 | 全称 | 含义 | 我的经验 |
|---|---|---|---|
| O | Open | 开盘价 | 开盘价往往受隔夜消息影响,跳空高开或低开很常见 |
| H | High | 最高价 | 最高价经常被用来做压力位判断,我习惯用它做止损参考 |
| L | Low | 最低价 | 最低价是支撑位,跌破最低价往往意味着趋势反转 |
| C | Close | 收盘价 | 收盘价是市场最终达成的共识,很多策略都基于它 |
| V | Volume | 成交量 | 成交量是价格的燃料,没量的上涨都是耍流氓 |
说白了,OHLCV就是五个维度,从不同角度描述同一段时间内的市场行为。我经常跟团队说,只看收盘价就像只看一个人的背影,永远看不清全貌。
小技巧:我个人习惯把OHLCV画成四个子图。上面三个放价格(O、H、L、C),下面单独放成交量。这样一眼就能看出价格和成交量的配合关系。
三、数据频率:时间窗口的选择
数据频率,说白了就是你用多长的时间窗口来切分数据。常见的频率有:
- 日频数据:一天一根K线。适合中长线策略,信号稳定,但反应慢
- 周频数据:一周一根K线。过滤掉日内的噪音,趋势更清晰
- 月频数据:一个月一根K线。适合宏观分析,但交易信号太少
- 分钟数据:1分钟、5分钟、30分钟等。适合高频交易,但噪音大
你可能会问,到底选哪个频率好?嗯,这个问题没有标准答案。我记得有一次做股指期货的择时策略,用日频数据回测效果很好,但实盘时发现信号滞后太严重。后来换成30分钟数据,效果反而更好。
避坑指南:我曾经犯过一个错误——用日频数据训练模型,然后用分钟数据做预测。结果可想而知,模型完全失效。数据频率必须和交易频率匹配,这是铁律。
四、知识体系结构图
下面这张图,是我自己总结的金融市场数据基础结构。你看完应该能对整体有个清晰的认识。
这张图从下往上看,就是数据从原始来源到最终应用的完整链路。你拿到原始数据后,先确定数据结构(K线),再提取OHLCV字段,最后根据策略需求选择合适的数据频率。
五、代码示例:用Python读取OHLCV数据
光说不练假把式。我给你们写一段简单的代码,看看实际怎么操作。
import pandas as pd
import numpy as np
# 模拟生成日频OHLCV数据
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=100, freq='D')
data = {
'open': np.random.uniform(100, 110, 100),
'high': np.random.uniform(105, 115, 100),
'low': np.random.uniform(95, 105, 100),
'close': np.random.uniform(100, 110, 100),
'volume': np.random.randint(10000, 50000, 100)
}
df = pd.DataFrame(data, index=dates)
# 确保high是最高,low是最低
df['high'] = df[['open', 'close', 'high']].max(axis=1)
df['low'] = df[['open', 'close', 'low']].min(axis=1)
print(df.head())
print(f"数据频率:{pd.infer_freq(df.index)}")
这段代码生成了100天的模拟数据。注意我加了一个小处理——确保最高价确实是最高的,最低价确实是最低的。为什么?因为我在项目中遇到过数据源有误的情况,最高价比收盘价还低,这种脏数据会直接搞崩你的模型。
经验之谈:拿到数据后,第一件事不是建模,而是做数据清洗。检查OHLCV的合理性:最高价必须大于等于开盘价和收盘价,最低价必须小于等于开盘价和收盘价。这个检查能帮你过滤掉很多垃圾数据。
好了,这一章的内容就到这儿。金融市场数据基础,说白了就是搞清楚数据长什么样、每个字段代表什么、以及用多细的时间粒度去看。这些看似基础的东西,恰恰是后面所有工作的基石。