一、前言
在LOF套利系统的开发过程中,数据获取一直是核心挑战之一。今天傍晚,无敌大佬发布了新的文章,跟着无敌哥使用DeepSeek学习Python的库和数组他紧锣密鼓完成了API接口的开发,给我们"全家桶半自动交易小组"开辟了绿色通道。
插播广告,欢迎大家加入全家桶,凡是凑齐7龙珠加入了全家桶的 & 附送我一个龙珠,我将拉你进小群,赠送我开发的"半吊子"源码程序,提供程序安装、运行的咨询,但每个人后续的定制化调试还是要依靠大家自己在AI的帮助进行了,我不负责调试他们的程序啊
。
从最初的爬虫方案到如今的API接口,经历了一次技术上的优雅升级。
二、爬虫方案的原理与缺点
1. 爬虫原理
我们最初的程序采用的是网络爬虫技术:
- HTTP请求伪造:通过构造HTTP请求,模拟浏览器访问Palmmicro网站
- HTML解析:获取网页HTML后,使用解析库提取结构化数据
- 数据提取:从HTML中提取LOF基金的估值数据,包括净值、锚点ETF信息
2. 爬虫的缺点
- 服务器负担:每个爬虫请求都会占用服务器资源,现在全家桶半自动交易小组的多个用户同时使用可能会导致服务器负载增加
- 数据一致性:HTML结构变化时,爬虫可能失效,数据解析可能不完整或出错
- 稳定性差:容易受到网站反爬机制的影响,可能被封禁IP
- 维护成本高:需要定期更新爬虫代码以适应网页结构变化
三、API方案的优势
1. API原理
API(Application Programming Interface)是一种定义好的接口,允许不同软件系统之间进行通信:
- 结构化数据:直接返回JSON格式的结构化数据,无需解析HTML
- 稳定可靠:API接口稳定,不会因网页结构变化而失效
2. API的优点
- 减轻服务器负担:API设计为高效处理请求,服务器可以更好地控制请求频率
四、API程序详解
1. 核心文件结构
woodykey/
├── _mytoken.py # 存储API Token
├── telegram.py # 核心通信模块
└── main.py # 示例脚本
2. _mytoken.py - 安全配置
BOT_TOKEN = "XXXXXX"
作用:安全存储API Token,避免硬编码在主代码中。
使用建议: 不要将此文件上传到代码托管平台, 确保Token的安全性,避免泄露。
3. telegram.py - 核心通信模块
3.1 post_json_array_to_telegram函数
核心代码:
# 构建API请求URL
url = f"https://palmmicro.com/php/telegram.php?token={bot_token}"
# 序列化数据为JSON,支持中文
json_payload = json.dumps(data_array, ensure_ascii=False)
# 发送POST请求
response = requests.post(
url,
data=json_payload,
headers={'Content-Type': 'application/json'},
timeout=timeout
)
# 解析返回数据
received_data = response.json()
作用:核心通信函数,处理API请求和响应。
技术要点:
- 构建带Token的API URL, 发送HTTP POST请求, 解析JSON响应数据
- 完善的异常处理(超时、HTTP错误、网络错误、JSON解析错误)
3.2 FetchPalmmicroData函数
核心代码:
def FetchPalmmicroData(strSymbols):
# 构造Telegram风格的消息格式
# 调用API发送请求
result = post_json_array_to_telegram(ar, BOT_TOKEN)
作用:构造API请求格式并调用通信函数。
技术要点:
- 构造Telegram风格的消息格式(API要求的固定格式)
- 调用post_json_array_to_telegram发送请求,处理API返回结果
4. main.py - 示例脚本
核心代码:
from telegram import FetchPalmmicroData
# 调用API获取基金数据
FetchPalmmicroData("SZ160719,SZ161125,SZ162411")
作用:展示API的使用方法。
技术要点:
- 传递基金代码参数(多个代码用逗号分隔),调用API获取数据
五、API调用流程
1. 准备工作
- 确保安装了requests库:
pip install requests
2. 调用步骤
- 构造请求:调用
FetchPalmmicroData函数,传入基金代码 - 发送请求:函数内部构造Telegram风格的消息格式并发送
六、API使用注意事项
1. 安全性
- 保护Token:不要将API Token泄露给他人
- 合理使用:不要过于频繁地调用API,避免给服务器造成负担
2. 错误处理
3. 性能优化
- 异步调用:使用异步方式调用API,提高程序响应速度
七、总结
从爬虫到API的转变是LOF套利系统的一次重要升级:
API的使用为LOF套利系统提供了坚实的数据基础,使得半自动交易的套利系统成为可能。随着系统的不断完善,相信LOF套利将会变得更加精准和高效。
八、未来展望
- 功能扩展:API可能会添加更多功能,如实时行情、历史数据等
九、实际应用案例:修改数据读取程序
1. 数据读取子程序的改造目标
刚刚,我已经完成了基金套利程序中的“数据读取子程序”的改造。
从使用爬虫获取数据改为了使用API获取数据,提高数据获取的可靠性和效率,同时保留爬虫作为备份机制。
2. 改造前的数据获取方式
在改造前,数据读取程序使用爬虫获取以下数据:
- LOF基金仓位数据:通过爬取Woody网页获取LOF基金的仓位信息
- LOF基金权重数据:通过爬取Woody持仓页面获取黄金和原油类基金的ETF持仓权重
- GLD、USO及其区域变种(^GLD-EU、^GLD-JP、^USO-EU、^USO-HK、^USO-JP)从Woody爬取
- 校准值数据:通过爬取Woody网页获取黄金、原油和其他LOF基金的校准值
3. 改造后的API数据获取
改造后,数据读取程序优先从API获取以下数据:
- LOF基金数据:LOF基金的仓位、权重、净值等信息
- 人民币中间价:优先从API获取,失败时回退到外汇管理局
4. 改造步骤详解
4.1 集成API模块
- 复制API相关文件:将
telegram.py和_mytoken.py复制到程序目录 - 导入模块:在程序中导入API函数并添加API可用性检查
4.2 实现主备切换机制
- 智能回退:当API获取失败时,自动回退到爬虫获取数据
- 数据一致性:确保API和爬虫返回的数据格式一致,便于后续处理
4.3 时间窗口处理
- T-1日数据:从API获取T-1日的GLD、USO及其变种数据
- T日数据:根据不同市场的交易时间,设置不同的获取时间窗口
4.4 数据处理优化
- ETF净值处理:从API获取XOP、XBI、SLV、QQQ、SPY的净值,写入basic表格
- 列顺序调整:将XBI列移动到SPY列的左边,优化表格结构
5. 改造效果
5.1 性能提升
- 数据获取速度:API响应速度比爬虫快3-5倍,大幅减少数据获取时间
- 网络请求次数:从原来的12次网页请求减少到1次API请求,减轻服务器负担
- 数据处理效率:直接处理JSON数据,避免了解析HTML的开销
5.2 可靠性增强
- 数据一致性:API返回结构化的JSON数据,避免了爬虫解析HTML时的错误
- 容错机制:当API获取失败时,自动回退到爬虫,确保数据不遗漏
5.3 功能增强
- 数据完整性:API返回更完整的数据,包括基金净值、人民币中间价等
- 日志输出:明确标识数据来源(API或爬虫),便于排查问题
6. 改造后的优势
- 代码更简洁:API调用代码比爬虫代码更简洁易读,减少了代码量
- 维护成本低:不需要定期更新爬虫代码以适应网页结构变化
- 扩展性强:可以方便地添加新的API功能,如实时行情、历史数据等
7. 实际运行效果
改造后的数据读取程序运行效果显著:
- 数据获取时间:从原来的30-40秒减少到5-10秒
- 数据准确性:API返回的数据更加准确,避免了解析错误
- 系统稳定性:运行更加稳定,减少了因网页结构变化导致的故障