第二章 数据获取与工具准备:如何获取北向资金数据
做北向资金分析,第一步就是搞定数据源。我见过太多人,策略想得天花乱坠,结果连数据都拿不到,或者拿到的数据是错的。这章咱们就把这事彻底说清楚。
2.1 主流数据源对比
目前市面上能拿到北向资金数据的渠道,主要有三个:东方财富、同花顺、Wind。我三个都用过,说说我的真实感受。
| 数据源 | 免费/付费 | 数据频率 | 历史长度 | 我的评价 |
|---|---|---|---|---|
| 东方财富 Choice | 部分免费 | 日频为主 | 2014年起 | 性价比最高,个人够用 |
| 同花顺 iFinD | 付费为主 | 日频/分钟 | 2014年起 | 接口稳定,适合量化 |
| Wind | 付费(贵) | 实时/日频 | 2014年起 | 机构首选,但太贵了 |
核心结论:个人做研究,东方财富的免费数据完全够用。我早期就是用这个跑通的策略。
2.2 东方财富数据获取实战
我个人习惯用东方财富的接口。为啥?免费、稳定、字段全。下面直接上代码。
2.2.1 安装必要的库
pip install akshare pandas numpy matplotlib
akshare 这个库,说白了就是东方财富数据的Python封装。我用了三年,基本没出过问题。
2.2.2 获取北向资金日频数据
import akshare as ak
import pandas as pd
# 获取北向资金每日流向
north_flow = ak.stock_hsgt_north_net_flow_in_em()
print(north_flow.head())
跑出来是这样的:
| 日期 | 沪股通净流入 | 深股通净流入 | 北向合计净流入 |
|---|---|---|---|
| 2024-01-02 | 12.5亿 | -3.2亿 | 9.3亿 |
| 2024-01-03 | -5.1亿 | 8.7亿 | 3.6亿 |
小技巧:我建议你每天收盘后跑一次这个接口,把数据存到本地CSV。这样即使以后接口变了,你还有历史数据。
2.3 常用数据字段解读
拿到数据后,很多人不知道哪些字段有用。我踩过这个坑,一开始把几十个字段全下载下来,结果大部分用不上。
真正核心的字段,其实就这几个:
- 北向合计净流入:最重要的指标,代表当天外资整体态度
- 沪股通净流入:看外资对上交所股票的态度
- 深股通净流入:看外资对深交所股票的态度
- 成交额:配合净流入看,能判断是不是真金白银
- 持仓市值:看外资累计持仓的变化趋势
避坑指南:我曾经以为「北向合计净流入」就是全部,结果发现它经常被大单干扰。后来我加入了「成交额」字段做过滤,信号质量提升了不少。
2.4 数据清洗与预处理
原始数据直接拿来用?不行。我吃过这个亏,数据里有空值、有异常值,直接跑策略会出大问题。
# 数据清洗示例
def clean_north_flow(df):
# 去掉空值
df = df.dropna()
# 去掉异常值(比如单日流入超过500亿的,基本是数据错误)
df = df[df['北向合计净流入'].abs() < 500]
# 按日期排序
df = df.sort_values('日期')
return df
clean_data = clean_north_flow(north_flow)
嗯,这里要注意:数据清洗不是越复杂越好。我见过有人用各种统计方法清洗,结果把真实信号也洗掉了。简单粗暴点,去掉明显异常的就够了。
2.5 数据存储方案
数据拿到手,存哪里?我推荐两种方式:
- 个人研究:直接存CSV,简单方便
- 量化系统:存SQLite或MySQL,方便回测
# 存CSV
clean_data.to_csv('north_flow_data.csv', index=False)
# 存SQLite
import sqlite3
conn = sqlite3.connect('north_flow.db')
clean_data.to_sql('north_flow', conn, if_exists='replace')
我的习惯:每天收盘后自动跑一次数据获取脚本,存到SQLite。这样回测时直接读数据库,不用每次都去爬接口。
2.6 本章知识体系
下面这张图,是我自己总结的数据获取全流程。你照着这个走,不会出错。
这张图把整个流程串起来了。你从数据源开始,一步步往下走,最后拿到干净的数据存起来。就这么简单。
最后说一句:数据获取是基本功,但很多人栽在这上面。我建议你花一周时间,把数据接口跑通、存好、验证过。后面做策略分析,你会感谢现在的自己。