Схемы заработка
October 16, 2020

Crypto Trade бот на Python

SKAM INDUSTRY

⚠️ Дисклеймер
Статья написана с познавательной и ознакомительной целью, мы не призываем читателей к запрещенным законодательством действиям, а также не создаём пропаганду. Мы никого ни к чему не призываем! Вся информация представленная нами — это фантазия автора, выдумка, сон, вымысел. Данный материал не имеет ни какого отношения к реальности, все совпадения — случайность. Автор материала не несёт ответственности за ваши действия. Все персонажи и описываемые события являются вымышленными.

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



👇👇👇👇👇👇👇👇👇
➖➖➖➖➖➖➖➖➖➖➖➖➖➖
SKAM INDUSTRY
🤓