数据获取与API接入:主流数据源对比

做量化交易,数据就是你的弹药。没有弹药,再好的策略也打不响。

我记得刚入行那会儿,为了拿到恐慌贪婪指数,我手动去网页上复制数据,一天一次,持续了三个月。后来数据量大了,手都复制麻了。嗯,从那以后我发誓要学会API接入。

今天咱们就聊聊,怎么用Python把恐慌贪婪指数数据拉下来。说白了,就是三步:选数据源、申请密钥、写代码拿数据。

主流数据源对比

目前市面上能拿到恐慌贪婪指数的数据源,主要有两家:Alternative.meCoinMarketCap

我个人习惯用Alternative.me,原因很简单——免费、轻量、专精。它本身就是做市场情绪分析的,恐慌贪婪指数是它的招牌产品。

对比项 Alternative.me CoinMarketCap
数据免费 ✅ 完全免费 ⚠️ 基础免费,高级付费
API密钥 不需要 需要申请
请求频率限制 无明确限制(建议合理使用) 每分钟30次(免费版)
历史数据 支持(可回溯数年) 支持
数据格式 JSON JSON
额外功能 仅恐慌贪婪指数 行情、市值、交易量等
我的建议:刚开始做策略回测,用Alternative.me就够了。等你要做多因子模型,需要结合行情数据时,再考虑CoinMarketCap。

API密钥申请

Alternative.me不需要密钥,直接请求就行。但CoinMarketCap需要,我简单说一下流程。

pro.coinmarketcap.com 注册账号,选免费计划。然后在Dashboard里找到API Key,复制下来保存好。

我曾经踩过的坑:把API密钥直接写死在代码里,然后上传到了GitHub公开仓库。第二天发现密钥被人拿去调用了几万次,账单直接爆了。所以,密钥一定要用环境变量管理!

正确的做法是这样:

import os
from dotenv import load_dotenv

load_dotenv()
CMC_API_KEY = os.getenv("CMC_API_KEY")  # 从.env文件读取

Python请求库安装

你需要两个库:requestsjson。后者是Python内置的,不用装。前者需要手动安装。

pip install requests

就这么一行命令。你想想看,装个库比去网页复制数据快多了吧?

JSON数据解析

数据拿到手了,怎么用?JSON格式说白了就是嵌套的字典和列表。咱们直接上代码。

先拿Alternative.me的数据试试:

import requests
import json

# 请求恐慌贪婪指数(最近30天)
url = "https://api.alternative.me/fng/?limit=30"
response = requests.get(url)

# 检查状态码
if response.status_code == 200:
    data = response.json()
    # 解析数据
    for item in data["data"]:
        date = item["timestamp"]
        value = item["value"]
        classification = item["value_classification"]
        print(f"日期: {date}, 指数: {value}, 情绪: {classification}")
else:
    print(f"请求失败,状态码: {response.status_code}")

运行结果大概长这样:

日期: 1700000000, 指数: 65, 情绪: Greed
日期: 1699913600, 指数: 62, 情绪: Greed
日期: 1699827200, 指数: 58, 情绪: Neutral

注意那个时间戳,是Unix时间戳,需要转换一下:

from datetime import datetime

timestamp = int(item["timestamp"])
date_str = datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d")
print(f"日期: {date_str}")

再看看CoinMarketCap的调用方式:

import requests

headers = {
    "X-CMC_PRO_API_KEY": CMC_API_KEY,
    "Accept": "application/json"
}

url = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest"
params = {"limit": 10}

response = requests.get(url, headers=headers, params=params)
data = response.json()

# 解析比特币的恐慌贪婪指数(需要额外字段)
for coin in data["data"]:
    if coin["symbol"] == "BTC":
        print(f"比特币当前价格: ${coin['quote']['USD']['price']:.2f}")
核心要点:JSON解析其实就是一层层剥洋葱。先看最外层是字典还是列表,然后一层层往下取。用 print(data.keys()) 先看看结构,再动手写代码。

知识体系总览

下面这张图,帮你把整个数据获取流程串起来:

恐慌贪婪指数数据获取流程 数据源选择 Alternative.me CoinMarketCap API密钥申请 Python请求库安装 JSON数据解析 获取恐慌贪婪指数数据
避坑指南:我曾经在解析JSON时,直接用了 data["data"],结果返回的是None。后来才发现,有些API返回的字段名是 "results" 而不是 "data"。所以,拿到数据后先 print(data) 看一眼结构,再动手写解析代码。

好了,数据获取这块就聊到这儿。你只要把上面这段代码跑通,恐慌贪婪指数就能源源不断地流进你的数据库了。


专注资料整理