Crypto Trade бот на Python
⚠️ Дисклеймер
Статья написана с познавательной и ознакомительной целью, мы не призываем читателей к запрещенным законодательством действиям, а также не создаём пропаганду. Мы никого ни к чему не призываем! Вся информация представленная нами — это фантазия автора, выдумка, сон, вымысел. Данный материал не имеет ни какого отношения к реальности, все совпадения — случайность. Автор материала не несёт ответственности за ваши действия. Все персонажи и описываемые события являются вымышленными.
Всех приветствую, сегодня мы будем писать своего Crypto Trade bot'а на Python.
Цель нашей работы: Нам нужно написать программу, которая будет автоматически торговать на бирже Binance и уведомлять нас обо всех проведенных операциях в Telegram.
Принцип работы нашей программы:
Что нам необходимо для работы:
1. Python 3 (скачать)
2. Редактор кода, например PyCharm, VS Code, или любой другой
3. Минимальные знания в Python
Этап 1
1. Регистрируемся на сайте binance.com
2. Вносим депозит - ссылка
2. Создаем свой Api Key - ссылка
Этап 2
1. Устанавливаем библиотеку python-binance для работы с Binance Api
pip install python-binance
2. Приступаем к написанию кода (Подключаемся к Binance Api и импортируем библиотеку time для работы со временем и math для работы с вычислениями)
# Подключаемся к Binance Api from binance.client import Client from binance.websockets import BinanceSocketManager # Работа со временем import time # Работа с вычислениями import math # Api key api_key = 'ваш api key' # Secret Api key api_secret = 'ваш secret key' # Client client = Client(api_key, api_secret)
3. Вводим константы
# Рынок ASSET = 'ETHUSDT' # Торгуемая валюта CURRENCY = 'USDT' # Торгуемая криптовалюта CRYPTOCURRENCY = 'ETH' # Стартовый капитал криптовалюты START_CRYPTOCURRENCY = 0.34376140
4. Основные функции для торговли
''' Б а л а н с '''
def balance(symbol):
balance = client.get_asset_balance(asset=symbol)
balance = {'free': balance['free'], 'locked':balance['locked']}
return balance
''' И с т о р и я '''
def history(symbol):
history = client.get_my_trades(symbol=symbol)
return history
''' К у р с '''
def price(symbol):
price = client.get_avg_price(symbol=symbol)['price']
return float(price)
''' П о к у п к а '''
def order_market_buy(quantity):
order = client.order_market_buy(symbol=ASSET, quantity=quantity)
''' П р о д а ж а '''
def order_market_sell(quantity):
order = client.order_market_sell(symbol=ASSET, quantity=quantity)Этап 3
1. Устанавливаем библиотеку telebot для работы с Telegram
pip install pyTelegramBotAPI
2. Создаем telegram бота, который будет уведомлять нас о совершенных операциях
Для того чтобы создать telegram бота пишем BotFather (@BotFather):
3. Подключаем нашего бота в коде
# Telegram bot
import telebot
# API бота
bot = telebot.TeleBot('1310456996:AAEVETUrt9pJ-eIHAe1nReHU800wK9tvLNs')
4. Если мы не хотим, чтобы наш бот писал кому-то ещё кроме нас, то нам нужно сделать так, чтобы наш бот писал только нам
Для этого пишем What's my ID (@myidbot) и получаем наш ID в telegram
Теперь указываем наш ID в коде
# ID получателя в telegram ID = 872191161
5. Функции для отправки сообщений
Во время покупки или продажи криптовалюты бот будет уведомлять нас о произведенной операции
''' С о о б щ е н и е '''
def message(text):
bot.send_message(ID, text)
''' С о о б щ е н и е П о к у п к и '''
def buy_message_success():
# Получаем последнюю сделку
data = history(ASSET)[-1]
# Отправляем сообщения
message('Покупка')
message('Информация о сделке \n\nАктив: ' + data['symbol'] + '\nПокупка: ' + data['commissionAsset'] + '\nКупленный актив: ' + data['qty'] + ' ' + data['commissionAsset'] + '\nПроданный актив: ' + data['quoteQty'] + ' ' + CURRENCY + '\nЦена на момент покупки: ' + data['price'] + ' ' + CURRENCY + '\nКомиссия: ' + data['commission'] + ' ' + CURRENCY +'\nВремя сделки: ' + str(data['time']))
message('Информация о балансе \n\nБаланс ' + CURRENCY + ': ' + str(balance(CURRENCY)['free']) + '\nБаланс ' + CRYPTOCURRENCY + ': ' + str(balance(CRYPTOCURRENCY)['free']))
message('Прибыль \n\nПрибыль ' + CRYPTOCURRENCY + ': ' + str(float(balance(CRYPTOCURRENCY)['free']) - START_CRYPTOCURRENCY))
''' С о о б щ е н и е П р о д а ж и '''
def sell_message_success():
# Получаем последнюю сделку
data = history(ASSET)[-1]
# Отправляем сообщения
message('Продажа')
message('Информация о сделке \n\nАктив: ' + data['symbol'] + '\nПокупка: ' + data['commissionAsset'] + '\nКупленный актив: ' + data['quoteQty'] + ' ' + data['commissionAsset'] + '\nПроданный актив: ' + data['qty'] + ' ' + CRYPTOCURRENCY + '\nЦена на момент продажи: ' + data['price'] + ' ' + CRYPTOCURRENCY + '\nКомиссия: ' + data['commission'] + ' ' + CRYPTOCURRENCY +'\nВремя сделки: ' + str(data['time']))
message('Информация о балансе \n\nБаланс ' + CURRENCY + ': ' + str(balance(CURRENCY)['free']) + '\nБаланс ' + CRYPTOCURRENCY + ': ' + str(balance(CRYPTOCURRENCY)['free']))
message('Прибыль \n\nПрибыль ' + CRYPTOCURRENCY + ': ' + str(float(balance(CRYPTOCURRENCY)['free']) - START_CRYPTOCURRENCY))Этап 4
1. Примерный план нашего алгоритма
2. Вводим константы
# Время обновления курса TIME = 10 # Процент при котором будет совершена покупка GROW_PERCENT = 0.5 # Процент при котором будет совершена продажа FALL_PERCENT = -0.25
3. Вот алгоритм, который у нас получился
''' А л г о р и т м '''
def main(FIRST_PRICE):
# Функция обрезает число до n кол-во символов(Нужна чтобы при покупки и продажи не возникло ошибки)
def toFixed(f: float, n=0):
a, b = str(f).split('.')
return '{}.{}{}'.format(a, b[:n], '0'*(n-len(b)))
# Запускаем
time.sleep(TIME)
# Получаем новую цену
PRICE = price(ASSET)
# Процентное изменение
PROCENT = ((PRICE - FIRST_PRICE) / FIRST_PRICE) * 100
print('Цена отсчета:', str(FIRST_PRICE), '| Процент:', str(PROCENT))
# Покупка
if PROCENT >= GROW_PERCENT:
try:
print('BUY')
# Покупаем
order_market_buy(toFixed(float(balance(CURRENCY)['free']) / price(ASSET), 5))
# Отправляем сообщение
buy_message_success()
# Перезапускаем функцию
main(PRICE)
except:
print('Ошибка при покупки!')
# Перезапускаем функцию
main(PRICE)
# Продажа
elif PROCENT <= FALL_PERCENT:
try:
print('SELL')
# Покупаем
order_market_sell(toFixed(float(balance(CRYPTOCURRENCY)['free']), 5))
# Отправляем сообщение
sell_message_success()
# Перезапускаем функцию
main(PRICE)
except:
print('Ошибка при продажи!')
# Перезапускаем функцию
main(PRICE)
else:
# Перезапускаем функцию
main(FIRST_PRICE)
4. Запускаем нашу программу
''' З а п у с к ''' # Стартовые значения START_PRICE = price(ASSET) # Запускаем main(START_PRICE)
Весь код
# Подключаемся к Binance Api
from binance.client import Client
from binance.websockets import BinanceSocketManager
# Работа со временем
import time
# Работа с вычислениями
import math
# Api key
api_key = 'ваш api key'
# Secret Api key
api_secret = 'ваш secret key'
# Client
client = Client(api_key, api_secret)
# Рынок
ASSET = 'ETHUSDT'
# Торгуемая валюта
CURRENCY = 'USDT'
# Торгуемая криптовалюта
CRYPTOCURRENCY = 'ETH'
# Стартовый капитал криптовалюты
START_CRYPTOCURRENCY = 0.34376140
''' Б а л а н с '''
def balance(symbol):
balance = client.get_asset_balance(asset=symbol)
balance = {'free': balance['free'], 'locked':balance['locked']}
return balance
''' И с т о р и я '''
def history(symbol):
history = client.get_my_trades(symbol=symbol)
return history
''' К у р с '''
def price(symbol):
price = client.get_avg_price(symbol=symbol)['price']
return float(price)
''' П о к у п к а '''
def order_market_buy(quantity):
order = client.order_market_buy(symbol=ASSET, quantity=quantity)
''' П р о д а ж а '''
def order_market_sell(quantity):
order = client.order_market_sell(symbol=ASSET, quantity=quantity)
# Telegram bot
import telebot
# API бота
bot = telebot.TeleBot('токен вашего бота')
# ID получателя в telegram
ID = 'ваш id в telegram'
''' С о о б щ е н и е '''
def message(text):
bot.send_message(ID, text)
''' С о о б щ е н и е П о к у п к и '''
def buy_message_success():
# Получаем последнюю сделку
data = history(ASSET)[-1]
# Отправляем сообщения
message('Покупка')
message('Информация о сделке \n\nРынок: ' + data['symbol'] + '\nПокупка: ' + data['commissionAsset'] + '\nКупленный актив: ' + data['qty'] + ' ' + data['commissionAsset'] + '\nПроданный актив: ' + data['quoteQty'] + ' ' + CURRENCY + '\nЦена на момент покупки: ' + data['price'] + ' ' + CURRENCY + '\nКомиссия: ' + data['commission'] + ' ' + CURRENCY +'\nВремя сделки: ' + str(data['time']))
message('Информация о балансе \n\nБаланс ' + CURRENCY + ': ' + str(balance(CURRENCY)['free']) + '\nБаланс ' + CRYPTOCURRENCY + ': ' + str(balance(CRYPTOCURRENCY)['free']))
message('Прибыль \n\nПрибыль ' + CRYPTOCURRENCY + ': ' + str(float(balance(CRYPTOCURRENCY)['free']) - START_CRYPTOCURRENCY))
''' С о о б щ е н и е П р о д а ж и '''
def sell_message_success():
# Получаем последнюю сделку
data = history(ASSET)[-1]
# Отправляем сообщения
message('Продажа')
message('Информация о сделке \n\nРынок: ' + data['symbol'] + '\nПокупка: ' + data['commissionAsset'] + '\nКупленный актив: ' + data['quoteQty'] + ' ' + data['commissionAsset'] + '\nПроданный актив: ' + data['qty'] + ' ' + CRYPTOCURRENCY + '\nЦена на момент продажи: ' + data['price'] + ' ' + CRYPTOCURRENCY + '\nКомиссия: ' + data['commission'] + ' ' + CRYPTOCURRENCY +'\nВремя сделки: ' + str(data['time']))
message('Информация о балансе \n\nБаланс ' + CURRENCY + ': ' + str(balance(CURRENCY)['free']) + '\nБаланс ' + CRYPTOCURRENCY + ': ' + str(balance(CRYPTOCURRENCY)['free']))
message('Прибыль\n\nПрибыль ' + CRYPTOCURRENCY + ': ' + str(float(balance(CRYPTOCURRENCY)['free']) - START_CRYPTOCURRENCY))
# Время обновления курса
TIME = 10
# Процент при котором будет совершена покупка
GROW_PERCENT = 0.5
# Процент при котором будет совершена продажа
FALL_PERCENT = -0.25
''' А л г о р и т м '''
def main(FIRST_PRICE):
# Функция обрезает число до n кол-во символов(Нужна чтобы при покупки и продажи не возникло ошибки)
def toFixed(f: float, n=0):
a, b = str(f).split('.')
return '{}.{}{}'.format(a, b[:n], '0'*(n-len(b)))
# Засыпаем
time.sleep(TIME)
# Получаем новую цену
PRICE = price(ASSET)
# Процентное изменение
PROCENT = ((PRICE - FIRST_PRICE) / FIRST_PRICE) * 100
print('Цена отсчета:', str(FIRST_PRICE), '| Процент:', str(PROCENT))
# Покупка
if PROCENT >= GROW_PERCENT:
try:
print('BUY')
# Покупаем
order_market_buy(toFixed(float(balance(CURRENCY)['free']) / price(ASSET), 5))
# Отправляем сообщение
buy_message_success()
# Перезапускаем функцию
main(PRICE)
except:
print('Ошибка при покупки!')
# Перезапускаем функцию
main(PRICE)
# Продажа
elif PROCENT <= FALL_PERCENT:
try:
print('SELL')
# Покупаем
order_market_sell(toFixed(float(balance(CRYPTOCURRENCY)['free']), 5))
# Отправляем сообщение
sell_message_success()
# Перезапускаем функцию
main(PRICE)
except:
print('Ошибка при продажи!')
# Перезапускаем функцию
main(PRICE)
else:
# Перезапускаем функцию
main(FIRST_PRICE)
''' З а п у с к '''
# Стартовые значения
START_PRICE = price(ASSET)
# Запускаем
main(START_PRICE)Заключение
Это самый простой Trade Bot, с самым легким алгоритмом. В моём случае код написан для торговли ETH/USDT, поменяв константы вы можете переделать код под нужный вам рынок. Средняя прибыль зависит от графика, если есть стремительный рост и такое же стремительное падение, то прибыль составляет 1 - 2% в день, в редких случаях можно уйти в минус с первоначального баланса.