Простой торговый бот
Это руководство поможет вам создать простого автоматизированного торгового бота для xRocket Exchange с использованием стандартных библиотек Python, в частности requests. Это отличная отправная точка для понимания прямого взаимодействия с API.
Этот бот предназначен для использования только в Testnet. Не запускайте примеры кода на Mainnet с реальными средствами без тщательного тестирования и надлежащего управления рисками.
Шаг 1: Настройте свою среду и аутентификацию
- Сначала убедитесь, что у вас есть Python и установлена библиотека
requests.
pip install requests
- Далее, создайте новый Python файл с названием
my_trading_bot.py.
Храните Bearer Token в переменной окружения, а не записывайте его напрямую в код. Это предотвратит случайное раскрытие токена в системе контроля версий.
import requests
import os
import json
import time
# --- Конфигурация ---
# Получите свой токен из переменных среды (RECOMMENDED)
# Задайте в терминале: export XROCKET_TOKEN="<YOUR_BEARER_TOKEN>"
API_TOKEN = os.environ.get("XROCKET_TOKEN", "YOUR_FALLBACK_TOKEN")
# Используйте среду Testnet для тестирования
https://docs.xrocket.exchange = "https://exchange.api.testnet.xrocket.tg"
# Задайте торговую пару
SYMBOL = 'TON-USDT' # Формат символа xRocket: БАЗОВАЯ-КОТИРУЕМАЯ (через дефис)
def make_authenticated_request(method, endpoint, data=None):
"""Вспомогательная функция для выполнения запросов API с аутентификацией с Bearer Token."""
headers = {
'Accept': 'application/json',
'Authorization': f'Bearer {API_TOKEN}',
'Content-Type': 'application/json'
}
url = f"{https://docs.xrocket.exchange}{endpoint}"
# Отправьте запрос
try:
if method in ['POST', 'PUT']:
response = requests.request(method, url, headers=headers, data=json.dumps(data))
else:
response = requests.request(method, url, headers=headers)
response.raise_for_status() # Вызов исключения для неверных кодов состояния (4xx or 5xx)
return response.json()
except requests.exceptions.HTTPError as e:
print(f"HTTP error occurred: {e.response.text}")
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
return None
Шаг 2: Получение рыночных данных (публичные методы)
Методы рыночных данных являются общедоступными и не требуют аутентификации. Мы можем использовать вспомогательную функцию, но здесь нам не нужен заголовок Authorization (хотя вспомогательная функция все равно отправит его, и это нормально).
Мы получим тикер, чтобы узнать последнюю цену.
# --- Fetch the Ticker (Price Info) ---
ticker_endpoint = "/api/v1/ticker/24h"
try:
ticker_data = make_authenticated_request("GET", ticker_endpoint)
if ticker_data and 'tickers' in ticker_data:
ticker = next((t for t in ticker_data['tickers'] if t['symbol'] == SYMBOL), None)
if ticker:
current_price = float(ticker['last'])
print(f"Current price of {SYMBOL} is {current_price}")
else:
print("Could not fetch ticker data.")
current_price = None
except Exception as e:
print(f"Error fetching market data: {e}")
current_price = None
Шаг 3: Реализуйте простую торговую стратегию
Это базовая концептуальная стратегия: если цена низкая, подумайте о покупке; если высокая, рассмотрите возможность продажи.
Эта стратегия предназначена исключительно для демонстрации. Не используйте её для реальной торговли без существенных доработок, бэктестирования и надлежащего управления рисками.
# Простые ценовые пороги для нашей стратегии
buy_threshold = 2.00 # For Testnet TON
sell_threshold = 2.50 # For Testnet TON
if current_price is not None:
if current_price < buy_threshold:
print(f"Price is low ({current_price}), considering a BUY order.")
# Мы бы разместили ордер здесь
elif current_price > sell_threshold:
print(f"Price is high ({current_price}), considering a SELL order.")
# Мы бы разместили ордер здесь
else:
print("Price is within our comfort zone. No action.")
Шаг 4: Разместить ордер (Приватные методы)
В этом шаге показано, как создать новый рыночный ордер, используя приватный метод. Для этого требуется аутентификация через заголовок Authorization: Bearer <YOUR_API_TOKEN>, который обрабатывает вспомогательная функция make_authenticated_request.
def place_market_order(symbol, side, amount):
"""Function to place a market order."""
order_endpoint = "/api/v1/orders"
order_data = {
'symbol': symbol,
'side': side, # 'buy' or 'sell'
'type': 'market',
'size': str(amount), # Quantity must be a string in the payload
'timeInForce': 'IOC'
}
response = make_authenticated_request("POST", order_endpoint, data=order_data)
if response:
print("Order placed successfully:")
print(json.dumps(response, indent=4))
return response
else:
print("Failed to place order.")
return None
# --- Запрос на основе нашей стратегии ---
if current_price is not None:
if current_price < buy_threshold:
# Купить 5 TON в Testnet
place_market_order(SYMBOL, 'buy', 5)
elif current_price > sell_threshold:
# Продать 5 TON в Testnet
place_market_order(SYMBOL, 'sell', 5)
Шаг 5: Следующие шаги и лучшие практики
Поздравляем! Вы создали базового торгового бота, используя запросы Python requests к API xRocket.
Чтобы вывести своего бота на новый уровень, учтите следующее:
- Обработка ошибок: Расширьте блоки
try...exceptдля обработки определенных кодов ошибок API, описанных в статье Обработка ошибок. - WebSockets: Для обновления данных и ордеров в режиме реального времени переключитесь с REST API-методов на WebSocket API. Это быстрее и эффективнее.
- Управление рисками: Реализуйте функции стоп-лосс и тейк-профит.
- Бэктестирование: Протестируйте свою стратегию на исторических данных, прежде чем запускать её на Mainnet.