首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >聊一聊基金套利,附基金溢价率抓取方法代码

聊一聊基金套利,附基金溢价率抓取方法代码

作者头像
子晓聊技术
发布2026-04-23 17:43:26
发布2026-04-23 17:43:26
990
举报
文章被收录于专栏:子晓AI量化子晓AI量化

最近准备收拾收拾过几天回老家, 分享之前写的文章。估计大部分人没看过

最近刷文章,经常看到一些博主聊基金套利的科普文章, 这里我也简单聊一聊。 后面重点聊一下基金溢价率抓取方法,并附上代码。

很多人买基金,只知道在支付宝、天天基金或者银行APP里“申购”和“赎回”,看着每天的净值涨跌心情起伏。但实际上,有一类特殊的基金,叫做LOF基金(Listed Open-end Fund,上市型开放式基金),它们不仅可以在场外买卖,还能像股票一样在证券交易所进行交易。

正是这种“双重身份”,创造了一个经典的套利空间:同一个东西,两个价格。当这两个价格出现偏差时,就是我们的“捡钱”时刻。

今天,我们就结合集思录的实时数据,手把手教你如何用Python量化思维,去挖掘这些散落在市场中的套利机会。

一、 套利的核心逻辑:买低卖高

LOF基金有两个价格:

  1. 场内交易价格:你在股票软件里看到的价格,由市场供求决定,实时变动。
  2. 基金净值(NAV):基金公司每天收盘后计算出的真实价值。

套利的本质就是利用这两个价格的差价:

  • 溢价套利:当场内价格 > 基金净值时,我们可以按照较低的净值“申购”基金,等份额到账后,再在场内按较高的价格“卖出”,赚取差价。 最近炒作的白银LOF就是这种场景。
  • 折价套利:当场内价格 < 基金净值时,我们可以买入场内便宜的基金份额,然后按照较高的净值“赎回”,赚取差价。

听起来很简单对吧?但难点在于:市场上有几百只LOF基金,谁有时间每天盯着看?

这时候,Python就派上用场了。

二、 数据挖矿:从集思录发现“黄金”

我们以集思录的数据源为例,看看真实的市场数据藏着什么秘密。

通过抓取集思录的LOF数据接口,我们获得了一份包含基金净值、价格、折溢价率等核心字段的JSON数据。只要稍微分析一下,就能发现有趣的案例:

案例:国投白银LOF (161226)在我们的数据样本中,这只基金出现了惊人的 19.05% 的折价率

  • 场内价格:2.543元
  • 基金净值:2.0483元
  • 这意味着,你在场内花2.5元买的基金,实际上只值2元。理论上,如果你买入并立即赎回,瞬间就能获得近20%的收益(当然,这里忽略了赎回费和到账时间)。

数据需要清洗。我们需要通过代码,筛选出折溢价率高 + 申购/赎回费率低 + 成交量大的真正优质标的。

三、 自动化工具:Python抓取实战

为了从海量数据中快速筛选,我们编写一段Python代码。这段代码的核心功能:

  1. 自动请求:模拟浏览器向集思录发送请求,获取最新的LOF数据。
  2. 数据清洗:将杂乱的JSON格式数据,转换为清晰的表格,提取出“基金代码”、“折溢价率”、“成交量”、“费率”等核心指标。
  3. 智能筛选:通过Pandas库,我们可以一行代码就筛选出所有“折溢价率绝对值大于2%”的基金。
  4. 导出分析:一键生成Excel文件,方便你用肉眼做最后的二次确认。

代码放在最后,需要的自取。

四、 避坑指南:套利不是“无风险”

虽然我们用了Python工具,但必须诚实地告诉你:套利是有成本的,也是有风险的。

在代码分析之外,你还需要手动考量以下几个“致命因素”:

  1. 费用刺客

找个有免5的证券账户,不然每次交易基金最少5元还是比较高的。

2、时间磨损

LOF申购通常是 T+2 日才能卖出,在这几天里,场内价格可能会回归,导致原本的利润空间被压缩。

3、流动性陷阱

没有成交量的套利机会就是“镜中花水中月”。一定要选择成交活跃的品种。

五、 最后

投资是一场关于信息的博弈。

以前,这些信息差掌握在机构和高阶散户手中;现在,利用Python和公开的数据接口,我们也能构建自己的“量化雷达”。

LOF基金套利,作为一种低风险、中收益的策略,非常适合作为资产配置的辅助手段。它或许不能让你一夜暴富,但这种从数据中挖掘价值、用逻辑战胜市场的过程,正是投资最大的乐趣。

最后附上代码:

代码语言:javascript
复制
import requests
import pandas as pd
import json
import time
def fetch_jisilu_lof_data():
    """
    抓取集思录LOF基金数据
    """
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        'Referer': 'https://www.jisilu.cn/data/lof/',
        'Cookie': ''
    }
    url = "https://www.jisilu.cn/data/lof/index_lof_list/?___jsl=LST___t=1767011241054&only_owned=&rp=25"
    try:
        print(f"正在请求数据: {url} ...")
        # 3. 发送GET请求
        response = requests.get(url, headers=headers, timeout=10)
        # 4. 判断请求状态
        if response.status_code == 200:
            # 5. 解析JSON数据
            json_data = response.json()
            # 检查是否包含 rows 数据
            if 'rows' in json_data:
                rows = json_data['rows']
                print(f"成功获取到 {len(rows)} 条基金数据。")
                # 6. 数据清洗:提取 'cell' 中的关键字段
                clean_list = []
                for item in rows:
                    cell = item.get('cell', {})
                    # 提取套利相关的核心字段
                    row_data = {
                        '基金代码': cell.get('fund_id'),
                        '基金名称': cell.get('fund_nm'),
                        '场内价格': cell.get('price'),
                        '昨日收盘': cell.get('pre_close'),
                        '基金净值': cell.get('fund_nav'),
                        '折溢价率(%)': cell.get('discount_rt'),  # 负数=溢价,正数=折价
                        '成交量(万手)': cell.get('volume'),
                        '成交额(万)': cell.get('amount'),
                        '净值日期': cell.get('nav_dt'),
                        '指数涨跌幅(%)': cell.get('index_increase_rt'),
                        '申购状态': cell.get('apply_status'),
                        '申购费': cell.get('apply_fee'),
                        '赎回状态': cell.get('redeem_status'),
                        '赎回费': cell.get('redeem_fee'),
                        '基金公司': cell.get('issuer_nm'),
                        '成交量换手率(%)': cell.get('turnover_rt')
                    }
                    clean_list.append(row_data)
                # 7. 转换为 DataFrame
                df = pd.DataFrame(clean_list)
                # 8. 简单的数据类型转换 (便于后续计算)
                # 将价格、净值、溢折率转为数字类型
                numeric_cols = ['场内价格', '基金净值', '折溢价率(%)', '成交量(万手)', '成交额(万)', '指数涨跌幅(%)']
                for col in numeric_cols:
                    df[col] = pd.to_numeric(df[col], errors='coerce')
                return df
            else:
                print("返回的数据中未找到 'rows' 字段。")
                return None
        else:
            print(f"请求失败,状态码: {response.status_code}")
            print(f"响应内容: {response.text[:200]}")
            return None
    except Exception as e:
        print(f"发生错误: {e}")
        return None
# --- 主程序执行 ---
if __name__ == "__main__":
    # 抓取数据
    df_lof = fetch_jisilu_lof_data()
    if df_lof is not None:
        # 打印前5行预览
        print("-" * 50)
        print("数据预览 (前5行):")
        print(df_lof.head())
        # --- 筛选示例:找出溢价率绝对值大于2%的基金 ---
        print("\n--- 潜在套利机会筛选 (折溢价率绝对值 > 2%) ---")
        # 注意:集思录数据中,discount_rt 为负值代表溢价,正值代表折价
        target_df = df_lof[df_lof['折溢价率(%)'].abs() > 2.0]
        print(target_df[['基金代码', '基金名称', '场内价格', '基金净值', '折溢价率(%)', '申购状态']])
        # --- 保存到文件 ---
        filename = 'jisilu_lof_data.xlsx'
        df_lof.to_excel(filename, index=False, engine='openpyxl')
        print(f"\n完整数据已保存至: {filename}")

如果我的分享对你投资有所帮助,不吝啬点个关注给个赞👍🏻呗

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子晓聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 套利的核心逻辑:买低卖高
  • 二、 数据挖矿:从集思录发现“黄金”
  • 三、 自动化工具:Python抓取实战
  • 四、 避坑指南:套利不是“无风险”
  • 五、 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档