Перейти к основному содержимому

Простой торговый бот

Это руководство поможет вам создать простого автоматизированного торгового бота для xRocket Exchange с использованием стандартных библиотек Python, в частности requests. Это отличная отправная точка для понимания прямого взаимодействия с API.

Внимание

Этот бот предназначен для использования только в Testnet. Не запускайте примеры кода на Mainnet с реальными средствами без тщательного тестирования и надлежащего управления рисками.

Шаг 1: Настройте свою среду и аутентификацию

  • Сначала убедитесь, что у вас есть Python и установлена библиотека requests.
pip install requests
  • Далее, создайте новый Python файл с названием my_trading_bot.py.
подсказка

Храните Bearer Token в переменной окружения, а не записывайте его напрямую в код. Это предотвратит случайное раскрытие токена в системе контроля версий.

my_trading_bot.py
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 (хотя вспомогательная функция все равно отправит его, и это нормально).

Мы получим тикер, чтобы узнать последнюю цену.

Fetching Market Data
# --- 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: Реализуйте простую торговую стратегию

Это базовая концептуальная стратегия: если цена низкая, подумайте о покупке; если высокая, рассмотрите возможность продажи.

осторожно

Эта стратегия предназначена исключительно для демонстрации. Не используйте её для реальной торговли без существенных доработок, бэктестирования и надлежащего управления рисками.

Simple Strategy Logic
# Простые ценовые пороги для нашей стратегии
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.

Placing an Order
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.