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 知识体系总览
下面这张图,是我自己梳理的数据获取流程。你照着这个思路走,基本不会迷路。
2.5 实战小贴士
嗯,这里要注意几个点:
- 数据频率问题:融资融券是日频,新增投资者是月频。做策略时,要么统一频率,要么用周频做中间值。
- 数据延迟:融资融券数据T+1公布,新增投资者数据次月中旬才出。实盘时要注意这个滞后性。
- 异常值处理:我遇到过某天融资余额突然暴涨,后来发现是数据录入错误。用3σ原则过滤一下比较稳妥。
核心总结:数据获取只是第一步,更重要的是理解数据背后的含义。融资融券余额反映的是杠杆情绪,新增投资者数量反映的是增量资金情绪。两者结合,才能更准确地判断散户的动向。