Вот чего я пытаюсь достичь:
1. Полная история транзакций:
- Я хотел бы собрать все мои прошлые депозиты, снятие средств и торговую историю для различных типов инструментов (например, , Спот, Фьючерсы и Маржа).
- Мне нужно знать, есть ли способ эффективно разбивать на страницы все мои транзакции, поскольку я торгую уже больше года. В идеале я хотел бы получать только новые транзакции, которые еще не были получены.
- Я хотел бы получить любые доходы или вознаграждения за ставки Я накопил с помощью программ ставок OKX.
- Существует ли конечная точка API, которая обеспечивает разбивку доходов, бонусов или каких-либо других вознаграждений? Как отслеживать их с течением времени?
- Около года назад я начал использовать бота для автоматической торговли. Я хотел бы иметь возможность отслеживать покупки и продажи бота с течением времени. Существует ли специальный API, который предоставляет подробную информацию об этих торгах с помощью ботов?
- Я планирую запускать это приложение ежедневно, чтобы автоматически получать только новые данные (все, что не было получено ранее) и сохранить его локально для анализа.
- Есть ли способ гарантировать, что я извлекаю дополнительные данные (во избежание повторных запросов)?
- Я уже использую конечные точки API для депозитов, снятия средств, фиатные транзакции и история торговли, но мне интересно, есть ли какие-нибудь лучшие стратегии или конечные точки, которые сделают это более эффективным.
- Любая помощь с ограничениями ставок или передовыми методами обработки больших наборов данных в течение длительного периода также будет оценено!
Например:
- История торговли: я использую /api/v5/ trade/order-history, но иногда возвращает пустой результат, хотя я знаю, что сделки существуют.
- Фиатные транзакции: /api/ Конечная точка v5/asset/fiat/orders, похоже, дает сбой или не возвращает никаких данных, и я не уверен, какие параметры требуются.
import time
import requests
import hmac
import hashlib
import base64
from datetime import datetime
from urllib.parse import urlencode
class MyOKX:
def __init__(self, api_key, api_secret, passphrase):
self.api_key = api_key
self.api_secret = api_secret
self.passphrase = passphrase
self.base_url = "https://www.okx.com"
def _get_server_timestamp(self):
"""Fetch OKX server time and return it in milliseconds."""
url = f"{self.base_url}/api/v5/public/time"
response = requests.get(url)
server_time = response.json()['data'][0]['ts'] # This is the server time in milliseconds
return server_time
def _get_iso_timestamp(self):
"""Convert the server timestamp to ISO 8601 format with milliseconds."""
server_time = self._get_server_timestamp()
iso_timestamp = datetime.utcfromtimestamp(int(server_time) / 1000).strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
return iso_timestamp
def _sign_request(self, method, path, body=''):
"""Sign the request with the correct timestamp and generate the signature."""
timestamp = self._get_iso_timestamp()
message = timestamp + method.upper() + path + body
mac = hmac.new(self.api_secret.encode('utf-8'), message.encode('utf-8'), hashlib.sha256)
signature = base64.b64encode(mac.digest()).decode('utf-8')
return timestamp, signature
def _get_headers(self, method, path, body=''):
"""Generate headers with the correct timestamp and signature."""
timestamp, signature = self._sign_request(method, path, body)
return {
'OK-ACCESS-KEY': self.api_key,
'OK-ACCESS-SIGN': signature,
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': self.passphrase,
'Content-Type': 'application/json'
}
def fetch_deposits(self):
"""Fetch deposit history."""
path = "/api/v5/asset/deposit-history"
method = "GET"
url = f"{self.base_url}{path}"
headers = self._get_headers(method, path)
print(f"Request URL: {url}")
print(f"Request Headers: {headers}") # Print headers for debugging
response = requests.get(url, headers=headers)
print(f"Response Code: {response.status_code}, Response: {response.json()}")
return response.json()
def fetch_withdrawals(self):
""" Fetch withdrawal history """
path = "/api/v5/asset/withdrawal-history"
method = "GET"
url = f"{self.base_url}{path}"
headers = self._get_headers(method, path)
print(f"Request URL: {url}")
print(f"Request Headers: {headers}") # Print headers for debugging
response = requests.get(url, headers=headers)
print(f"Response Code: {response.status_code}, Response: {response.json()}")
return response.json()
def fetch_fiat_transactions(self):
""" Fetch fiat transaction history """
path = "/api/v5/asset/fiat/orders"
method = "GET"
url = f"{self.base_url}{path}"
headers = self._get_headers(method, path)
print(f"Request URL: {url}")
print(f"Request Headers: {headers}") # Print headers for debugging
response = requests.get(url, headers=headers)
print(f"Response Code: {response.status_code}, Response: {response.json()}")
return response.json()
def fetch_trades(self, instType="SPOT"):
""" Fetch trades for a specific instrument type (e.g., SPOT, FUTURES, MARGIN) """
path = "/api/v5/trade/order-history"
method = "GET"
params = {'instType': instType} # Specify instrument type
query = '?' + urlencode(params)
url = f"{self.base_url}{path}{query}"
headers = self._get_headers(method, path + query)
print(f"Request URL: {url}")
print(f"Request Headers: {headers}") # Print headers for debugging
response = requests.get(url, headers=headers)
print(f"Response Code: {response.status_code}, Response: {response.json()}")
return response.json()
# Example of usage
if __name__ == "__main__":
api_key = "your_api_key"
api_secret = "your_api_secret"
passphrase = 'your_passphrase'
# Instantiate the class
okx_api = MyOKX(api_key, api_secret, passphrase)
# Fetch deposits, withdrawals, fiat transactions, and trades
okx_api.fetch_deposits()
okx_api.fetch_withdrawals()
okx_api.fetch_fiat_transactions()
okx_api.fetch_trades()
Подробнее здесь: https://stackoverflow.com/questions/790 ... ia-okx-api