cover_image

学习jsl 基金估值、折价套利, 编程实战篇-7

静听烟雨任平生 静听烟雨任平生

从想法到代码:我是如何实现 LOF 套利工具的

最近每天都花些时间在两个AI编程套利群,帮助解答一下问题,改改Bug、

有群友问:

我哪有什么水平啊,都是小白开始,靠着AI边练边学。掉进坑里次数多了,就会避开坑。折腾了两个月,熬夜熬成婆婆了。看到群友已经能自己扩展到新的基金品种,我还是挺高兴的。


“半自动交易”和“轮动交易”的这两个程序,我都没有全搞定,群友又开始提新需求了,于是,我就拿着AI这个锤子继续找钉子敲。


五一假期这两天,一鼓作气,按照 jsl 的模板,做了一个"仿品"。看看能不能作为 LOF 基金套利监控的看板? 借此分享一下我粗糙的开发流程和心得。



一、写代码前的准备:先想清楚再动手

1. 明确目标:需求拆解

我在开始写代码前,会先用思维导图梳理清楚需求,几个大块的功能,总要提前想清楚,比如“半自动交易”的:数据采集、静态官方估值、实时估值、交易这几个模块。

📊 LOF套利监控看板
├── 核心功能
│   ├── 实时获取基金数据(净值、收盘价、份额)
│   ├── 自动计算溢价率
│   ├── 展示套利机会
│   └── 历史数据对比
├── 数据源
│   ├── 新浪财经(价格)
│   ├── 东方财富(净值)
│   └── 交易所API(场内份额)
└── 技术架构
    ├── Python + Flask
    ├── SQLite数据库
    └── 定时任务更新


三下五除二,看看界面(很多数据不准确,没来得及核对),像不像正品?挺唬人的吧 看看我起的名字

2. 最小可行产品原则

不要一开始就追求完美,先实现核心功能:

✅ 第一阶段:能获取一只基金的数据
✅ 第二阶段:支持多只基金展示
✅ 第三阶段:添加估值计算和套利分析
✅ 第四阶段:优化界面和性能

历史估值还是比较准确的,误差很小。


二、我的 AI 工具箱

1. 主力工具:这两天只用了Trae ,这个好妹妹笨是笨一点,但也有自己的好处,就是我能看懂她做的每一步,我能深入介入,及时纠正她。不过,这也确实需要开发者懂技术、懂算法,否则难以驾驭她,只能去用Claude Code或者 Codex了。

AI的基本功都大同小异,差别在于哪一家AI更有经验,能听懂人话,不出错,少出错。TRAR差点火候。

  • 理解上下文:能记住整个项目的代码结构
  • 智能搜索:可以快速定位相关代码
  • 代码生成:根据需求生成完整函数
  • 调试协助:帮我找出 bug 并提供修复方案

三、与 AI 沟通的技巧

1. 清晰描述需求

错误示范:"帮我写一个基金数据获取程序"
正确示范

帮我写一个获取 LOF 基金数据的 Python 函数,要求:
1. 从新浪财经获取基金历史收盘价和成交量
2. 从东方财富获取基金历史净值
3. 返回格式:{"fund_code""161124""price": 1.23, "nav": 1.21}
4. 包含错误处理和超时机制,以及防止封账号措施

2. 提供上下文

在提问时,我会告诉 AI:

  • 项目使用的框架(Flask)
  • 数据库结构(SQLite)
  • 已有的代码风格
  • 参考文档或示例

3. 分阶段沟通

第一步:"帮我设计数据库表结构",这个我觉得是编程最重要的一个步骤,核心中的核心!
第二步:"根据这个表结构,写一个数据插入函数"
第三步:"现在帮我写一个 API 接口来查询这些数据"

4. 遇到问题时的沟通

当程序出现 bug 时,我会这样描述:

我遇到了一个问题:XXX指数在主面板不显示数据,但数据库里有数据。
1. 数据库中存储的符号是 "ZZZZ"
2. 主面板查询时用的是 "YYYY"
3. 问题可能出在 `_normalize_sina_symbol` 函数 
4. 请帮我找到并修复这个问题

四、文档编写:边写边记

1. 代码注释要规范

我会要求AI给关键函数写清楚注释:

def _fetch_eastmoney_csi_quotes(conn, symbols):
    """
    使用东财SSE API获取中证系列指数数据
    
    Args:
        conn: SQLite连接对象
        symbols: 指数符号列表,如 ['930914', '930917']
    
    Returns:
        dict: 指数行情字典,格式 {symbol: {"last_price": 123.45, ...}}
    
    Note:
        - 支持的前缀: 2.XXX (中证指数)
        - 数据需要 ÷100 才能得到实际数值
    """

2. README 要实用

我的 README 包含:

  • 项目概述和功能特点,整体框架,数据结构,
  • 快速开始指南
  • 技术架构说明,各个模块的功能, 数据流,
  • API 接口文档,各种读数据源的示范代码,
  • 常见问题解答

3. 及时更新变更日志

每次重大修改后,我都会更新文档:

## 🏆 重大更新 (2026-05-03)

### 🚨 紧急修复: 指数数据显示问题

**问题现象:**
指数在主面板显示为空
数据库中有数据但无法读取

**修复方案:**
1. 修改 `_is_a_share_index` 排除特殊代码
2. 统一符号格式存储

五、实战案例:突破东财港股指数API

🎯 背景:新浪API的困境

在项目开发初期,我使用新浪财经API获取港股指数(恒生指数、国企指数等),但遇到了严重问题:

❌ 新浪港股API经常返回错误
❌ 数据不稳定,经常超时
❌ 无法获取部分新指数(如HSTECH、HSSI)

💡 发现东财 API 接口

上个月我写了篇文章,学了一招,今天用上了,爬东方财富的指数页面。平时多积累,别临时抱佛脚,书到用时方恨少

第一步:分析请求结构

我告诉AI:

帮我分析这个URL的参数:
https://56.push2.eastmoney.com/api/qt/stock/sse?fields=f58,f107,f57,f43,f59,f169,f170,f152,f46,f60,f44,f45,f171,f47,f86,f292&mpi=1000&invt=2&fltt=1&secid=124.HSSI&ut=fa5fd1943c7b386f172d6893dbfba10b&dect=1&wbp2u=7663325595358202|0|1|0|web

请解释每个参数的作用,并帮我写出Python调用代码。

第二步:处理SSE响应格式

东财返回的是数据,需要解析处理:

# AI帮我生成的代码
resp = requests.get(url, headers=headers, stream=True, timeout=10)
for line in resp.iter_lines():
    if line:
        text = line.decode('utf-8')
        if text.startswith('data:'):
            data = json.loads(text[5:])
            # 解析数据...

第三步:解决数据解析问题

发现价格字段需要 ÷100:

✅ 原始数据: f43 = 165286
✅ 实际价格: 1652.86 (165286 ÷ 100)

第四步:支持多种指数

通过测试发现不同指数需要不同的前缀:

指数类型
前缀
示例
恒生指数系列
100.
100.HSI
恒生综合系列
124.
124.HSTECH
中证指数
2.
2.H11136

🎉 最终成果

成功实现了稳定的港股指数获取:

def _fetch_eastmoney_hk_quotes(conn, symbols):
    em_map = {
        "HSI": ("HSI""100"),
        "HSCEI": ("HSCEI""100"),
        "HSTECH": ("HSTECH""124"),
        "HSSI": ("HSSI""124"),
        "HSCI": ("HSCI""124")
    }
    
    # 构造请求、解析响应、存储数据...

验证结果:

✅ 恒生指数 (HSI): 25776.53, -1.28%
✅ 国企指数 (HSCEI): 8681.83, -1.41%  
✅ 恒生科技指数 (HSTECH): 4871.32, -2.15%
✅ 恒生综合小型股指数 (HSSI): 1652.86, -2.13%

1. 从小项目开始

不要一开始就写复杂系统,可以先尝试简单的,就像我在轮动群了给大家之前“布置”的简单作业:

  • 写一个获取天气的脚本
  • 做一个简单的待办事项应用
  • 爬取一个网站的信息

2. 善用 AI,但不依赖 AI

AI 是助手,不是替代者:

  • 让 AI 帮你写重复代码
  • 但核心逻辑要自己理解
  • 学会检查和验证 AI 的输出

3. 养成写文档的习惯

写文档的过程也是梳理思路的过程:

  • 先写注释,再写代码
  • 记录遇到的问题和解决方案
  • 定期回顾和总结

4. 不怕出错,勇于调试

编程就是不断试错的过程:

  • 遇到错误不要慌,出去散步,想一想一会没准就通了
  • 学会看错误信息
  • 用 print/debugger 逐步排查

结语

编程是一个创造性的过程,从想法到代码的转化需要:

  1. 清晰的规划:先想清楚再动手,不着急下手
  2. 合适的工具:善用 AI 提高效率
  3. 良好的沟通:与 AI 有效交流
  4. 持续的记录:编写清晰的文档

希望这些经验对大家有帮助!



修改于
继续滑动看下一个
静听烟雨任平生
向上滑动看下一个