- 新增 Go与Python量化知识迭代对比分析.md * 7大维度全面对比(性能/并发/生态/开发效率/部署/稳定性/社区) * 实测数据:Go比Python快10-200倍,Web服务吞吐量12倍 * 推荐混合架构:Go负责基础设施,Python负责ML分析 * 各场景最优选择速查表 + 综合评分(Go 7.65 vs Python 7.35) - 新增 数据源接入完整指南_扩展版.md(12→28个数据源) * 社交媒体:X/Twitter(Nitter免费方案+twitterapi.io)、Reddit(PRAW)、Telegram(Telethon)、LunarCrush、Alternative.me恐惧贪婪指数 * 新闻情绪:CryptoPanic、Finnhub、Santiment * 链上扩展:Dune Analytics(免费SQL)、Arkham Intelligence(免费巨鲸追踪) * 综合市场:CoinGecko(完全免费)、Token Terminal * 衍生品:Laevitas(GEX/期权流)、Coinalyze * 宏观扩展:Yahoo Finance、世界银行 * 完整Go/Python代码示例 + 数据源优先级策略
32 KiB
数据源接入完整指南(扩展版)
本文档在原版(12 个数据源)基础上大幅扩展,覆盖 28 个数据源,重点补充社交媒体情绪数据(X/Twitter、Reddit、Telegram)的免费方案,以及衍生品、链上替代方案、新闻情绪、宏观经济等新类别。
返回:Go 迭代系统主文档 | 原版数据源指南
一、数据源全景总览(28 个)
| 类别 | 数据源 | 免费层 | 核心数据 |
|---|---|---|---|
| CEX(3) | Binance | ✅ 完全免费 | K 线、资金费率、未平仓量 |
| OKX | ✅ 完全免费 | K 线、期权、资金费率 | |
| Bybit | ✅ 完全免费 | K 线、资金费率、持仓量 | |
| 期权衍生品(3) | Deribit | ✅ 完全免费 | 期权链、IV、DVOL |
| Laevitas | ✅ 有限免费 | GEX、期权流、资金费率聚合 | |
| Coinalyze | ✅ 有限免费 | 未平仓量、清算、资金费率 | |
| 链上数据(4) | Glassnode | ⚠️ 付费 | MVRV、SOPR、NVT |
| CoinGlass | ⚠️ 付费 | 清算、多空比、资金费率 | |
| Dune Analytics | ✅ 免费 SQL | 链上自定义查询 | |
| Arkham Intelligence | ✅ 免费 | 巨鲸追踪、地址标签 | |
| DeFi 数据(3) | DeFiLlama | ✅ 完全免费 | TVL、协议数据 |
| The Graph | ✅ 有限免费 | DEX 链上数据 | |
| Token Terminal | ✅ 有限免费 | 协议收入、P/E 比率 | |
| 综合市场(3) | CoinMarketCap | ✅ 免费层 | 市值、排名 |
| CoinGecko | ✅ 完全免费 | 市值、价格、社交数据 | |
| Messari | ⚠️ 付费 | 研究报告、链上指标 | |
| 社交媒体(5) | X/Twitter | ⚠️ 见方案 | KOL 情绪、热词 |
| ✅ 免费 API | r/Bitcoin 社区情绪 | ||
| Telegram | ✅ 免费 | 公开频道消息 | |
| LunarCrush | ✅ 有限免费 | 综合社交情绪指数 | |
| Alternative.me | ✅ 完全免费 | 恐惧贪婪指数 | |
| 新闻情绪(3) | CryptoPanic | ✅ 免费层 | 加密新闻聚合 |
| Santiment | ⚠️ 付费 | 社交趋势、开发活跃度 | |
| Finnhub | ✅ 免费层 | 新闻情绪、基本面 | |
| 宏观经济(4) | FRED | ✅ 完全免费 | 利率、CPI、M2 |
| 美联储官网 | ✅ 完全免费 | FOMC 会议纪要 | |
| 世界银行 | ✅ 完全免费 | 全球宏观数据 | |
| Yahoo Finance | ✅ 完全免费 | 股指、外汇、大宗商品 |
二、社交媒体数据源(重点补充)
2.1 X/Twitter:免费方案全解析
X(原 Twitter)是加密货币 KOL 最集中的平台,但 2023 年后官方 API 已全面付费,最低档 $42,000/年,对个人量化研究者完全不可行。以下是经过验证的免费替代方案:
方案一:Nitter 镜像站抓取(推荐,完全免费)
Nitter 是 X 的开源前端镜像,通过 RSS/HTML 方式提供推文数据,无需 API Key。
# Python 实现(ntscraper 库)
# pip install ntscraper
from ntscraper import Nitter
scraper = Nitter()
# 抓取特定 KOL 的最新推文
tweets = scraper.get_tweets("CryptoKaleo", mode="user", number=20)
# 抓取关键词搜索结果
btc_tweets = scraper.get_tweets("BTC bullish", mode="search", number=50)
for tweet in tweets["tweets"]:
print(tweet["date"], tweet["text"], tweet["stats"]["likes"])
// Go 实现(HTTP 抓取 Nitter RSS)
package twitter
import (
"encoding/xml"
"fmt"
"net/http"
"time"
)
// Nitter 公开实例列表(任选其一)
var NitterInstances = []string{
"https://nitter.net",
"https://nitter.privacydev.net",
"https://nitter.poast.org",
}
type NitterRSS struct {
Channel struct {
Items []struct {
Title string `xml:"title"`
PubDate string `xml:"pubDate"`
Link string `xml:"link"`
} `xml:"item"`
} `xml:"channel"`
}
// GetUserTweets 通过 Nitter RSS 获取用户推文
func GetUserTweets(username string) ([]Tweet, error) {
for _, instance := range NitterInstances {
url := fmt.Sprintf("%s/%s/rss", instance, username)
resp, err := http.Get(url)
if err != nil || resp.StatusCode != 200 {
continue // 尝试下一个实例
}
defer resp.Body.Close()
var rss NitterRSS
xml.NewDecoder(resp.Body).Decode(&rss)
tweets := make([]Tweet, len(rss.Channel.Items))
for i, item := range rss.Channel.Items {
tweets[i] = Tweet{
Text: item.Title,
CreatedAt: item.PubDate,
URL: item.Link,
}
}
return tweets, nil
}
return nil, fmt.Errorf("所有 Nitter 实例均不可用")
}
Nitter 方案的局限性:
- 实例可用性不稳定(X 会封锁 IP),需维护多个备用实例列表
- 无法获取推文的精确互动数据(点赞/转发数可能不准确)
- 搜索功能受限(无法按时间范围精确搜索)
- 不适合高频抓取(每分钟不超过 10 次请求)
方案二:twitterapi.io(免费额度,推荐)
twitterapi.io 提供 100,000 免费积分(约 1000 次 API 调用),适合低频量化研究:
import requests
headers = {"X-API-Key": "YOUR_FREE_API_KEY"} # 注册免费获取
# 搜索加密货币相关推文
response = requests.get(
"https://api.twitterapi.io/twitter/tweet/advanced_search",
headers=headers,
params={
"query": "BTC bullish -is:retweet lang:en",
"queryType": "Latest",
"max_results": 20
}
)
tweets = response.json()["tweets"]
方案三:X 官方免费层(Basic Plan)
X 官方 Basic Plan 提供每月 10,000 次读取请求,适合极低频监控:
价格:$100/月(相对可接受)
限制:10,000 次读取/月,约 333 次/天
适用:监控 10-20 个核心 KOL 账号的日更新
X/Twitter 数据接入策略总结:
| 方案 | 费用 | 数据量 | 稳定性 | 推荐场景 |
|---|---|---|---|---|
| Nitter RSS | 完全免费 | 低(每用户最新 20 条) | 中(实例不稳定) | 监控 5-10 个 KOL |
| twitterapi.io | 免费额度 | 中(1000 次/月) | 高 | 低频情绪监控 |
| X Basic Plan | $100/月 | 中(10000 次/月) | 高 | 专业量化研究 |
| X Pro Plan | $5000/月 | 高 | 高 | 机构级使用 |
重点监控的加密 KOL 列表:
| 账号 | 方向 | 特点 |
|---|---|---|
| @CryptoKaleo | BTC/ETH 技术分析 | 图表分析,准确率较高 |
| @PlanB | BTC S2F 模型 | 长期价值投资视角 |
| @Pentosh1 | 技术分析 | 短期交易信号 |
| @CryptoCred | 技术分析教育 | 系统性分析框架 |
| @WhalePanda | 市场情绪 | 反向指标参考 |
| @glassnode | 链上数据 | 官方链上分析 |
| @ki_young_ju | 链上数据 | CryptoQuant 创始人 |
2.2 Reddit:完全免费的社区情绪数据
Reddit 提供官方免费 API(PRAW),r/Bitcoin 和 r/CryptoCurrency 是最重要的散户情绪来源。
Python 接入(PRAW 库):
# pip install praw
import praw
reddit = praw.Reddit(
client_id="YOUR_CLIENT_ID", # Reddit App 免费注册
client_secret="YOUR_CLIENT_SECRET",
user_agent="QuantKnowledge/1.0"
)
# 获取 r/Bitcoin 热门帖子
subreddit = reddit.subreddit("Bitcoin")
hot_posts = list(subreddit.hot(limit=25))
for post in hot_posts:
print(f"标题: {post.title}")
print(f"评分: {post.score}")
print(f"评论数: {post.num_comments}")
print(f"情绪词: {'bullish' if 'bull' in post.title.lower() else 'bearish'}")
Go 接入(REST API):
package reddit
import (
"encoding/json"
"fmt"
"net/http"
)
const RedditBaseURL = "https://www.reddit.com"
type RedditPost struct {
Title string `json:"title"`
Score int `json:"score"`
NumComments int `json:"num_comments"`
Created float64 `json:"created_utc"`
URL string `json:"url"`
}
// GetHotPosts 获取指定 subreddit 的热门帖子
func GetHotPosts(subreddit string, limit int) ([]RedditPost, error) {
url := fmt.Sprintf("%s/r/%s/hot.json?limit=%d", RedditBaseURL, subreddit, limit)
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("User-Agent", "QuantKnowledge/1.0") // Reddit 要求 User-Agent
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var result struct {
Data struct {
Children []struct {
Data RedditPost `json:"data"`
} `json:"children"`
} `json:"data"`
}
json.NewDecoder(resp.Body).Decode(&result)
posts := make([]RedditPost, len(result.Data.Children))
for i, child := range result.Data.Children {
posts[i] = child.Data
}
return posts, nil
}
Reddit 情绪指标构建:
def calculate_reddit_sentiment(subreddit="Bitcoin", limit=100):
"""
基于 Reddit 帖子构建情绪指标
返回值:-1(极度悲观)到 +1(极度乐观)
"""
posts = get_hot_posts(subreddit, limit)
bullish_keywords = ["bull", "moon", "pump", "buy", "long", "ATH", "breakout"]
bearish_keywords = ["bear", "dump", "sell", "short", "crash", "rekt", "dead"]
total_score = 0
weighted_sentiment = 0
for post in posts:
text = (post["title"] + " " + post.get("selftext", "")).lower()
bull_count = sum(1 for kw in bullish_keywords if kw in text)
bear_count = sum(1 for kw in bearish_keywords if kw in text)
post_sentiment = (bull_count - bear_count) / max(bull_count + bear_count, 1)
weight = post["score"] + post["num_comments"] # 高互动帖子权重更高
weighted_sentiment += post_sentiment * weight
total_score += weight
return weighted_sentiment / max(total_score, 1)
关键 Subreddit 列表:
| Subreddit | 规模 | 特点 | 量化意义 |
|---|---|---|---|
| r/Bitcoin | 700 万+ | BTC 长期持有者 | 散户情绪基准 |
| r/CryptoCurrency | 900 万+ | 综合加密讨论 | 市场整体情绪 |
| r/ethtrader | 200 万+ | ETH 交易者 | ETH 情绪 |
| r/SatoshiStreetBets | 50 万+ | 高风险交易 | 极端情绪信号 |
| r/algotrading | 150 万+ | 量化交易者 | 专业视角 |
2.3 Telegram:公开频道免费抓取
Telegram 是加密货币信号频道最集中的平台,通过 Telethon 库可以免费抓取公开频道消息。
Python 接入(Telethon 库):
# pip install telethon
from telethon.sync import TelegramClient
from telethon import functions, types
import asyncio
# 需要注册 Telegram App 获取 api_id 和 api_hash(完全免费)
# 注册地址:https://my.telegram.org/apps
api_id = YOUR_API_ID
api_hash = "YOUR_API_HASH"
async def get_channel_messages(channel_username, limit=100):
async with TelegramClient("quant_session", api_id, api_hash) as client:
messages = []
async for message in client.iter_messages(channel_username, limit=limit):
if message.text:
messages.append({
"id": message.id,
"date": message.date.isoformat(),
"text": message.text,
"views": message.views or 0,
"forwards": message.forwards or 0
})
return messages
# 使用示例
messages = asyncio.run(get_channel_messages("@whale_alert"))
Go 接入(MTProto 协议,需要第三方库):
// 使用 gotd/td 库(Go 的 Telegram MTProto 实现)
// go get github.com/gotd/td
package telegram
import (
"context"
"github.com/gotd/td/telegram"
"github.com/gotd/td/tg"
)
// 注意:Go 的 Telegram 库较为复杂,建议此模块保留 Python 实现
// Go 层通过 HTTP 调用 Python 微服务获取 Telegram 数据
推荐监控的 Telegram 频道:
| 频道 | 类型 | 内容 | 量化意义 |
|---|---|---|---|
| @whale_alert | 链上巨鲸 | 大额转账提醒 | 即时巨鲸动向 |
| @CryptoQuantFund | 量化信号 | 技术分析信号 | 信号参考 |
| @Bitcoin_signals | 交易信号 | BTC 交易信号 | 散户信号聚合 |
| @glassnode_alerts | 链上数据 | Glassnode 关键指标触发 | 链上预警 |
| @coinglass_alert | 衍生品 | 大额清算预警 | 清算风险 |
| @CryptoNewsFlash | 新闻 | 实时加密新闻 | 事件驱动 |
Telegram 数据处理流程:
Telethon 抓取公开频道消息
↓
文本预处理(去除链接、表情符号)
↓
关键词提取(BTC/ETH/价格/信号词)
↓
情绪分类(多头/空头/中性)
↓
写入 MySQL(channel_messages 表)
↓
Go 服务读取并聚合为情绪指标
↓
更新 MD 文档中的社交情绪区块
2.4 LunarCrush:综合社交情绪指数
LunarCrush 聚合 X、Reddit、YouTube 等平台数据,提供标准化的社交情绪指数,免费层可访问基础数据。
基础 URL:https://lunarcrush.com/api4/public
免费层可用端点:
| 端点 | 说明 | 数据内容 |
|---|---|---|
/coins/list/v2 |
币种社交排名 | AltRank、Galaxy Score |
/coins/{coin}/v1 |
单币种社交数据 | 社交量、情绪、互动量 |
/coins/{coin}/time-series/v2 |
历史社交数据 | 时序社交指标 |
核心指标说明:
| 指标 | 说明 | 量化意义 |
|---|---|---|
| Galaxy Score | 综合社交健康评分(0-100) | > 70 = 社交热度高 |
| AltRank | 山寨币社交排名 | 排名上升 = 关注度增加 |
| Social Volume | 社交提及量 | 急增 = 市场关注 |
| Social Engagement | 社交互动量 | 高互动 = 情绪强烈 |
| Social Sentiment | 情绪极性(-1 到 +1) | > 0.5 = 偏多头情绪 |
import requests
# 免费层无需 API Key(有速率限制)
def get_lunarcrush_data(coin="BTC"):
url = f"https://lunarcrush.com/api4/public/coins/{coin}/v1"
resp = requests.get(url, headers={"Authorization": "Bearer FREE_TOKEN"})
data = resp.json()["data"]
return {
"galaxy_score": data.get("galaxy_score"),
"alt_rank": data.get("alt_rank"),
"social_volume": data.get("social_volume"),
"social_sentiment": data.get("sentiment")
}
2.5 Alternative.me 恐惧贪婪指数:完全免费
Alternative.me 的加密货币恐惧贪婪指数是最广泛使用的市场情绪指标,完全免费,无需 API Key。
API 端点:https://api.alternative.me/fng/
import requests
def get_fear_greed_index(limit=30):
"""获取最近 30 天的恐惧贪婪指数"""
url = f"https://api.alternative.me/fng/?limit={limit}&format=json"
resp = requests.get(url)
data = resp.json()["data"]
return [
{
"value": int(d["value"]),
"classification": d["value_classification"], # "Extreme Fear"/"Fear"/"Neutral"/"Greed"/"Extreme Greed"
"timestamp": d["timestamp"]
}
for d in data
]
// Go 接入
package alternativeme
import (
"encoding/json"
"net/http"
)
const FearGreedURL = "https://api.alternative.me/fng/?limit=30&format=json"
type FearGreedData struct {
Value int `json:"value,string"`
Classification string `json:"value_classification"`
Timestamp string `json:"timestamp"`
}
func GetFearGreedIndex() ([]FearGreedData, error) {
resp, err := http.Get(FearGreedURL)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var result struct {
Data []FearGreedData `json:"data"`
}
json.NewDecoder(resp.Body).Decode(&result)
return result.Data, nil
}
恐惧贪婪指数解读:
| 数值范围 | 分类 | 市场含义 | 量化操作 |
|---|---|---|---|
| 0-24 | 极度恐惧 | 市场恐慌性抛售 | 逆向思维买入区 |
| 25-44 | 恐惧 | 市场悲观 | 谨慎观望 |
| 45-55 | 中性 | 市场平衡 | 跟随趋势 |
| 56-74 | 贪婪 | 市场乐观 | 减仓区 |
| 75-100 | 极度贪婪 | 市场狂热 | 逆向思维卖出区 |
三、新闻情绪数据源
3.1 CryptoPanic:加密新闻聚合(免费层)
CryptoPanic 聚合 200+ 个加密新闻源,提供免费 API(每天 1000 次请求)。
基础 URL:https://cryptopanic.com/api/v1
注册:https://cryptopanic.com/developers/api/ (免费注册获取 API Key)
核心端点:
| 端点 | 说明 | 关键参数 |
|---|---|---|
/posts/ |
新闻列表 | currencies=BTC,ETH&filter=hot |
/posts/ |
按情绪过滤 | filter=bullish 或 filter=bearish |
import requests
CRYPTOPANIC_API_KEY = "YOUR_FREE_API_KEY"
def get_crypto_news(currencies="BTC,ETH", filter_type="hot", limit=20):
url = "https://cryptopanic.com/api/v1/posts/"
params = {
"auth_token": CRYPTOPANIC_API_KEY,
"currencies": currencies,
"filter": filter_type, # hot/rising/bullish/bearish/important
"public": "true"
}
resp = requests.get(url, params=params)
results = resp.json()["results"]
return [
{
"title": r["title"],
"source": r["source"]["title"],
"published_at": r["published_at"],
"votes": r.get("votes", {}),
"currencies": [c["code"] for c in r.get("currencies", [])]
}
for r in results[:limit]
]
# 情绪分析:统计看涨/看跌新闻比例
def get_news_sentiment_ratio(currency="BTC"):
bullish = len(get_crypto_news(currency, "bullish", 50))
bearish = len(get_crypto_news(currency, "bearish", 50))
total = bullish + bearish
if total == 0:
return 0
return (bullish - bearish) / total # -1 到 +1
3.2 Finnhub:新闻情绪 + 基本面(免费层)
Finnhub 提供加密货币新闻情绪分析,免费层每分钟 60 次请求。
基础 URL:https://finnhub.io/api/v1
核心端点:
| 端点 | 说明 | 参数 |
|---|---|---|
/news |
加密新闻 | category=crypto&token=YOUR_KEY |
/news-sentiment |
新闻情绪分析 | symbol=BINANCE:BTCUSDT&token=YOUR_KEY |
/crypto/candle |
K 线数据 | symbol=BINANCE:BTCUSDT&resolution=10 |
package finnhub
import (
"encoding/json"
"fmt"
"net/http"
)
const FinnhubBaseURL = "https://finnhub.io/api/v1"
type NewsSentiment struct {
BullishPercent float64 `json:"buzz"`
BearishPercent float64 `json:"bearishPercent"`
BullishPercent2 float64 `json:"bullishPercent"`
Score float64 `json:"companyNewsScore"`
SectorAvg float64 `json:"sectorAverageBullishPercent"`
}
func GetNewsSentiment(symbol, apiKey string) (*NewsSentiment, error) {
url := fmt.Sprintf("%s/news-sentiment?symbol=%s&token=%s",
FinnhubBaseURL, symbol, apiKey)
resp, err := http.Get(url)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var sentiment NewsSentiment
json.NewDecoder(resp.Body).Decode(&sentiment)
return &sentiment, nil
}
四、扩展链上数据源
4.1 Dune Analytics:免费 SQL 链上查询
Dune 允许用 SQL 查询以太坊、Solana 等主流链的原始数据,免费层提供 API 访问。
基础 URL:https://api.dune.com/api/v1
认证:X-Dune-API-Key: YOUR_API_KEY(免费注册获取)
工作流程:
- 在 Dune 网站编写 SQL 查询(如 Uniswap V3 BTC 交易量)
- 获取查询 ID(URL 中的数字)
- 通过 API 定期执行查询并获取结果
import requests
import time
DUNE_API_KEY = "YOUR_FREE_API_KEY"
HEADERS = {"X-Dune-API-Key": DUNE_API_KEY}
def execute_dune_query(query_id: int) -> dict:
"""执行 Dune 查询并等待结果"""
# 1. 触发执行
execute_url = f"https://api.dune.com/api/v1/query/{query_id}/execute"
exec_resp = requests.post(execute_url, headers=HEADERS)
execution_id = exec_resp.json()["execution_id"]
# 2. 轮询等待结果
status_url = f"https://api.dune.com/api/v1/execution/{execution_id}/status"
while True:
status = requests.get(status_url, headers=HEADERS).json()
if status["state"] == "QUERY_STATE_COMPLETED":
break
time.sleep(2)
# 3. 获取结果
result_url = f"https://api.dune.com/api/v1/execution/{execution_id}/results"
return requests.get(result_url, headers=HEADERS).json()["result"]["rows"]
# 示例:查询 BTC 巨鲸地址余额变化(需要预先在 Dune 创建查询)
# 查询 ID 可以从 Dune 社区现有查询中找到
btc_whale_data = execute_dune_query(query_id=3456789)
推荐的 Dune 社区查询(可直接复用):
| 查询名称 | 说明 | 适用链 |
|---|---|---|
| Uniswap V3 Volume | DEX 交易量 | Ethereum |
| Aave Liquidations | 清算事件 | Ethereum |
| ETH Staking Flows | 质押资金流向 | Ethereum |
| SOL DEX Volume | Solana DEX 交易量 | Solana |
| USDT/USDC Mint/Burn | 稳定币增发/销毁 | 多链 |
4.2 Arkham Intelligence:免费巨鲸追踪
Arkham 提供地址标签和巨鲸追踪功能,是 Nansen 的免费替代方案。
访问方式:https://platform.arkhamintelligence.com/
免费功能:
- 地址标签查询(交易所、基金、KOL 地址)
- 实体追踪(Binance、Coinbase 等交易所的链上资金流向)
- 历史交易记录查询
API 接入(需申请 API Key):
import requests
ARKHAM_API_KEY = "YOUR_ARKHAM_API_KEY"
def get_entity_transfers(entity="binance", limit=20):
"""获取特定实体(如 Binance)的最新链上转账"""
url = "https://api.arkhamintelligence.com/transfers"
headers = {"API-Key": ARKHAM_API_KEY}
params = {
"entities": entity,
"limit": limit,
"sortKey": "time",
"sortDir": "desc"
}
resp = requests.get(url, headers=headers, params=params)
return resp.json()["transfers"]
量化使用场景:
- 监控 Binance 冷钱包的大额 BTC 转入/转出(判断交易所储备变化)
- 追踪已知巨鲸地址的持仓变化
- 检测大型 DeFi 协议的资金流向
五、扩展综合市场数据源
5.1 CoinGecko:完全免费的市场数据
CoinGecko 提供完全免费的市场数据 API(无需 API Key),是 CoinMarketCap 的最佳免费替代。
基础 URL:https://api.coingecko.com/api/v3
核心端点:
| 端点 | 说明 | 参数 |
|---|---|---|
/simple/price |
实时价格 | ids=bitcoin,ethereum&vs_currencies=usd |
/coins/{id}/market_chart |
历史价格 | vs_currency=usd&days=30 |
/coins/markets |
市值排名 | vs_currency=usd&order=market_cap_desc&per_page=100 |
/global |
全球市场指标 | — |
/coins/{id} |
币种详情(含社交数据) | — |
package coingecko
import (
"encoding/json"
"fmt"
"net/http"
)
const BaseURL = "https://api.coingecko.com/api/v3"
type GlobalData struct {
TotalMarketCap map[string]float64 `json:"total_market_cap"`
TotalVolume map[string]float64 `json:"total_volume"`
BTCDominance float64 `json:"bitcoin_dominance_percentage"`
ETHDominance float64 `json:"eth_dominance_percentage"`
MarketCapChange24h float64 `json:"market_cap_change_percentage_24h_usd"`
}
func GetGlobalData() (*GlobalData, error) {
resp, err := http.Get(fmt.Sprintf("%s/global", BaseURL))
if err != nil {
return nil, err
}
defer resp.Body.Close()
var result struct {
Data GlobalData `json:"data"`
}
json.NewDecoder(resp.Body).Decode(&result)
return &result.Data, nil
}
CoinGecko vs CoinMarketCap 对比:
| 维度 | CoinGecko | CoinMarketCap |
|---|---|---|
| 免费程度 | 完全免费(无 Key) | 免费层(需 Key,333 次/天) |
| 数据质量 | 高 | 高 |
| 历史数据 | 免费(有限) | 付费 |
| 社交数据 | 有(GitHub、Twitter 关注) | 有 |
| 速率限制 | 30 次/分(免费) | 333 次/天(免费) |
5.2 Token Terminal:协议基本面数据
Token Terminal 提供 DeFi 协议的收入、P/E 比率等基本面数据,免费层可访问主要数据。
访问方式:https://tokenterminal.com/terminal/
核心指标:
| 指标 | 说明 | 量化意义 |
|---|---|---|
| Protocol Revenue | 协议收入(费用) | 判断协议实际使用量 |
| P/E Ratio | 市值/年化收入 | 估值判断(类股票 P/E) |
| TVL | 总锁仓量 | DeFi 协议规模 |
| Active Users | 活跃用户数 | 用户增长趋势 |
六、扩展宏观经济数据源
6.1 Yahoo Finance:免费股指与大宗商品
Yahoo Finance 提供免费的股票、ETF、外汇、大宗商品数据,通过 yfinance Python 库可直接访问。
# pip install yfinance
import yfinance as yf
# 获取黄金价格(GC=F)
gold = yf.download("GC=F", period="1mo", interval="1d")
# 获取标普 500(^GSPC)
sp500 = yf.download("^GSPC", period="3mo", interval="1d")
# 获取美元指数(DX-Y.NYB)
dxy = yf.download("DX-Y.NYB", period="1mo", interval="1d")
# 获取比特币 ETF(IBIT)
ibit = yf.download("IBIT", period="1mo", interval="1d")
Go 接入(通过 Yahoo Finance 非官方 API):
package yahoo
import (
"encoding/json"
"fmt"
"net/http"
)
// 获取股票/ETF/指数数据
func GetQuote(symbol string) (map[string]interface{}, error) {
url := fmt.Sprintf(
"https://query1.finance.yahoo.com/v8/finance/chart/%s?interval=1d&range=1mo",
symbol,
)
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("User-Agent", "Mozilla/5.0")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
return result, nil
}
重要监控标的:
| 标的 | 代码 | 与 BTC 的关系 |
|---|---|---|
| 黄金 | GC=F | 正相关(避险资产) |
| 标普 500 | ^GSPC | 正相关(风险偏好) |
| 纳斯达克 | ^IXIC | 强正相关(科技股) |
| 美元指数 | DX-Y.NYB | 负相关(美元强 = BTC 弱) |
| 10 年期美债 | ^TNX | 负相关(利率高 = 风险资产弱) |
| BTC ETF(IBIT) | IBIT | 直接关联 |
| VIX 恐慌指数 | ^VIX | 负相关(VIX 高 = 市场恐慌) |
6.2 世界银行:全球宏观数据
世界银行提供完全免费的全球宏观经济数据,适合长期宏观分析。
基础 URL:https://api.worldbank.org/v2
import requests
def get_world_bank_data(indicator="NY.GDP.MKTP.CD", country="US", years=5):
"""获取世界银行指标数据"""
url = f"https://api.worldbank.org/v2/country/{country}/indicator/{indicator}"
params = {
"format": "json",
"per_page": years,
"mrv": years # 最近 N 年
}
resp = requests.get(url, params=params)
data = resp.json()[1] # [0] 是元数据,[1] 是数据
return [{"year": d["date"], "value": d["value"]} for d in data if d["value"]]
# 常用指标
# NY.GDP.MKTP.CD = GDP(美元)
# FP.CPI.TOTL.ZG = CPI 通胀率
# SL.UEM.TOTL.ZS = 失业率
七、衍生品数据扩展
7.1 Laevitas:期权与衍生品分析(有限免费)
Laevitas 专注于加密衍生品数据,提供 GEX(Gamma 敞口)、期权流、资金费率聚合等高级数据。
基础 URL:https://api.laevitas.ch
核心数据:
| 数据 | 说明 | 量化意义 |
|---|---|---|
| GEX(Gamma 敞口) | 做市商 Gamma 对冲方向 | 正 GEX = 价格稳定区,负 GEX = 价格波动加剧 |
| 期权流(Option Flow) | 大额期权成交记录 | 机构方向性押注 |
| 资金费率聚合 | 15+ 交易所资金费率 | 市场情绪极值判断 |
| 最大痛点 | 期权到期最大痛点价格 | 到期日价格引力 |
| IV 曲面 | 各行权价/到期日的 IV | 期权定价与市场预期 |
7.2 Coinalyze:未平仓量与清算(有限免费)
Coinalyze 提供多交易所的未平仓量、清算数据聚合,免费层可访问基础数据。
基础 URL:https://api.coinalyze.net/v1
核心端点:
| 端点 | 说明 |
|---|---|
/open-interest |
多所未平仓量聚合 |
/liquidation-history |
历史清算数据 |
/funding-rate |
多所资金费率 |
/long-short-ratio |
多空比 |
八、数据源优先级与接入策略
8.1 按重要性排序
第一优先级(必须接入,完全免费):
| 数据源 | 核心价值 |
|---|---|
| Binance(合约) | 实时 K 线、资金费率 |
| CoinGecko | 市值、排名、全球数据 |
| Alternative.me | 恐惧贪婪指数 |
| FRED | 宏观利率、CPI |
| DeFiLlama | DeFi TVL |
| Reddit(PRAW) | 社区情绪 |
| CryptoPanic | 新闻情绪 |
| Dune Analytics | 链上自定义查询 |
第二优先级(有限免费,建议接入):
| 数据源 | 核心价值 |
|---|---|
| OKX | 期权数据、K 线交叉验证 |
| Bybit | 资金费率三所对比 |
| Deribit | DVOL、期权链 |
| Telegram(Telethon) | 信号频道、巨鲸预警 |
| LunarCrush | 综合社交情绪 |
| Yahoo Finance | 股指、大宗商品关联 |
| Arkham | 巨鲸追踪 |
第三优先级(付费,按需接入):
| 数据源 | 费用 | 核心价值 |
|---|---|---|
| Glassnode | $29-$799/月 | 最权威链上数据 |
| CoinGlass | $29-$99/月 | 衍生品清算数据 |
| Santiment | $49-$999/月 | 社交趋势、开发活跃度 |
| X/Twitter Basic | $100/月 | KOL 情绪 |
8.2 社交媒体免费方案最终推荐
综合稳定性、数据质量、接入难度,推荐以下完全免费的社交媒体数据方案:
X/Twitter → Nitter RSS(监控 10 个核心 KOL)+ twitterapi.io 免费额度
Reddit → PRAW 官方库(r/Bitcoin + r/CryptoCurrency)
Telegram → Telethon(监控 10 个核心公开频道)
情绪汇总 → Alternative.me 恐惧贪婪指数(最稳定、最权威)
新闻情绪 → CryptoPanic 免费层(200+ 新闻源)
九、数据源接入状态监控(扩展版)
系统 /api/v1/datasources 接口将返回所有 28 个数据源的状态:
{
"timestamp": "2026-03-06T10:10:00+08:00",
"summary": {
"total": 28,
"online": 26,
"offline": 1,
"degraded": 1
},
"by_category": {
"cex": {"total": 3, "online": 3},
"derivatives": {"total": 3, "online": 3},
"onchain": {"total": 4, "online": 3},
"defi": {"total": 3, "online": 3},
"market": {"total": 3, "online": 3},
"social": {"total": 5, "online": 4},
"news": {"total": 3, "online": 3},
"macro": {"total": 4, "online": 4}
}
}
参考资料
- [1] Nitter 开源项目:https://github.com/zedeus/nitter
- [2] ntscraper Python 库:https://github.com/bocchilorenzo/ntscraper
- [3] twitterapi.io 免费额度:https://dev.to/sivarampg/scraping-twitter-in-2025-a-developers-guide-to-surviving-the-api-apocalypse-5bbd
- [4] X 官方 API 定价:https://developer.x.com/
- [5] PRAW Reddit API 文档:https://praw.readthedocs.io/
- [6] Telethon Telegram 库:https://docs.telethon.dev/
- [7] LunarCrush API:https://lunarcrush.com/
- [8] Alternative.me 恐惧贪婪 API:https://alternative.me/crypto/api/
- [9] CryptoPanic API:https://cryptopanic.com/developers/api/
- [10] Finnhub API:https://finnhub.io/docs/api
- [11] Dune Analytics API:https://docs.dune.com/api-reference/overview/introduction
- [12] Arkham Intelligence:https://platform.arkhamintelligence.com/
- [13] CoinGecko API:https://www.coingecko.com/api/documentation
- [14] Token Terminal:https://tokenterminal.com/
- [15] Laevitas API:https://docs.laevitas.ch/
- [16] Coinalyze API:https://coinalyze.net/
- [17] Yahoo Finance(yfinance):https://pypi.org/project/yfinance/
- [18] FRED API:https://fred.stlouisfed.org/docs/api/fred/
- [19] 世界银行 API:https://datahelpdesk.worldbank.org/knowledgebase/articles/889392
- [20] 原版数据源指南(12 个):
./数据源接入完整指南.md