第2章:数据获取与工具——主流数据平台介绍

做量化交易,尤其是盯北向资金尾盘异动,第一步不是写策略,而是搞定数据。我见过太多人上来就写代码,结果数据源不对,清洗不干净,最后策略跑出来全是噪音。说白了,数据是地基,地基不稳,楼盖得再高也得塌。

这一章,我就带你看看市面上主流的几个数据平台,以及怎么把数据拿到手、洗干净。嗯,都是我自己踩过坑之后总结出来的经验。

2.1 主流数据平台介绍

目前A股市场,做北向资金分析,用得最多的就三个平台:东方财富、同花顺、Wind。各有各的脾气,我一个个说。

平台 数据特点 适用人群 我的评价
东方财富(Choice) 免费数据丰富,接口开放,更新快 个人投资者、中小机构 性价比之王,我早期全靠它
同花顺(iFinD) 数据质量高,历史数据全,但收费 专业投资者、私募 数据干净,省去很多清洗功夫
Wind 行业标准,数据最全,但价格最贵 公募基金、大型机构 有钱就上,数据维度确实无敌

我的建议:如果你刚开始做北向资金研究,先用东方财富的免费接口跑通流程。等策略成熟了,再考虑付费平台。我自己就是这条路走过来的。

2.2 数据接口与API使用

数据平台选好了,接下来就是怎么把数据拉下来。这里我重点讲东方财富的接口,因为免费且够用。

2.2.1 东方财富API示例

东方财富的北向资金数据,其实藏在它的行情接口里。我习惯用Python的requests库直接抓取。给你看个例子:

import requests
import pandas as pd
import json

# 获取北向资金当日流入数据
url = "https://push2.eastmoney.com/api/qt/stock/get"
params = {
    "secid": "1.000001",  # 上证指数代码
    "fields": "f43,f44,f45,f46,f47,f48,f49,f50,f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65"
}
headers = {
    "User-Agent": "Mozilla/5.0"
}

response = requests.get(url, params=params, headers=headers)
data = response.json()

# 解析北向资金数据
if data.get("data"):
    north_flow = data["data"].get("f60", 0)  # 北向资金净流入
    print(f"当前北向资金净流入: {north_flow} 亿元")
else:
    print("数据获取失败,检查网络或接口")

小技巧:东方财富的接口字段经常变。我一般先打印出data的完整结构,再对照着找需要的字段。别问我怎么知道的,问就是踩过坑。

2.2.2 同花顺iFinD接口

同花顺的接口相对规范,但需要申请API权限。它的数据格式是标准的JSON,用起来很舒服。

# 同花顺iFinD接口示例(需安装iFinD库)
from iFinDPy import *

# 登录(需要账号密码)
THS_iFinDLogin("your_username", "your_password")

# 获取北向资金日频数据
data = THS_DataQuery(
    code="600519.SH",
    indicators="north_flow_amt",
    begin_date="2024-01-01",
    end_date="2024-12-31"
)

print(data.head())

注意:同花顺的API有调用次数限制。我曾经一天内调了上万次,直接被封了24小时。建议做好缓存,别频繁请求。

2.3 数据清洗与预处理

数据拿到手,千万别直接用。原始数据里什么妖魔鬼怪都有。我总结了一套清洗流程,你照着做就行。

2.3.1 常见数据问题

  • 缺失值:节假日、停牌日,北向资金数据会为空
  • 异常值:比如突然出现-9999这种明显错误的数据
  • 重复值:同一个时间点出现多条记录
  • 格式问题:日期格式不统一,数值带单位(如"亿")

2.3.2 清洗代码示例

import pandas as pd
import numpy as np

# 假设你已经拿到了原始数据
df = pd.read_csv("north_flow_raw.csv")

# 1. 处理缺失值
df = df.dropna(subset=["north_flow"])  # 删除北向资金为空的记录

# 2. 处理异常值
df = df[df["north_flow"] > -1000]  # 过滤掉明显异常的数据

# 3. 去重
df = df.drop_duplicates(subset=["date"])

# 4. 格式化日期
df["date"] = pd.to_datetime(df["date"])

# 5. 处理数值单位(如果数据带"亿"字)
df["north_flow"] = df["north_flow"].str.replace("亿", "").astype(float)

print(f"清洗后数据量: {len(df)} 条")
print(df.head())

避坑指南:我曾经遇到过一个坑——某平台返回的北向资金数据,在收盘前最后一分钟会突然跳变。后来发现是数据源在实时更新时没做平滑处理。所以,我建议你拿到数据后,先跟官方数据源做一次交叉验证。

2.4 知识体系总览

为了让你更直观地理解这一章的内容,我画了一张图。你看一眼就明白数据从哪来、到哪去、中间要经过哪些处理。

北向资金数据获取与处理流程 数据源 东方财富 / 同花顺 / Wind API接口 HTTP请求 / SDK调用 原始数据 JSON / CSV格式 数据清洗与预处理 缺失值处理 → 异常值过滤 → 去重 → 格式化 清洗后的数据 可直接用于策略分析

这张图把整个流程串起来了。从数据源到API,再到原始数据,最后经过清洗变成可用的数据。每一步都缺一不可。

我的习惯:每次拿到新数据源,我都会先画一张类似的流程图。不是为了好看,而是为了理清数据流转的每个环节。哪个环节容易出问题,一目了然。

好了,数据获取和清洗这块就讲这么多。记住一句话:数据质量决定策略上限。别嫌清洗麻烦,这一步省下来的时间,后面会加倍还给你。


公众号:蓝海资料掘金营,微信deep3321