python binance 下载
在数字货币交易领域,Binance是一家备受瞩目的交易所,以其广泛的市场、低廉的交易费用和强大的社区而闻名。对于开发者或对量化策略感兴趣的投资者来说,使用Python进行自动化交易是一个不错的选择。本文将详细介绍如何用Python与Binance API无缝对接,下载历史数据,并进行下单交易。
首先,我们需要获得Binance提供的API Key和Secret Key,这是访问其API服务的基础凭证。打开Binance官网,登录后进入“My Binance”,然后点击“API权限”进行设置。在“API权限管理”中,勾选需要使用的API类型,填写相关信息,包括应用名称、网站URL(可选)及应用用途,提交申请后会生成API Key和Secret Key。
有了Key和Secret之后,我们可以开始编写Python脚本来下载数据或执行交易。
历史数据的获取
Binance提供了一个易于使用的WebSocket接口来实时接收行情信息。然而,由于WebSocket无法用于回溯历史数据,我们通常使用HTTP API接口来检索历史交易数据。以下是一个简单的示例代码,演示如何利用requests库从Binance下载价格和成交量历史数据:
```python
import requests
import json
Binance API URL
API_URL = "https://api.binance.com/api/v3"
def get_history(symbol, interval):
url = f"{API_URL}/klines?symbol={symbol}&interval={interval}"
response = requests.get(url)
if response.status_code == 200:
data = json.loads(response.text)
return data
else:
print("Error fetching history from Binance.")
return []
Example usage
symbols = ["BTCUSDT"] # 可替换为其他交易对
intervals = ["1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "6h", "8h", "12h"] # 可替换为其他时间间隔
for symbol in symbols:
for interval in intervals:
history = get_history(symbol, interval)
print(f"Fetched {interval}-minute history for {symbol}.")
```
上述代码定义了一个函数`get_history()`,该函数接受一个交易对和一个时间间隔作为参数。它构造API请求的URL,然后使用requests库发送GET请求获取数据。请注意,Binance API对于免费用户有一定的速率限制(每秒钟最多120次请求),因此进行频繁调用时需遵守其规定。
执行交易
为了执行交易,我们需要在HTTP API接口中进行POST请求,并将API Key和Secret作为签名附到请求头部。以下是一个简单的下单示例:
```python
import requests
import hashlib
Binance API URL
API_URL = "https://api.binance.com/api/v3"
def post_order(symbol, side, type, quantity):
url = f"{API_URL}/futures/order?symbol={symbol}"
api_key = 'YOUR_API_KEY' # 替换为你的API Key
secret_key = 'YOUR_SECRET_KEY' # 替换为你的Secret Key
nonce = str(int(time.time() * 1e9))[:-6] # 获取当前时间戳的前几位
timestamp = nonce + secret_key
sign = hashlib.sha256(api_key.encode('utf8') + timestamp.encode('utf8')).hexdigest()
headers = {
'X-MB-APIKEY': api_key,
'X-MB-SIGNATURE': sign
}
payload = json.dumps({
"symbol": symbol,
"side": side,
"type": type,
"quantity": quantity
})
response = requests.post(url, headers=headers, data=payload)
print(f"Order result: {json.loads(response.text)}")
Example usage
symbols = ["BTCUSDT"] # 可替换为其他交易对
sides = ["BUY", "SELL"] # 买卖方向
order_types = ["LIMIT", "MARKET"] # 限价单、市价单
quantities = [10.0, 20.0] # 可替换为下单数量
for symbol in symbols:
for side in sides:
for order_type in order_types:
for quantity in quantities:
post_order(symbol, side, order_type, quantity)
```
上述代码定义了一个函数`post_order()`,该函数接受一个交易对、下单方向、下单类型和下单数量。它构造API请求的URL,然后使用requests库发送POST请求下单。注意,下单操作需要签名以确保数据完整性和身份验证。
在编写Python脚本进行Binance下载时,请确保遵守法律法规及交易所的规定。自动化交易涉及风险,务必谨慎操作并做好仓位管理。