朴素的Python Binance API介绍
Python-binance是一个应用编程接口,允许你通过Python编程语言连接到Binance服务器。需要注意的是,Python-binance库与Binance没有任何关系。
本教程将告诉你如何使用python-binance API和Pandas库从Binance提取和分析实时证券和加密货币数据。
前提条件
要想跟上,读者需要熟悉以下内容。
- Python编程语言。
- [Binance]加密货币交易所。
- [Pandas]和[Matplotlib]库。
Python-Binance API
就每日交易量而言,Binance是目前世界上最大的加密货币交易所。它是由赵长鹏在2017年创立的,其总部位于开曼群岛。它允许你轻松购买、出售、交易和交换加密货币。
Python-binance是一个应用程序编程接口,允许你通过Python编程语言连接到Binance服务器。通过该API,您可以下单、交易、提款并从Binance交易所获得实时数据。
设置Binance的API
我们首先需要通过在Binance上注册账户来设置一个API密钥。这一步涉及到前往Binance网站,如果您还没有他们的账户,请注册。注册很简单,就像你为任何网络应用注册一样。成功注册并完成验证过程后,将鼠标移至个人资料按钮,选择API Management
,如下图所示。
API管理是允许你设置你的API密钥的选项。一旦打开,你需要标记你想要创建的API,然后点击Create API
按钮。在我们的案例中,我们创建了一个标签,BinanceIntroAPI
。在按下Create API
按钮后,你将被提示迅速进行安全验证。一旦完成,你的API密钥将被成功创建。你将得到一个API key
和一个secret key
。
我们需要使我们的账户安全。你会在右上角看到一个名为Edit restrictions
的按钮。一旦进入,取消勾选Enable Spot & Margin Trading
选项,勾选Restrict access to trusted IPs only (Recommended)
选项。输入你的IP地址,然后点击保存。如果你不知道你的IP地址,你可以在谷歌上快速搜索一下my ip address
。这将取消交易权限,只限制对有你的IP地址的计算机的访问。
复制这个API密钥并将其粘贴在你的笔记本上,如下图所示。
apikey = 'ENTERYOURAPIKEY'
apisecret = 'ENTERYOURSECRETKEY'
我们已经将我们的API和密匙存储在apikey
和apisecret
变量中。
安装和导入依赖项
在接下来的步骤中,我们将继续安装和导入必要的依赖项。
!pip install python-binance pandas mplfinance
我们已经安装了三个依赖项。
python-binance
允许我们连接到Binance的API。pandas
库将使我们能够转换加密货币数据。mplfinance
将使我们能够轻松地将金融数据可视化。
现在让我们把它们导入我们的笔记本中。
from binance import Client, ThreadedWebsocketManager, ThreadedDepthCacheManager
import pandas as pd
执行认证
使用我们先前导入的Client
类,我们导入两个变量:apikey
,和apisecret
keys,以执行认证。然后,我们将这个结果存储在一个叫做client
的变量中。
client = Client(apikey, apisecret)
使用Python-Binance从binance提取数据
这一步涉及使用Python-Binance库从API中检索数据。
获取股票数据
tickers = client.get_all_tickers()
tickers
函数,get_all_tickers()
,允许我们去抓取所有的股票价值。还有很多其他函数可用于管理您的账户和进行交易。
输出。
{'price': '5.47400000', 'symbol': 'ANTUSDT'},
{'price': '0.00687000', 'symbol': 'CRVBNB'},
{'price': '0.00006287', 'symbol': 'CRVBTC'},
{'price': '4.12300000', 'symbol': 'CRVBUSD'},
{'price': '4.12100000', 'symbol': 'CRVUSDT'},
{'price': '0.00442100', 'symbol': 'SANDBNB'},
{'price': '0.00004385', 'symbol': 'SANDBTC'},
{'price': '2.87380000', 'symbol': 'SANDUSDT'},
{'price': '2.87510000', 'symbol': 'SANDBUSD'},
{'price': '0.00144600', 'symbol': 'OCEANBNB'},
...
使用Binance数据执行EDA
我们将使用Pandas库对Binance数据进行一些探索性数据分析。
ticker_dataframe = pd.DataFrame(tickers)
ticker_dataframe.head()
我们从运行上述代码中得到的输出如下。
symbol price
0 ETHBTC 0.07133100
1 LTCBTC 0.00417000
2 BNBBTC 0.00992500
3 NEOBTC 0.00074700
4 QTUMETH 0.00368000
正如我们所看到的,Pandas库使我们很容易处理数据,因为它将数据组织成数据框架。
获取深度数据
depth = client.get_order_book(symbol='ETHUSDT')
depth
get_order_book()
函数允许我们从Binance检索市场深度数据。你可以改变你想检索数据的加密货币对。例如,你可以尝试用BTCUSDT
或BNBBTC
,而不是ETHUSDT
对。
输出。
['4667.44000000', '0.01470000'],
['4667.43000000', '1.36750000'],
['4667.42000000', '0.69830000'],
['4667.41000000', '0.08100000'],
['4667.40000000', '0.00990000'],
['4667.39000000', '0.02000000'],
['4667.38000000', '0.70130000']],
'lastUpdateId': 12445843339}
让我们用Pandas将这些数据可视化。
depth_dataframe = pd.DataFrame(depth['asks'])
depth_dataframe.columns = ['Price', 'Volume']
depth_dataframe.head()
输出。
Price Volume
0 4671.90000000 7.19000000
1 4671.99000000 0.10000000
2 4672.00000000 0.30000000
3 4672.14000000 0.10700000
4 4672.15000000 0.10700000
获取历史数据
接下来的步骤涉及到获取一些历史数据并对其进行预处理。这个过程是必不可少的,因为这些数据并不适合进行计算。但是,首先,让我们看一下当前的数据类型。
depth_dataframe.dtypes
Price object
Volume object
dtype: object
正如我们所看到的,数据是以对象形式存储的。我们需要将这些数据转换为数值,以便对其进行计算。
historical_data = client.get_historical_klines('BTCUSDT', Client.KLINE_INTERVAL_1DAY, '5 July 2020')
get_historical_klines()
函数允许你从Binance检索现货和期货数据。它需要三个参数:name of symbol pair
、interval
、date
。该函数返回上限为1000行的数据。
至于间隔时间,有很多选项可以玩,即KLINE_INTERVAL_1MINUTE、KLINE_INTERVAL_15MINUTE、KLINE_INTERVAL_1MONTH、KLINE_INTERVAL_1WEEK,等等。
如果你想建立一个交易机器人,一定要从很久之前的日期抓取历史数据,以建立一个更好的模型。
如果我们看一下这个historical_data
,这就是它的内容。
historical_data
...
[1636675200000,
'64774.25000000',
'65450.70000000',
'62278.00000000',
'64122.23000000',
'44490.10816000',
1636761599999,
'2844286547.50404090',
1479149,
'21028.45541000',
'1344883879.13873450',
'0'],
...
这些值存储在一个字典里面,每个交易的前12个值代表。
- 开盘时间
- 开盘
- 高点
- 低点
- 收盘
- 成交量
- 收盘时间
- 报价 资产交易量
- 交易次数
- 收盘人买入基础资产量
- 买方买入报价资产量
- 忽略
与其让数据保持原样,我们不如把这些数据放到Pandas数据框中。
hist_df = pd.DataFrame(historical_data)
当我们运行hist_df.tail()
,这就是它的内容。
与其让数字作为我们的列名,我们可以使用Pandas的column
属性来重命名这些列。
hist_df.columns = ['Open Time', 'Open', 'High', 'Low', 'Close', 'Volume', 'Close Time', 'Quote Asset Volume',
'Number of Trades', 'TB Base Volume', 'TB Quote Volume', 'Ignore']
为了将其可视化,我们写下以下代码。
hist_df.head()
输出。
如果我们输入hist_df.dtypes
,我们会注意到超过一半的列是以对象(字符串)的形式存储的。由于我们正在处理金融数据,并希望进行计算,我们需要将其转换为数值。
预处理历史数据
hist_df.dtypes
输出。
Open Time int64
Open object
High object
Low object
Close object
Volume object
Close Time int64
Quote Asset Volume object
Number of Trades int64
TB Base Volume object
TB Quote Volume object
Ignore object
dtype: object
我们首先将Open Time
和Close Time
转换为日期时间值。我们将使用pandas的to_datetime()
函数来做这件事。由于日期是以时间戳的形式从Binance返回的,我们首先除以1000,然后将单位设置为秒,以便正确转换。
hist_df['Open Time'] = pd.to_datetime(hist_df['Open Time']/1000, unit='s')
hist_df['Close Time'] = pd.to_datetime(hist_df['Close Time']/1000, unit='s')
现在,让我们继续使用to_numeric
函数将我们的对象转换为数字值。
numeric_columns = ['Open', 'High', 'Low', 'Close', 'Volume', 'Quote Asset Volume', 'TB Base Volume', 'TB Quote Volume']
hist_df[numeric_columns] = hist_df[numeric_columns].apply(pd.to_numeric, axis=1)
我们创建了一个名为numeric_columns
的变量。这个变量存储了我们要转换为数值的数据列表。然后我们使用apply()
方法来执行这个转换。
我们可以通过发布命令hist_df.head()
来查看结果。
在转换数据类型后,我们可以使用命令hist_df.dtypes
来查看新的数据类型。
Open Time datetime64[ns]
Open float64
High float64
Low float64
Close float64
Volume float64
Close Time datetime64[ns]
Quote Asset Volume float64
Number of Trades int64
TB Base Volume float64
TB Quote Volume float64
Ignore object
dtype: object
我们已经成功地预处理了历史数据。此外,你还可以对数据进行其他类型的分析。玩一玩hist_df.describe()
和hist_df.info
,看看你能发现什么。
使用matplotlib金融库进行可视化
这一步将使用mplfinance对数据进行探索和可视化。它是一个建立在matplotlib
上的金融市场数据可视化工具。
我们首先将该库导入我们的笔记本中。
import mplfinance as mpf
我们将对Close Time
数据进行可视化,并将数据限制在只有最后100行的范围内。在图中,我们还包括了蜡烛图类型,成交量数据,我们图的标题,最后是10、20、30移动日平均线。
mpf.plot(hist_df.set_index('Close Time').tail(100),
type='candle', style='charles',
volume=True,
title='BTCUSDT Last 100 Days',
mav=(10,20,30))
输出。
正如我们所看到的,matplotlib金融库使我们能够轻松地将数据可视化。
请在这里找到本教程的代码。
总结
简而言之,本教程向您展示了Python-binance API的可能性。此外,我们还向您展示了如何对Binance数据进行探索性数据分析。在我们的后续教程中,我们将在本教程的基础上,向您展示如何将机器学习和数据科学应用于交易和金融。