% I3 {1 J* S% U" D* l7 S1 l9 w获取数字货币的历史行情数据可以通过一些专门的数字货币数据API或者第三方数据服务来实现。以下是一些获取数字货币历史行情数据的方法:
% P9 n- O. G, e; P. p3 A% _1 CoinGecko API" a8 t1 a" g) P( _- c
CoinGecko是一个数字货币市场数据服务提供商,提供历史和实时的数字货币数据。它的API可以通过HTTP请求方式获取数字货币的历史行情数据。例如,以下代码可以获取比特币在2022年1月的价格数据:
0 _ |3 }& f( O* y; Gimport requests" L+ y. m" q7 P: l! N& ^- q# {
; P" G) v+ ?8 T/ R; J' T4 K
url = 'https://api.coingecko.com/api/v3/coins/bitcoin/history'4 d+ {2 w! Q9 Z! b, e% i8 B
params = {'date': '01-01-2022', 'localization': 'false'}
$ [% j$ j+ o) u3 d- s4 I! Z+ ~response = requests.get(url, params=params)
4 m* P5 ~. f4 ]) ^$ m. } E6 Q5 W+ F% p! ^" H; Q" \% j
data = response.json()- Y# _+ ~9 b/ Z5 F5 |5 `
print(data)在这个示例中,我们使用requests库发送HTTP请求并获取CoinGecko API的响应。我们在API请求URL中设置了正确的参数,即货币对和时间间隔。我们使用params参数将API请求URL和参数传递给get()方法,并使用response.json()将响应转换为Python对象。我们使用Python中的for循环遍历数据,并使用列表索引访问价格数据和时间戳。然后,我们将时间戳转换为datetime对象,并打印时间戳和价格数据。 # m' Z" B" z! S$ f
import requests
: }. J/ g2 ^# E9 l1 I5 aimport datetime1 H, r; M8 M7 d
+ N% E R) a( k8 E* `( J7 {6 Y* hurl = "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart/range"5 E4 N8 v( ?- j" s) z9 R
params = {& i; m; F7 C, f0 [ @& s
"vs_currency": "usd",' q+ p* D6 D( \+ A7 k
"from": "1392577232",
1 e5 l. j8 ?; Y) j, U' k "to": "1617288232"3 m3 E8 \$ r4 K- z/ ]& Y: U% ]) ^
}
3 U* E1 n0 a7 ?
) i7 h* }- B8 F: V7 ]! @. e, G# Bresponse = requests.get(url, params=params)6 c( s6 R) I' Z# E" z
data = response.json()$ m) d3 y$ [4 ]
2 K, t! E, }3 Eprices = data["prices"]
9 A$ f+ R$ Q4 v( sfor price in prices:; E1 c& Y' H k! Z) d2 |% m! N9 p6 b
timestamp = datetime.datetime.fromtimestamp(price[0]/1000.0)1 H0 P) [3 [8 x8 h; w5 B. N6 ]
price = price[1]& h% Z6 B# F8 E# Y: u" g! G
print(timestamp, price)2 C& U9 a$ y% e% A% n5 x
2 CryptoCompare API3 D2 P- u) N* x$ K1 I+ E9 i
CryptoCompare是另一个数字货币市场数据服务提供商,也提供历史和实时的数字货币数据。它的API可以通过HTTP请求方式获取数字货币的历史行情数据。例如,以下代码可以获取比特币在2022年1月的价格数据:1 C+ b; R7 e( y+ ]0 Z" H& I
import requests; p8 z# V7 j1 W! R& S. j( B# }
- p1 _0 {! g4 v# s
url = 'https://min-api.cryptocompare.com/data/v2/histoday'
W9 y& S6 l6 r7 \1 ^/ M Aparams = {'fsym': 'BTC', 'tsym': 'USD', 'limit': '31', 'toTs': '1641024000'}
. L R' G; Q6 N6 C8 [response = requests.get(url, params=params)
0 B# Q! V* m1 Y' s! y. ^, y/ Z" Y
4 B9 p9 V! X" edata = response.json()7 A" I1 Y, W8 d( I
print(data)3 Alpha Vantage& P, S, h4 z6 T' i& r
除了API外,还可以通过一些第三方数据服务提供商来获取数字货币的历史行情数据。例如,Alpha Vantage提供了一些免费的数字货币历史行情数据,可以通过HTTP请求方式获取。以下代码可以获取比特币在2022年1月的价格数据:1 K1 f' R; Q* v" j% n- I
import requests6 [1 t# i# m$ a( l, [$ Q
1 {# E8 q% N& T! R+ D5 B* Q9 J
url = 'https://www.alphavantage.co/query'3 V# X) U8 h4 F7 m: c1 ]
params = {'function': 'DIGITAL_CURRENCY_DAILY', 'symbol': 'BTC', 'market': 'USD', 'apikey': 'your_api_key'}
. z' d1 \7 ?% a2 i* E/ H3 x/ U6 Eresponse = requests.get(url, params=params)% Y% U" b1 d# u2 }: _
~5 c& z4 k9 }) J& q9 S, u2 A" ldata = response.json()( K1 i7 P4 Q, t
print(data)注意:以上示例中的API和服务可能需要注册并获取API Key或者令牌,具体使用方式需要查看对应的API文档。此外,获取历史行情数据的请求需要提供对应的数字货币代码、市场类型、日期范围等参数,具体参数需要根据API文档来设置。
3 k$ u1 ?6 ]8 o# d& d7 j4 CoinCap API 2 U6 v* e* M+ c0 _' J% f" ]) [
CoinCap API是一个提供加密货币市场数据的API,可以获取多个加密货币的历史价格、实时价格、市值、交易量等信息。CoinCap API提供了RESTful API和WebSocket API两种访问方式。 3 |: q% u; |; k7 H% u: t. l0 r8 @( \
CoinCap API提供了免费和付费两种访问方式。免费访问方式有一些限制,例如每分钟最多只能发出10个请求,每个请求最多返回2000个数据点等。如果需要更多数据和更高的访问速度,可以考虑使用付费访问方式。
; C4 n; X. X6 e9 S. F
# j, A! I* J( D. I" D c% v- 导入必要的库和模块。( H) M! \2 ^/ N
- 设置API请求参数,包括URL和请求参数。API的文档应该包含有关可用参数和其值的信息。在这个例子中,我们使用CoinCap API和CoinGecko API来获取比特币历史价格数据。我们在API请求URL中设置了正确的参数,即时间间隔、开始时间和结束时间。, ~+ S% F" [/ ]9 S! K, _* E
- 发送API请求。使用Python中的requests库可以轻松发送HTTP请求并获取响应。发送请求的方式通常是调用requests库中的get()方法并将API请求URL和参数作为参数传递。对于一些需要认证的API,还需要将API密钥作为参数传递。
6 i& f" j, s9 I+ b" k E - 解析JSON响应。 API响应通常以JSON格式返回,因此需要使用json模块将响应转换为Python对象。使用Python中的json.loads()函数可以将JSON字符串转换为Python字典。
4 G q4 B$ e" k q6 n/ W! X I0 } - 提取所需的数据。解析JSON响应后,我们可以从Python字典中提取所需的数据。提取数据的方法因API而异,通常需要检查API文档以查看可用的数据字段和其格式。, B& b1 a3 }6 i7 ]* i6 p( n
- 处理和可视化数据。一旦提取了所需的数据,我们可以使用Python中的其他库和模块进行进一步处理和可视化,例如使用Matplotlib库绘制图表或使用Pandas库进行数据分析。9 f9 r# l4 `8 D- W5 W
在这个示例中,我们使用requests库发送HTTP请求并获取CoinCap API的响应。我们使用params参数将API请求URL和参数传递给get()方法,并使用response.json()将响应转换为Python对象。我们使用Python中的for循环遍历数据,并使用字典键访问价格数据和时间戳。然后,我们将时间戳转换为datetime对象,并打印时间戳和价格数据。' g7 t' o* ^9 O( r" r; |% z, }
import requests9 ]1 }0 X; q# \
) c& \% v$ n9 _
# 设置API请求参数
6 s- X; Q' W' X8 N2 aurl = "https://api.coincap.io/v2/assets/bitcoin/history"
: j5 }+ v0 C! n. C7 Pparams = {
4 r( z3 j+ {: ~- Y1 s( r7 ] "interval": "d1",
: E: E/ @- y4 w9 i% W "start": "1483228800000", # 2017-01-01 的时间戳! p2 b& C2 K$ u. y) x3 Z6 }
"end": "1649193600000" # 2022-04-05 的时间戳' G4 ] ]6 g. g8 Y3 h" w! z
}$ \/ X& ^, }$ ?5 A% b1 V
# c$ ]" U3 }+ t# 发送API请求5 {& h0 _- Y6 S% I
response = requests.get(url, params=params)
$ H; D8 K& y# A8 A/ [. w: A+ P U. ]" P: ^ Q# g
# 解析JSON响应
3 g* C/ ^: H3 C: X& p Q0 \data = response.json()( } v8 y6 y' L. s+ a0 u
% y9 y& i3 J/ w C+ e
# 提取价格数据
9 I/ Y r7 j. v+ jprices = data["data"]
- s$ J1 ]8 Q7 M# q2 jfor price in prices:
+ y6 g" @4 O) }: [' H/ c% y5 _; I time = price["time"] # 时间戳$ O) K" Q _- M' K
price_usd = price["priceUsd"] # 价格(美元)
, W; ~" E2 `6 k1 m7 n) s print(f"{time}: {price_usd}")
5 ]$ M) L7 {- ?6 I+ t5 直接调用交易所API
. A! i, q y4 P 此处我们调用的是某安的rest API,获取btc的K线数据,并对数据框做一些基本处理后,用K线图形的形式将其可视化出来。 0 ]% ]9 a& P% @ y% _0 H! O4 {
import requests1 [8 Y0 K8 ]" \) B9 C# J: Z) l5 V
import pandas as pd
9 F) \% `9 @+ u1 kimport mplfinance as mpf8 Z( f; i! V' q3 P& O" \8 _0 h
8 L' _# N9 }0 c
# 获取比特币K线数据
' B( W* q/ w6 l; M* A4 f$ durl = 'https://api.binance.com/api/v3/klines'
. B, `& s; Q `1 Y- |/ J9 ]params = {
5 v- U- m& c. d6 J7 ~ 'symbol': 'BTCUSDT',
( D9 Q9 f, v; d 'interval': '1d',; Z0 H. r% P C( M. f* o( u
'limit': 1000
# z: A' v* Z/ t7 \}; a& i7 O" s; G
res = requests.get(url, params=params)
/ V2 D; H' Y% v6 {3 c8 cdata = res.json()
- u6 A1 v& C1 @% G! y; a, Idf = pd.DataFrame(data, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume', 'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore'])
7 m2 h% R0 h1 sdf['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')2 U! I# i2 Q6 q! l+ a$ ]4 z( T
df.set_index('timestamp', inplace=True)
6 J# [" c, L- [9 v; b; ~
; Q+ @) \2 H: q# j- e, udf = df.apply(pd.to_numeric, errors='ignore')
/ b' \8 p, c. @0 j5 T T; V3 R1 q
# 画K线图/ @( b! D( q" K( X/ C7 R( j t- \
mpf.plot(df, type='candle', volume=True, style='binance')
! B; N1 R& X V$ S# W' C$ d: w7 K 程序运行后的K线图可视化结果
' N5 g& y" A/ m Q7 E& W. h2 z Q6 c( i- E. W4 N1 {6 P) x
! s8 i; L1 ]* r `' E( U
以上是用5种不同方式调用API获取数字货币公开数据的方法及详细源码,你Get到了吗? |