```python=
import requests
import json
import time
import csv
import hashlib
import hmac
from datetime import datetime
from apiKey import api_key, secret_key
symbol = 'BTCUSDT' # 交易對,例如 BTCUSDT
interval = '1m' # K 線時間間隔,例如 1m(1 分鐘)
start_time_str = '2022-01-01 00:00:00' # 可讀的開始時間
end_time_str = '2022-01-02 01:00:00' # 可讀的結束時間
limit = 1000 # 每次獲取的K線數量
# 建立 API 請求簽名
def create_signature(query_string):
return hmac.new(secret_key.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256).hexdigest()
# 發送 GET 請求
def send_get_request(url, params):
query_string = '&'.join([f"{key}={params[key]}" for key in params])
signature = create_signature(query_string)
headers = {
'X-MBX-APIKEY': api_key
}
response = requests.get(url + '?' + query_string + '&signature=' + signature, headers=headers)
return response.json()
# 下載並儲存歷史資料
def download_historical_data(symbol, interval, start_time, end_time, limit):
url = 'https://api.binance.com/api/v3/klines'
params = {
'symbol': symbol,
'interval': interval,
'startTime': start_time,
'endTime': end_time,
'limit': limit
}
response = send_get_request(url, params)
# 檢查回應是否成功
if 'code' in response:
print(f"下載歷史資料時發生錯誤:{response['msg']}")
return
# 儲存資料到 CSV 檔案
filename = f"{symbol}_{interval}_{start_time}_{end_time}.csv"
with open(filename, 'w', newline='') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(['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'])
for kline in response:
csvwriter.writerow(kline)
print(f"歷史資料已下載並儲存為 {filename}")
# 將可讀的時間轉換為時間戳(以毫秒為單位)
start_time = int(datetime.strptime(start_time_str, '%Y-%m-%d %H:%M:%S').timestamp() * 1000)
end_time = int(datetime.strptime(end_time_str, '%Y-%m-%d %H:%M:%S').timestamp() * 1000)
# 執行下載歷史資料的函數
download_historical_data(symbol, interval, start_time, end_time, limit)
```
