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% в день, в редких случаях можно уйти в минус с первоначального баланса.