用Python轻松获取所有币种的交易数据:一次性说清楚

技术博客1年前 (2023)发布 Dexnav
0

Python轻松获取所有币种的交易数据:一次性说清楚

咨询数据获取:  dexdao

加入区块链一手信息社群:生财有道

在加密货币市场中,了解每个币种的交易数据是投资决策的重要依据。然而,手动抓取和整理这些数据是一项耗时且繁琐的任务。好在有Python,一种功能强大的编程语言,可以轻松地帮助我们一次性获取所有币种的交易数据。下面将介绍如何使用Python获取交易所的全部币种的K线数据。

安装所需库

要获取交易所的全部币种的K线数据,我们需要使用Python的requests和pandas库。如果您还没有安装这些库,请在命令行中输入以下命令来安装它们:

pip install requests pandas

获取交易所的所有币种

首先,我们需要获取交易所的所有币种。可以使用CoinMarketCap API获取交易所的所有币种。在此之前,您需要在CoinMarketCap上注册一个API密钥。然后,我们可以使用以下Python代码来获取交易所的所有币种:

import requests

headers = {
    'Accepts': 'application/json',
    'X-CMC_PRO_API_KEY': 'YOUR_API_KEY',
}

url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'

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

symbols = []
for currency in data['data']:
    symbols.append(currency['symbol'])

以上代码将使用CoinMarketCap API获取最新的加密货币列表,然后遍历每个货币并将其符号添加到symbols列表中。

获取每个币种的交易数据

现在,我们已经获取了所有交易所的币种符号,接下来就是获取每个币种的交易数据。为了实现这一点,我们需要访问交易所的API。例如,如果我们要获取Binance交易所的比特币/美元交易对(BTC/USD)的K线数据,我们可以使用以下API端点:

https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1h

其中,symbol参数指定要获取的交易对,interval参数指定K线的时间间隔。

对于每个币种,我们需要遍历一组时间间隔,并使用Python的pandas库将数据保存到CSV文件中。以下是获取每个币种的交易数据的Python代码:

import pandas as pd
import time

interval_list = ['1m', '5m', '15m', '30m', '1h', '2h', '4h', '6h', '12h', '1d', '1w', '1M']

for symbol in symbols:
    for interval in interval_list:
        url = 'https://api.binance.com/api/v3/klines?symbol=' + symbol + 'USDT&interval=' + interval
        
        response =

一旦你已经成功连接并获得了所有需要的API密钥,下一步就是编写Python脚本来获取交易数据。我们将使用ccxt库来实现这个目的。ccxt是一个开源的加密货币交易库,支持超过100个加密货币交易平台和数百个市场。

首先,我们需要安装ccxt库。可以使用以下命令在终端中安装:

!pip install ccxt

接下来,我们需要导入ccxt库和所需的其他库:

import ccxt
import pandas as pd
import time

我们需要定义一个函数,该函数将从交易所获取数据并返回Pandas数据框架。以下是该函数的代码

def get_exchange_data(exchange_id, symbol, timeframe, limit):
    exchange = getattr(ccxt, exchange_id)()
    data = exchange.fetch_ohlcv(symbol, timeframe, limit=limit)
    header = ['timestamp', 'open', 'high', 'low', 'close', 'volume']
    df = pd.DataFrame(data, columns=header)
    df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
    df.set_index('timestamp', inplace=True)
    return df

这个函数需要四个参数:交易所ID,交易对符号,时间帧和限制。它使用ccxt库中的fetch_ohlcv()函数来获取交易数据,并使用Pandas数据框架将数据存储在一个数据框架中。函数返回这个数据框架。

现在,我们需要定义一个函数,该函数将使用我们的API密钥获取数据,并将数据存储在一个Pandas数据框架中。以下是该函数的代码:

def get_all_exchange_data(exchanges, symbols, timeframe, limit):
    df_list = []
    for exchange in exchanges:
        for symbol in symbols:
            print(f'Fetching {symbol} data from {exchange} exchange...')
            try:
                df = get_exchange_data(exchange, symbol, timeframe, limit)
                df['symbol'] = symbol
                df['exchange'] = exchange
                df_list.append(df)
            except:
                print(f'Error fetching {symbol} data from {exchange} exchange.')
                continue
            time.sleep(2)
    return pd.concat(df_list, axis=0)

这个函数需要四个参数:交易所列表,交易对符号列表,时间帧和限制。函数使用get_exchange_data()函数从交易所获取数据,将数据存储在一个Pandas数据框架中,并将数据框架附加到df_list列表中。函数返回一个包含所有数据的数据框架。

现在,我们可以调用get_all_exchange_data()函数来获取我们需要的所有数据。以下是代码示例:

exchanges = ['binance', 'bitfinex', 'bittrex', 'coinbase', 'kraken']
symbols = ['BTC/USDT', 'ETH/USDT', 'XRP/USDT']
timeframe = '1d'
limit = 1000

df = get_all_exchange_data(exchanges, symbols, timeframe, limit)

这将获取来自5个交易所的3种交易对的1天。

将数据存储到本地

完成数据抓取后,我们可以将数据保存到本地文件,以备后续使用。这里我们可以使用Python中的pandas库,将抓取到的数据转换成DataFrame格式,并存储到csv文件中。

以下是将数据存储到本地的代码:

import pandas as pd

for symbol in symbols:
    url = f'https://api.binance.com/api/v3/klines?symbol={symbol}&interval={interval}&limit={limit}'
    response = requests.get(url)
    klines = response.json()
    df = pd.DataFrame(klines, columns=['Open time', 'Open', 'High', 'Low', 'Close', 'Volume', 'Close time', 'Quote asset volume', 'Number of trades', 'Taker buy base asset volume', 'Taker buy quote asset volume', 'Ignore'])
    df.to_csv(f'{symbol}.csv', index=False)

该代码将为每个交易对生成一个csv文件,文件名为交易对名称。文件包含所有历史K线数据,以便后续使用。

数据清理和预处理

由于交易所返回的数据经常包含缺失值和噪声数据,我们需要进行数据清理和预处理,以便后续分析使用。在这个例子中,我们将执行以下操作:

  1. 删除不必要的数据列
  2. 将Open time转换为datetime类型,并将其设置为索引
  3. 将其他列转换为浮点数类型

以下是数据清理和预处理的代码:

import pandas as pd

def clean_data(df):
    df.drop(['Close time', 'Quote asset volume', 'Number of trades', 'Taker buy base asset volume', 'Taker buy quote asset volume', 'Ignore'], axis=1, inplace=True)
    df['Open time'] = pd.to_datetime(df['Open time'], unit='ms')
    df.set_index('Open time', inplace=True)
    df = df.apply(pd.to_numeric)
    return df

for symbol in symbols:
    df = pd.read_csv(f'{symbol}.csv')
    df = clean_data(df)
    df.to_csv(f'{symbol}.csv')

该代码将删除不必要的列,并将Open time列转换为datetime类型并设置为索引。然后,将其他列转换为浮点数类型,并将清理后的数据重新写入原始csv文件中。

通过使用Python和Binance API,我们可以轻松地抓取所有币种的历史K线数据,并将数据存储到本地文件中。这些数据可以用于后续的分析和研究,例如技术分析和量化交易。

解析和可视化数据

很好,我们已经成功地获得了所有币种的K线数据并将其存储在本地文件中。接下来,我们需要编写代码来解析和可视化这些数据。

解析数据

首先,我们需要将K线数据解析为易于处理的格式。我们将使用pandas库来处理数据。在解析之前,我们需要先导入pandas和numpy库:

import pandas as pd
import numpy as np

我们将使用pandas的read_csv函数来读取刚才下载的csv文件,并将其解析为pandas的DataFrame对象。我们还需要将日期列转换为pandas的DateTime格式。代码如下:

# 读取csv文件
df = pd.read_csv('all_coins_klines.csv')

# 将日期列转换为DateTime格式
df['datetime'] = pd.to_datetime(df['datetime'], unit='ms')

现在我们已经成功地将K线数据解析为DataFrame对象,并将日期列转换为DateTime格式。

可视化数据

下一步是将数据可视化。我们将使用matplotlib库来绘制K线图。在绘制K线图之前,我们需要先将数据按照币种进行分组。我们可以使用pandas的groupby函数来实现这一点。

# 按照币种进行分组
groups = df.groupby('symbol')

接下来,我们将使用for循环来遍历每个币种的数据,并绘制K线图。代码如下:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from mpl_finance import candlestick_ohlc

# 设置图形大小
fig = plt.figure(figsize=(20, 10))

# 遍历每个币种的数据
for symbol, group in groups:
    # 将数据转换为ohlc格式
    ohlc = group[['datetime', 'open', 'high', 'low', 'close']].copy()
    ohlc['datetime'] = ohlc['datetime'].apply(mdates.date2num)
    ohlc = ohlc.astype(float).values.tolist()

    # 绘制K线图
    ax = fig.add_subplot(111)
    ax.set_title(symbol)
    candlestick_ohlc(ax, ohlc, width=0.6, colorup='green', colordown='red')

    # 设置x轴刻度格式
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
    ax.xaxis.set_major_locator(mdates.DayLocator())

    # 设置y轴刻度范围
    ax.set_ylim([group['low'].min()*0.95, group['high'].max()*1.05])

    # 显示图例和网格线
    ax.legend()
    ax.grid()

# 显示图形
plt.show()

在上面的代码中,我们首先将数据转换为ohlc格式,并将日期转换为matplotlib的日期格式。然后,我们使用candlestick_ohlc函数绘制K线图,并设置x轴和y轴的刻度范围和格式。最后,我们显示图例和网格线,并显示图形。

至此,我们已经成功地使用Python一次性抓取了交易所所有币种的K线数据,并将其可视化为K线图。

咨询数据获取:  dexdao

加入区块链一手信息社群:生财有道

© 版权声明

相关文章

暂无评论

暂无评论...