第三章:折溢价数据获取——你得先有数据,才能谈赚钱

做折溢价套利,最怕什么?

不是行情突变,不是手续费高。

是——你根本拿不到数据。

我刚开始做LOF折溢价的时候,每天手动打开几个平台,一个一个记价格。后来发现,等你记完,行情早变了。说白了,手工操作就是给市场送钱。

这一章,我就把数据获取的几条路给你捋清楚。从最简单的网页查看,到专业的API接口,再到实时行情抓取。你根据自己的技术水平和资金量,选一条合适的路就行。

3.1 主流数据平台:零门槛,但效率有限

如果你不想写代码,或者刚开始接触LOF,那这几个平台够用了。

集思录

我个人最常用的平台。它的LOF数据板块做得相当专业。打开网站,找到「LOF套利」栏目,能看到实时折溢价率、成交量、申购限额等关键指标。

我习惯每天早上开盘前刷一遍集思录,看看哪些品种折溢价异常。嗯,这里要注意:集思录的数据有15分钟延迟,做日内短线的话,这个延迟可能会让你吃瘪。

雪球

雪球的数据更新速度比集思录快一些,但它的LOF数据展示不够集中。你得自己搜索具体基金代码,才能看到折溢价信息。

雪球有个好处——社区讨论。有时候别人已经发现了套利机会,你跟着喝口汤也行。不过别全信,我见过有人在雪球上故意放假消息,自己先跑。

天天基金

天天基金的数据偏净值类,折溢价信息藏在基金详情页里。它的优势是历史数据全,适合做回测分析。

我的建议: 如果你只做低频套利(比如一周操作一两次),集思录+天天基金就够了。别为了省几百块钱的软件费,去手动复制粘贴数据——你的时间比那点钱值钱。

3.2 API数据接口:半自动化,效率翻倍

当你开始频繁交易,或者想用量化策略时,手动查数据就不行了。你需要API。

Tushare

国内最知名的金融数据接口之一。它提供LOF的实时行情、历史净值、折溢价率等数据。

我几年前用Tushare做过一个折溢价监控脚本。当时踩了个坑——Tushare的积分制度。免费用户只能调取有限的数据,而且频率受限。你想想看,做折溢价套利,数据延迟几分钟,机会就没了。

# 获取LOF实时行情示例
import tushare as ts

# 设置token(需要注册获取)
ts.set_token('your_token_here')
pro = ts.pro_api()

# 获取LOF基金列表
lof_list = pro.fund_basic(market='E', fund_type='LOF')

# 获取某只LOF的实时估值
df = pro.fund_nav(ts_code='501025.SH')
print(df)
注意: Tushare的免费token每天只能调取100次。如果你要监控多只基金,建议升级到付费版,或者用下面的AkShare。

AkShare

AkShare是完全免费的,而且数据源覆盖了东方财富、新浪财经等主流平台。它的接口设计比较直观,适合Python新手。

我最近的项目就在用AkShare。说实话,它的数据质量比Tushare稍差一点,偶尔会有空值或异常值。但胜在免费,而且更新频率高。

# 使用AkShare获取LOF折溢价数据
import akshare as ak

# 获取LOF实时行情
lof_realtime = ak.fund_lof_realtime_em()
print(lof_realtime.columns)

# 筛选出折溢价率超过2%的品种
high_premium = lof_realtime[lof_realtime['溢价率'] > 2]
print(high_premium)
小技巧: 用AkShare时,建议加个异常重试机制。我曾经遇到过网络波动导致数据抓取失败,结果错过了当天最大的套利机会。代码里加个try-except,失败后等几秒重试,能省很多麻烦。

3.3 实时行情数据抓取:WebSocket才是终极方案

API接口再好,也是轮询模式——你得主动去问服务器要数据。而WebSocket是推送模式,服务器主动把数据推给你。

为什么这个区别重要?

做折溢价套利,尤其是高频套利,你需要在折溢价率突破阈值的那一瞬间做出反应。轮询模式最快也要1秒一次,而WebSocket可以做到毫秒级推送。

WebSocket接入方案

国内主流券商和行情服务商都提供WebSocket接口。比如东方财富的WebSocket接口,可以订阅LOF的实时行情。

# WebSocket实时行情示例(伪代码)
import websocket
import json

def on_message(ws, message):
    data = json.loads(message)
    # 解析折溢价数据
    premium = data['premium_rate']
    if abs(premium) > 2:
        print(f"发现套利机会!折溢价率:{premium}%")
        # 触发交易逻辑

def on_error(ws, error):
    print(f"连接异常:{error}")
    # 自动重连

def on_close(ws, close_status_code, close_msg):
    print("连接关闭,尝试重连...")
    # 重连逻辑

def on_open(ws):
    # 订阅LOF行情
    subscribe_msg = {
        "action": "subscribe",
        "code": "501025"
    }
    ws.send(json.dumps(subscribe_msg))

# 启动WebSocket连接
ws = websocket.WebSocketApp("wss://your_websocket_url",
                            on_open=on_open,
                            on_message=on_message,
                            on_error=on_error,
                            on_close=on_close)
ws.run_forever()
重要提醒: WebSocket连接需要稳定的网络环境。我建议你部署在云服务器上,而不是本地电脑。为什么?因为本地网络一旦断掉,你的监控就停了。我曾经因为家里路由器重启,错过了3笔套利机会,损失了大概2000块。

3.4 数据清洗与存储:脏数据比没数据更可怕

数据拿到了,但你能直接用吗?

不能。

我见过太多人,从API拉下来数据就直接计算折溢价率,结果算出来一个离谱的数字。为什么?因为数据里有空值、有重复值、有时间戳不对齐的问题。

常见的数据脏问题

  • 空值: 某些时间点的净值数据缺失
  • 重复值: 同一时间戳出现多条记录
  • 异常值: 价格突然跳变(比如涨停/跌停时的数据)
  • 时间戳不对齐: 基金净值和实时价格的时间戳不一致

清洗流程

我总结了一套清洗流程,你可以直接套用:

import pandas as pd
import numpy as np

def clean_lof_data(df):
    # 1. 删除完全重复的行
    df = df.drop_duplicates()
    
    # 2. 处理空值
    df = df.dropna(subset=['nav', 'price'])
    
    # 3. 过滤异常值(价格超过3个标准差)
    df = df[np.abs(df['price'] - df['price'].mean()) <= 3 * df['price'].std()]
    
    # 4. 对齐时间戳(按分钟取整)
    df['timestamp'] = pd.to_datetime(df['timestamp']).dt.floor('T')
    
    # 5. 计算折溢价率
    df['premium_rate'] = (df['price'] - df['nav']) / df['nav'] * 100
    
    return df

# 使用示例
raw_data = pd.read_csv('lof_data.csv')
clean_data = clean_lof_data(raw_data)

存储方案

数据清洗完,你得存起来。我推荐两种方案:

存储方式 适用场景 优点 缺点
CSV文件 个人小规模回测 简单、无需数据库 查询慢、不支持并发
SQLite 中等规模策略 轻量、支持SQL查询 不适合高并发写入
MySQL/PostgreSQL 生产环境、团队协作 性能好、支持高并发 需要运维成本
InfluxDB(时序数据库) 高频实时数据存储 写入快、压缩率高 学习曲线陡
我的经验: 刚开始做的时候,用SQLite就够了。等你的数据量超过100万条,再考虑迁移到MySQL。别一开始就上分布式数据库,那是杀鸡用牛刀。

本章知识体系

下面这张图,帮你理清数据获取的完整链路:

LOF折溢价数据获取链路 数据源层 集思录 雪球 天天基金 券商行情 接口层 Tushare API AkShare API WebSocket 爬虫抓取 处理层 数据清洗 异常过滤 时间对齐 折溢价计算 存储层 CSV SQLite MySQL InfluxDB

从数据源到最终存储,每一步都有坑。但只要你按照这个链路走下来,数据质量就有保障了。

本章核心要点:
  • 入门用集思录+天天基金,零成本但效率低
  • 半自动化用Tushare或AkShare,注意积分限制和数据质量
  • 高频交易必须上WebSocket,毫秒级推送是关键
  • 数据清洗比数据获取更重要,脏数据会毁掉你的策略
  • 存储方案从小做起,SQLite起步,按需升级

数据搞定了,下一章我们聊聊怎么用这些数据构建套利策略。嗯,那才是真正开始赚钱的部分。

专注资料整理