2、数据获取基础:用Tushare/AkShare抓取散户情绪数据

做量化交易,数据就是你的弹药库。没有数据,再牛的策略也是纸上谈兵。

这一章,咱们来聊聊怎么拿到散户情绪数据。说白了,就是融资融券余额、新增投资者数量这些玩意儿。我个人习惯用Tushare和AkShare这两个库,一个老牌,一个后起之秀,各有千秋。

2.1 融资融券余额:市场情绪的体温计

融资余额高,说明大家看好后市,借钱也要买。融券余额高,说明有人看空,借股票来卖。两者一综合,就是市场的温度。

我刚开始做回测时,就吃过亏。当时只看了价格数据,没考虑情绪面,结果策略在极端行情下直接崩了。后来加上融资融券数据,效果好了不少。

核心逻辑:融资余额上升 → 散户情绪乐观 → 短期可能见顶。反之亦然。

用Tushare获取融资融券数据

Tushare需要注册token,不过免费版够用了。我个人建议用pro版,数据更全。

import tushare as ts

# 设置token(记得换成你自己的)
ts.set_token('你的token')
pro = ts.pro_api()

# 获取融资融券汇总数据
df = pro.margin(start='20240101', end='20241231')
print(df.head())

返回的数据长这样:

trade_date rzye rqye rzrqye
2024-12-31 15678.23亿 89.45亿 15767.68亿
2024-12-30 15650.11亿 88.92亿 15739.03亿

字段说明:rzye是融资余额,rqye是融券余额,rzrqye是两者之和。

避坑指南:我曾经遇到过数据缺失的情况,特别是节假日前后。建议用fillna()填充,或者直接跳过空值。

2.2 新增投资者数量:韭菜们的入场节奏

新增投资者数量,说白了就是新开户的人数。这个数据能直观反映散户的热情程度。

你想想看,当身边从不炒股的朋友都开始问你怎么开户时,大概率是市场快见顶了。我2015年就经历过这种场景,那叫一个疯狂。

用AkShare获取新增投资者数据

AkShare是开源的,不用注册,直接pip安装就能用。我个人觉得它更适合国内数据,尤其是A股相关的。

import akshare as ak

# 获取新增投资者数量
df = ak.stock_zh_a_new_investors(start_date='20240101', end_date='20241231')
print(df.head())

数据格式:

日期 新增投资者数量(万) 期末投资者数量(万)
2024-12 180.23 22000.56
2024-11 165.78 21820.33

注意:这个数据是月度更新的,不是每天都有。做日频策略时,需要做降频处理或者用插值法填充。

2.3 数据清洗与预处理

拿到原始数据后,别急着用。我踩过的坑太多了,数据里经常有脏东西。

import pandas as pd

# 假设df是拿到的原始数据
# 1. 处理缺失值
df = df.dropna(subset=['rzye', 'rqye'])

# 2. 日期格式统一
df['trade_date'] = pd.to_datetime(df['trade_date'])

# 3. 计算情绪指标
df['margin_ratio'] = df['rzye'] / df['rzrqye']  # 融资占比
df['investor_change'] = df['新增投资者数量(万)'].pct_change()  # 环比变化

print(df.head())

我的习惯:每次拿到新数据,先画个折线图看看趋势。肉眼能发现的异常值,往往比算法更靠谱。

2.4 知识体系总览

下面这张图,是我自己梳理的数据获取流程。你照着这个思路走,基本不会迷路。

散户情绪数据获取流程 数据源 获取方式 数据类别 Tushare 需注册token AkShare 开源免费 融资融券余额 新增投资者数量 数据清洗 → 缺失值处理 → 日期对齐 → 指标计算

2.5 实战小贴士

嗯,这里要注意几个点:

  • 数据频率问题:融资融券是日频,新增投资者是月频。做策略时,要么统一频率,要么用周频做中间值。
  • 数据延迟:融资融券数据T+1公布,新增投资者数据次月中旬才出。实盘时要注意这个滞后性。
  • 异常值处理:我遇到过某天融资余额突然暴涨,后来发现是数据录入错误。用3σ原则过滤一下比较稳妥。

核心总结:数据获取只是第一步,更重要的是理解数据背后的含义。融资融券余额反映的是杠杆情绪,新增投资者数量反映的是增量资金情绪。两者结合,才能更准确地判断散户的动向。

蓝海数据掘金营,专注资料整理