Вот пример скрипта на Python, который реализует простую стратегию скальпинга с использованием RSI и полос Боллинджера.
Установка необходимых библиотек:
Для работы с Binance API и техническими индикаторами, необходимо установить следующие библиотеки:
pip install python-binance TA-Lib
Пример кода для бота:
import time
import talib
import numpy as np
from binance.client import Client
from binance.enums import *
# Подключение к Binance API
api_key = 'YOUR_API_KEY'
api_secret = 'YOUR_API_SECRET'
client = Client(api_key, api_secret)
# Настройки торгового бота
symbol = 'BTCUSDT' # Пара, по которой будет вестись торговля
interval = Client.KLINE_INTERVAL_1MINUTE # Таймфрейм для анализа
quantity = 0.001 # Количество BTC для торговли
rsi_period = 14 # Период для расчета RSI
upper_rsi = 70 # RSI для перекупленности
lower_rsi = 30 # RSI для перепроданности
bollinger_period = 20 # Период для расчета полос Боллинджера
take_profit = 1.02 # Уровень для тейк-профита (на 2% выше покупки)
stop_loss = 0.98 # Уровень для стоп-лосса (на 2% ниже покупки)
def get_klines(symbol, interval, lookback):
"""Получаем данные для анализа"""
klines = client.get_klines(symbol=symbol, interval=interval, limit=lookback)
closes = [float(kline[4]) for kline in klines] # Закрывающие цены
return np.array(closes)
def trade_signal(prices):
"""Проверяем сигналы для входа и выхода на основе RSI и полос Боллинджера"""
rsi = talib.RSI(prices, timeperiod=rsi_period)
upperband, middleband, lowerband = talib.BBANDS(prices, timeperiod=bollinger_period)
# Последние значения индикаторов
current_rsi = rsi[-1]
current_price = prices[-1]
lower_band = lowerband[-1]
upper_band = upperband[-1]
# Логика для входа и выхода из сделок
if current_rsi < lower_rsi and current_price <= lower_band:
return 'buy' # Сигнал на покупку
elif current_rsi > upper_rsi and current_price >= upper_band:
return 'sell' # Сигнал на продажу
else:
return 'hold' # Держим позицию
def place_order(order_side, quantity, symbol):
"""Размещение ордера"""
try:
order = client.create_order(
symbol=symbol,
side=order_side,
type=ORDER_TYPE_MARKET,
quantity=quantity)
print(f"{order_side} order placed successfully")
return order
except Exception as e:
print(f"Error placing {order_side} order: {e}")
return None
def run_bot():
"""Основная логика бота"""
position = None # Переменная для отслеживания открытой позиции
while True:
try:
# Получаем актуальные данные по цене
closes = get_klines(symbol, interval, lookback=bollinger_period + rsi_period)
signal = trade_signal(closes)
if signal == 'buy' and position is None:
# Покупаем, если нет открытой позиции
order = place_order(SIDE_BUY, quantity, symbol)
if order:
buy_price = float(order['fills'][0]['price']) # Цена покупки
position = {'side': 'buy', 'price': buy_price}
print(f"Bought at {buy_price}")
elif signal == 'sell' and position is not None and position['side'] == 'buy':
# Продаем, если есть открытая позиция
sell_price = closes[-1]
if sell_price >= position['price'] * take_profit or sell_price <= position['price'] * stop_loss:
order = place_order(SIDE_SELL, quantity, symbol)
if order:
print(f"Sold at {sell_price}")
position = None # Закрываем позицию
time.sleep(60) # Ждем следующей минуты для новой проверки
except Exception as e:
print(f"Error in bot logic: {e}")
time.sleep(60)
# Запуск торгового бота
run_bot()
Объяснение кода:
1. Получение рыночных данных:
Функция get_klines загружает исторические цены с Binance по выбранной паре (например, BTC/USDT) и временным интервалам (например, 1 минута).
2. Анализ сигналов:
Функция trade_signal использует RSI и полосы Боллинджера для анализа рыночных данных.
Если RSI ниже 30 и цена на нижней полосе Боллинджера, бот отправляет сигнал на покупку. Если RSI выше 70 и цена на верхней полосе, бот сигнализирует продажу.
3. Ордера:
Функция place_order отправляет ордера на покупку или продажу через Binance API.
4. Основная логика:
В цикле бот проверяет рыночные данные каждую минуту, следит за сигналами на покупку и продажу и управляет ордерами.
После покупки бот отслеживает цену для установки тейк-профита и стоп-лосса.
Параметры для настройки:
symbol: Торговая пара, например, BTCUSDT.
interval: Временной интервал (1 минута в данном случае).
quantity: Размер позиции.
RSI и Bollinger: Параметры индикаторов можно оптимизировать в зависимости от выбранной криптовалюты и рынка.
Важно:
Протестируй стратегию на тестовом аккаунте или с малым капиталом перед использованием на реальных рынках.
Всегда учитывай риски, так как автоматическая торговля может привести к потерям в случае резких изменений на рынке.