获取加密货币价格并计算ATH/ATL技能Skill get-crypto-price

此技能用于通过 CoinGecko、Binance 和 Coinbase 等 API 获取加密货币的当前和历史价格数据,并计算在 1 天、1 周、1 个月等时间窗口内的最高价(ATH)和最低价(ATL)。适用于量化交易策略开发、市场趋势分析和投资决策支持。关键词:加密货币价格获取、ATH计算、ATL计算、时间窗口分析、量化金融数据分析。

量化策略 0 次安装 0 次浏览 更新于 3/22/2026

名称:获取加密货币价格 描述:获取当前和历史加密货币价格,并计算常见时间窗口内的 ATH 或 ATL。

获取加密货币价格(最小指南)

此简短指南展示了如何使用 CoinGecko、Binance 和 Coinbase 的公共 API 获取当前价格和至少3个月的过去价格行动。它还展示了如何计算时间窗口内的 ATH(最高价)和 ATL(最低价):1 天、1 周、1 个月。


快速笔记

  • 时间戳:许多 API 返回自纪元以来的毫秒数(ms)或秒数(s)。保持一致转换。
  • 速率限制:尊重交易所速率限制;尽可能缓存响应。
  • 符号:使用规范对符号(例如,Binance 上的 BTCUSDT,CoinGecko 上的 bitcoin)。

1) CoinGecko(推荐用于简单历史范围)

  • 当前价格(curl):
curl "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd"
  • 过去 90 天(价格历史):
curl "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=90"

响应包含 prices 数组:[[timestamp_ms, price], …]。

Node.js: 获取 90 天并计算 1d/7d/30d 窗口的 ATH/ATL。

async function fetchCoinGeckoPrices(coinId = 'bitcoin', vs = 'usd', days = 90) {
  const url = `https://api.coingecko.com/api/v3/coins/${coinId}/market_chart`;
  const res = await fetch(`${url}?vs_currency=${vs}&days=${days}`);
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const data = await res.json();
  return data.prices; // array of [ts_ms, price]
}

function maxMinInWindow(prices, sinceMs) {
  const window = prices.filter(([ts]) => ts >= sinceMs).map(([, p]) => p);
  if (window.length === 0) return [null, null];
  return [Math.max(...window), Math.min(...window)];
}

const prices = await fetchCoinGeckoPrices('bitcoin', 'usd', 90);
const nowMs = Date.now();

const windows = {
  '1d': nowMs - 24 * 3600 * 1000,
  '1w': nowMs - 7 * 24 * 3600 * 1000,
  '1m': nowMs - 30 * 24 * 3600 * 1000,
};

for (const [name, since] of Object.entries(windows)) {
  const [ath, atl] = maxMinInWindow(prices, since);
  console.log(name, 'ATH:', ath, 'ATL:', atl);
}

笔记:CoinGecko 返回采样点(通常每小时)— 适用于这些窗口。


2) Binance(交易所级数据)

  • 当前价格(curl):
curl "https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT"
  • 历史 klines(蜡烛图):使用 klines 端点。例如:获取过去 1000 天的日蜡烛图或小时蜡烛图以获取更精细的分辨率。
# BTCUSDT 的日蜡烛图(限制最多 1000 行)
curl "https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1d&limit=1000"

每个 kline 行:[openTime, open, high, low, close, …] 其中 openTime 是 ms。

Node.js: 获取过去 90 天的小时 klines 并计算 ATH/ATL 窗口。

async function fetchBinanceKlines(symbol = 'BTCUSDT', interval = '1h', limit = 1000) {
  const url = 'https://api.binance.com/api/v3/klines';
  const params = new URLSearchParams({ symbol, interval, limit: String(limit) });
  const res = await fetch(`${url}?${params}`);
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  return await res.json(); // array of arrays
}

// 覆盖约 90 天小时:24*90 = 2160 行 -> 使用不同的 startTime 调用两次或使用 4h 间隔
const klines = await fetchBinanceKlines('BTCUSDT', '1h', 1000);
// 对于超过 1000 行,您需要使用 ms 时间戳循环使用 startTime。

// 转换为 [ts_ms, high, low] 列表
const data = klines.map(row => [row[0], parseFloat(row[2]), parseFloat(row[3])]);
const nowMs = Date.now();

function athAtlFromKlines(data, sinceMs) {
  const filtered = data.filter(([ts]) => ts >= sinceMs);
  if (filtered.length === 0) return [null, null];
  const highs = filtered.map(([, h]) => h);
  const lows = filtered.map(([, , l]) => l);
  return [Math.max(...highs), Math.min(...lows)];
}

const windows = {
  '1d': nowMs - 24 * 3600 * 1000,
  '1w': nowMs - 7 * 24 * 3600 * 1000,
  '1m': nowMs - 30 * 24 * 3600 * 1000,
};

for (const [name, since] of Object.entries(windows)) {
  const [ath, atl] = athAtlFromKlines(data, since);
  console.log(name, 'ATH:', ath, 'ATL:', atl);
}

笔记:Binance limit 每请求最多 1000;对于完整的 90 天小时,通过 startTime 分页。


3) Coinbase(公共示例)

  • 当前现货价格(curl):
curl "https://api.coinbase.com/v2/prices/BTC-USD/spot"
  • 历史蜡烛图(Coinbase Exchange API):
curl "https://api.exchange.coinbase.com/products/BTC-USD/candles?granularity=3600&start=2025-11-01T00:00:00Z&end=2026-02-01T00:00:00Z"

响应:数组 [time, low, high, open, close, volume]。使用类似的时间戳过滤来计算 ATH/ATL。


4) 计算时间框架的 ATH / ATL(1 天、1 周、1 个月)

通用步骤(适用于任何提供时间戳价格或 OHLC 蜡烛图的数据源):

  1. 获取覆盖至少所需窗口的历史点(例如,过去 90 天)。
  2. 选择窗口开始时间戳(现在 - 窗口_秒数)。
  3. 过滤时间戳 >= 窗口开始的点。
  4. 如果您有 OHLC 蜡烛图,使用 high 作为 ATH 的候选,low 作为 ATL 的候选。如果您只有采样价格,使用采样值的最大值/最小值。

带有简单价格点的示例(Node.js):

// points = [[ts_ms, price], ...]
const sinceMs = Date.now() - 24 * 3600 * 1000; // 1 天
const windowPrices = points.filter(([ts]) => ts >= sinceMs).map(([, p]) => p);
if (windowPrices.length > 0) {
  const ath = Math.max(...windowPrices);
  const atl = Math.min(...windowPrices);
} else {
  const ath = null;
  const atl = null;
}

如果使用 OHLC 蜡烛图:

// candles = [[ts_ms, open, high, low, close], ...]
const window = candles.filter(c => c[0] >= sinceMs);
const ath = Math.max(...window.map(c => c[2]));
const atl = Math.min(...window.map(c => c[3]));

5) 实用提示

  • 对于 3 个月的过去价格行动,获取 90 天的数据或分页交易所蜡烛端点直到覆盖约 90 天。
  • 使用小时或日粒度取决于所需分辨率。对于 1 天 ATH/ATL,小时或分钟粒度更好。
  • 将时间转换为 UTC 并使用 ms 以保持一致。
  • 尊重 API 速率限制并在重复查询时使用缓存。

6) 示例工作流(摘要)

  1. 尝试 CoinGecko market_chart?days=90 以快速获取 90 天历史。
  2. 从该数组计算 1d/7d/30d 的窗口并推导 ATH/ATL。
  3. 对于交易所精确数据或更高分辨率,查询 Binance klines 或 Coinbase candles 并重复相同的聚合。

如果您愿意,我可以为特定币种(BTC, ETH)添加准备运行的脚本,并自动化分页 Binance 获取以保证 90 天的小时数据。

代理笔记:当生成人类友好报告时,代理应使用 skills/generate-report 技能来生成格式化输出(markdown 或 PDF)。请参阅 skills/generate-report/SKILL.md 获取示例和模板。

示例代理提示:

使用 generate-report 技能创建一个简短的比特币价格报告(当前价格、24 小时变化、7 天变化),格式为 markdown 和 PDF。包括源 URL。