用Python探寻加密货币行情数据:从入门到实战

admin 2025年4月10日17:18:01评论3 views字数 5164阅读17分12秒阅读模式

用Python探寻加密货币行情数据:从入门到实战

最近加密货币市场可太热闹了,身边不少朋友都在讨论要不要入场“捞一笔”。大家都知道,要是真打算参与进去,获取准确又及时的市场数据可是关键的第一步。这加密货币市场和咱们熟悉的传统金融市场区别还挺大,就说交易所吧,有去中心化交易所(DEX)和中心化交易所(CEX)这两大类。不过一般咱们普通人接触最多的还是中心化交易所。想获取市场数据的话,和传统金融市场类似,也能找专业的数据提供商,可人家基本都是要收费的。今天我就跟大家分享一下,怎么借助Python编程语言,从中心化交易所获取加密货币的行情数据,不管是历史数据还是实时数据,都能搞定,甚至还能通过websocket直接监控数据,用来实时关注不同交易对之间的价差呢。

用Python探寻加密货币行情数据:从入门到实战

我自己刚接触加密货币市场的时候,也被各种数据获取的问题搞得焦头烂额。当时就想着要是能有个简单又通用的办法就好了。后来发现了ccxt这个Python库,真的帮了大忙,所以今天就用它来给大家演示。

ccxt,全称是CryptoCurrency eXchange Trading,它可是个相当厉害的开源库。借助它,咱们能用统一的代码访问全球上百家数字货币交易所,就好像有了一把万能钥匙,能轻松打开各个交易所的数据大门。而且它支持好多编程语言,像Javascript、Python和PHP都可以用。这ccxt的功能可不止获取数据这么简单,还能支持直接下单、管理订单、查看仓位和账户信息,有了它,实现自动化交易都不是梦。

要是你也想使用ccxt来获取数据,第一步就是得把它安装到你的电脑上。这一步其实挺简单的,打开终端,输入“pip install ccxt”,然后耐心等一会儿,系统就会自动帮你把ccxt库安装好啦。

安装好之后,接下来就得初始化交易所对象。我以币安交易所为例,代码是这样写的:

import ccxt
exchange = ccxt.binance({
'enableRateLimit'True,  # 必须开启!防止被交易所封IP
'timeout'15000# 超时设为15秒
})

这里的enableRateLimit参数一定要设置为True,因为交易所的API都有严格的调用频率限制,如果不开启这个频率限制功能,很容易因为调用太频繁被交易所封IP,到时候可就没办法获取数据了。要是你在使用过程中遇到网络问题,也别着急,可以通过设置proxies参数来切换网络环境。比如这样:

exchange = ccxt.okx({
"proxies": {
"http""http://127.0.0.1:7890",
"https""http://127.0.0.1:7890"
    }
})

成功初始化交易所对象后,咱们可以获取交易所上的所有交易品种。这一步很重要,要是不先获取这些信息,后面进行其他操作的时候,可能会因为找不到对应的品种而报错。代码是这样的:

markets = exchange.load_markets()
print(list(markets.keys)[:10])

运行这段代码后,会输出类似这样的结果:

['ETH/BTC''LTC/BTC''BNB/BTC''NEO/BTC''QTUM/ETH''EOS/ETH''SNT/ETH''BNT/ETH''BCC/BTC''GAS/BTC']

这些就是交易所里部分交易对的信息啦。

获取实时价格是了解市场动态最直接的方式。在ccxt里,获取某个品种当前价格主要靠fetch_ticker函数接口。我给大家举个例子,看看怎么读取BTC/USDT交易对的最新价:

ticker = exchange.fetch_ticker('BTC/USDT')
print(f"""
实时价格:
- 最新价:{ticker['last']} USDT
- 24小时最高:{ticker['high']}
- 24小时成交量:{ticker['quoteVolume']} USDT
"""
)

运行之后,得到的输出可能是这样:

实时价格:
- 最新价:97004.87 USDT
- 24小时最高:97640.02
- 24小时成交量:1743212485.2952676 USDT

这里返回的ticker包含了很多有用的信息,它的结构体大家可以查看官方文档Ticker Structure了解,里面详细说明了每个字段的含义。简单来说,fetch_ticker返回的就是某个交易对当前最新的市场数据。

历史行情数据对于分析市场趋势、制定交易策略也非常有帮助。比如说,我们可以用这些数据来计算一些技术指标,识别市场模式,进而产生交易信号。下面这段代码可以获取BTC/USDT的日线数据:

# 获取最近3天的日线数据
ohlcvs = exchange.fetch_ohlcv(
    symbol='BTC/USDT',
    timeframe='1d',  # 可选:1m, 5m, 1h, 1d等
    limit=5# 获取条数
)
print(ohlcvs)

这里设置的参数是获取BTC/USDT的历史行情,时间周期为1天,数量是5条。运行后输出的结果大概是这样:

[[1739138760000, 94897.63, 95052.0, 94884.44, 95047.09, 17.96677],
[1739138820000, 95047.1, 95128.75, 95047.1, 95118.36, 12.27411],
[1739138880000, 95118.36, 95135.99, 95051.65, 95122.51, 10.40116],
[1739138940000, 95122.52, 95178.69, 95104.42, 95178.57, 7.81859],
[1739139000000, 95178.57, 95246.13, 95160.0, 95246.13, 48.00226]]

这里面每个小列表代表一天的数据,从左到右依次是时间戳、开盘价、最高价、最低价、收盘价和交易量。要是觉得这样的数据不太直观,还可以把它转换成更易读的pandas格式,代码如下:

import pandas as pd
data = pd.DataFrame(ohlcvs, columns=["timestamp_ms""open""high""low""close""volume"])
print(data)

转换后的输出就清晰多啦:

   timestamp_ms      open      high       low     close    volume
0  1739139000000  95178.57  95246.13  95160.00  95246.13  48.00226
1  1739139060000  95246.12  95436.12  95230.02  95429.63  24.59766
2  1739139120000  95429.64  95429.64  95282.44  95371.00  44.81550
3  1739139180000  95371.00  95443.28  95371.00  95433.12  12.77712
4  1739139240000  95433.12  95527.79  95433.12  95436.70  15.98278

要是你想设计一个高频交易策略,那分钟级别的数据可能更有用。很多交易所都支持获取分钟级别数据,甚至有些还能拿到全量的分钟数据。还是以获取BTC/USDT的1分钟数据为例,只需要修改fetch_ohlcvtimeframe参数就行啦,示例代码如下:

# 获取最近20根15分钟K线
ohlcvs = exchange.fetch_ohlcv('BTC/USDT''1m', limit=20)

除了基本的行情数据,订单簿(市场深度)数据对于了解市场的供需情况也很重要。通过ccxt获取订单簿数据也不难,调用fetch_order_book函数就行。给大家看个简单示例:

order_book = exchange.fetch_order_book('BTC/USDT', limit=100)
best_bid = order_book['bids'][0][0]  # 买一价
best_ask = order_book['asks'][0][0]  # 卖一价
print(f"买一价:{best_bid}, 卖一价:{best_ask}, 价差:{best_ask - best_bid}")

运行后会得到类似这样的结果:

买一价:97141.35, 卖一价:97141.36, 价差:0.00999999999476131

这里的fetch_order_book函数可以指定获取深度,像binance的接口默认是100,最多能获取到5000的订单簿深度。不同的深度数据可以满足不同的分析需求,深度越大,反映的市场情况就越详细。

前面介绍的几种获取数据的方式,都是主动发起请求。但在一些对实时性要求特别高的场景下,这种方式就不太合适了。因为轮询不仅延迟大,容易错过一些交易机会,还可能因为频繁请求触发交易所的频率限制。不过别担心,ccxt有个pro版本ccxt.pro,它可以通过WebSocket实现实时监听。我们只需要对前面的接口稍微修改一下,就能达到实时监听的效果。代码如下:

import asyncio
import ccxt.pro as ccxtpro

exchange = ccxtpro.binance({
'enableRateLimit'True,  # 必须开启!防止被交易所封IP
'timeout'15000,  # 超时设为15秒
})


asyncdefwatch_order_book():
whileTrue:
        order_book = await exchange.watch_order_book('BTC/USDT')
        best_ask = order_book["asks"][0][0]
        best_bid = order_book["bids"][0][0]
        print(f"order_book, 价差:{best_ask - best_bid}")


asyncdefwatch_ticker():
whileTrue:
        ticker = await exchange.watch_ticker('BTC/USDT')
        print(f"ticker, 最新价: {ticker['last']}")


asyncdefmain():
await asyncio.gather(watch_order_book(), watch_ticker())


if __name__ == "__main__":
    asyncio.run(main())

运行这段代码后,就可以实时监控数据,不断输出新的结果啦,类似这样:

order_book, 价差:0.00999999999476131
order_book, 价差:0.00999999999476131
order_book, 价差:0.00999999999476131
order_book, 价差:0.00999999999476131
order_book, 价差:0.00999999999476131
order_book, 价差:0.00999999999476131
order_book, 价差:0.00999999999476131
order_book, 价差:0.00999999999476131
ticker, 最新价: 97228.01
...

到这里,我们已经学会了如何利用ccxt获取加密货币的各种行情数据。学会这些之后,我们还可以做很多有意思的事情。比如说,实时监控不同交易对或交易所之间的价差,寻找套利机会;还能用ccxt的create_order方法实现自动交易。不过要提醒大家,加密货币市场波动非常大,交易风险也很高,在实际操作的时候一定要谨慎再谨慎。

在实际使用过程中,也可能会遇到一些特殊情况。比如说,不同交易所对于同一加密货币的交易对表示方式可能不太一样,这就需要我们在获取数据和分析数据的时候格外注意。还有,有时候网络不稳定或者交易所API出现故障,也会影响数据的获取。遇到这些问题不要慌,可以多查阅相关文档,或者在技术交流论坛上和其他开发者交流经验。

希望今天分享的内容能对大家有所帮助。要是你在学习和实践过程中有什么问题或者心得,欢迎在评论区留言讨论。要是还想获取更详细的代码示例,在公众号发送相关关键词就能拿到哦。加密货币市场充满了机遇和挑战,希望大家都能利用好这些技术,在这个市场里有所收获,但一定要牢记风险,理性投资。

END

用Python探寻加密货币行情数据:从入门到实战

原文始发于微信公众号(网络侦查研究院):用Python探寻加密货币行情数据:从入门到实战

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月10日17:18:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   用Python探寻加密货币行情数据:从入门到实战https://cn-sec.com/archives/3940486.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息