Мануал по установке торгового "бота от Игоря". BTS/BitCHY

in #blockchain6 years ago (edited)

photo_2018-05-10_16-33-22.jpg

Доброго времени суток!

  В этом посте я постараюсь максимально просто рассказать весь процесс запуска торгового бота в сети Bitshares. Существует два варианта работы: своя нода + бот и публичная нода + бот. Лично я использую второй вариант, так как он прост и не надо поддерживать работу ноды.

Начну с варианта №2

  • Первое, что нам понадобится - это выделенный сервер (VPS), я брал тут, под работу только бота достаточно самых бюджетных характеристик сервера (мой стоит 2.99 евро в месяц).

  • Проходим регистрацию и создаём сервер с ОС Ubuntu 16.04 на борту.

  • Обновляем

apt-get update
apt-get upgrade
  • Устанавливаем pip3, python3 предустановлен
apt-get install python3-pip
  • Устанавливаем зависимости
apt-get install libffi-dev libssl-dev python3-dev
  • Устанавливаем библиотеку
pip3 install bitshares
  • Создадим wallet, для этого в редакторе nano открываем файл wallet.py
nano wallet.py
  • Вносим туда следующие строки
from bitshares import BitShares
bitshares = BitShares()
bitshares.wallet.create("supersecret-passphrase")
bitshares.wallet.unlock("supersecret-passphrase")
bitshares.wallet.addPrivateKey("5xxxxxxxxxxxxxxxxxxxx")

Где supersecret-passphrase - это пароль который вы придумываете сами, а "5xxxxxxxxxxxxxxxxxxxx" - ваш приватный WIF KEY от аккаунта в Bitshares (Аккаунт - права доступа - действующие права - кликнуть на ключ - показать приватный wif).

  • Сохраняем файл, закрываем редактор и запускаем wallet ОДИН раз, после чего этот файл стоит удалить!
python3 wallet.py
  • Создадим файл бота
nano 1percent.py
  • Скопируйте данный код и перенесите его в файл 1persent.py
# подключаем необходимые библиотеки для работы
from bitshares import BitShares
from bitshares.account import Account
from bitshares.asset import Asset
from bitshares.market import Market
from bitshares.amount import Amount
import time
import datetime

# функция выставления ордеров
def create_orders():

    # продаем 100 юаней
    # обязательно проверяем наличие этих юаней
    # иначе бот вылетит по ошибке и торговля встанет
    if account.balance(base) >= our_order:
        print(market.sell(our_price, our_order, order_livetime, False, our_account))

        # ставим задержку на выставление ордера
        time.sleep(15)

        # проверяем есть ли открытые ордера
        open_orders = market.accountopenorders(our_account)

        # проверяем, что наш ордер полностью сработал
        while True:
            # получаем кол-во ордеров
            count = len(open_orders)
            if count > 0:
                print('orders count is ', count)
                # получаем предыдущий ордер
                last_order = open_orders[count-1]

                currency = str(last_order['quote']).split(' ')[1]

                if (currency == 'CNY'):
                    break
            else:
                break       

        # получаем баланс в шарах
        balance = account.balance(quote)

        # обязательно!!! отнимаем 0.02 шары на комиссию для транзакций
        bts = balance.get('amount') - 0.02

        # находим цену откупа
        buy_price = bts / our_order2

        # откупаем 101 юань
        print(market.buy(buy_price, our_order2, order_livetime, False, our_account))

# конец функции выставления ордеров

# наша основная функция торговли

def trade():
    # получаем кол-во ордеров
    count = len(open_orders)

    # выводим кол-во ордеров на аккаунте
    print('orders =',count)

    # получаем предыдущий ордер
    prev_order = open_orders[count-1]
    # выводим ID ордера
    print(prev_order['id'])
    # выводим цену ордера
    print('цена ордера = ', prev_order['price'])

    # получаем цену ордера
    order_price = prev_order['price']

    # находим последнюю рыночную цену
    # берем именно highestBid, потому что latest иногда
    # показывает криво из-за округления 0.00000001 таких вот ордеров
    ticker = market.ticker()
    data = ticker.get('highestBid')
    latest = data.get('price')

    # выводим последнюю цену покупки
    print('highestBid = ', latest)
    # выводим на сколько упал рынок
    print('рынок упал на ', order_price/latest)

    # если рынок упал на 1.5% и больше
    if (order_price/latest) <= 0.985:
        print('рынок упал свыше 1.5%')

        # выставляем ордера
        create_orders()

# конец функции торговли

# отсюда начинается сама программа

# коннектимся к любимой ноде
bitshares = BitShares("wss://api-ru.bts.blckchnd.com")

# открываем свой локальный кошелек
bitshares.wallet.unlock("secretpass")

# размер ордера в bitCNY
our_order = 100.00
our_order2 = 101.00

# наша цена продажи
our_price = 0.000001

# время жизни ордера в секундах
order_livetime = 31536000

# наш аккаунт
our_account = "nickname"

# наш символ для торговли
our_symbol = "CNY"

# наша пара
base = Asset(our_symbol)
quote = Asset("BTS")

# выбираем рынок
market = Market(base, quote, bitshares_instance=bitshares)

# получаем аккаунт для работы бота
account = Account(our_account)
print('account =', account)

# запускаем бесконечный цикл
while True:
    # проверяем есть ли открытые ордера
    open_orders = market.accountopenorders(our_account)
    print(len(open_orders))

    # если нет ордеров, то продаем по рынку юани
    if len(open_orders) == 0:

        # выставляем ордера
        create_orders()

    # если есть уже хоть 1 ордер значит шара пошла вниз :)
    elif len(open_orders) > 0:

        # запускаем функцию торговли
        trade()

    # задержка в 30 секунд
    time.sleep(30) 

    # выводим текущую дату, чтобы видеть что бот еще жив и тп.
    datenow = str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    print(datenow)


Не забудьте изменить на свои данные строки: bitshares.wallet.unlock("supersecret-passphrase") и our_account = "accountname", а также, что на аккаунте должны быть минимум 100 BitCNY и 1 Bitshares.

  • Запускаем торгового бота
screen -dmS bot python3 1percent.py
  • Запустили бота в screen (screen - это отдельное окно и при закрытии сессии бот продолжит свою работу 24/7)

  • Проверить работу бота можно командой

screen -x bot
  • Выйти из screen не убивая его
Ctrl A+D

Если всё прошло правильно, то будет нечто такое

Вариант №1

Для наших целей статья №3 подойдёт очень хорошо. Так как нам не нужна полная нода, то требования к серверу не такие уж и серьёзные - естественно ubuntu 16.04, ОЗУ 8Гб, SSD 60Гб и выше.

  • Создали сервер и, сразу же после обмена ключами ssh, обновляемся
apt-get update
apt-get upgrade
  • Устанавливаем зависимости
apt-get install cmake make libbz2-dev libdb++-dev libdb-dev libssl-dev openssl libreadline-dev autoconf libtool git ntp libcurl4-openssl-dev g++ libcurl4-openssl-dev
  • Скачиваем исходники
git clone https://github.com/bitshares/bitshares-core.git
  • Переходим в директорию bitshares-core
cd bitshares-core
  • Обновляем модули
git submodule update --init --recursive
  • Собираем
cmake -DBOOST_ROOT="$BOOST_ROOT" -DCMAKE_BUILD_TYPE=Release .
  • Запускаем окончательную сборку
make
  • Теперь наступил момент запуска самой ноды
screen -dmS noda ./bitshare-core/programs/witness_node/witness_noda --data-dir data --rpc-endpoint "0.0.0.0:8090" --max-ops-per-account 1000 --partial-operations true --track-account “1.2.xxxxxxxx” --track-account “1.2.xxxxxxxx”

track-account “1.2.xxxxxxxx” - ваши личные id, посмотреть их можно в эксплорере в клиенте.

  • Далее нам надо в Боте переписать строку подключения бота к сети на свою ноду
bitshares = BitShares("wss://api.bts.blckchnd.com")

Вместо wss://api.bts.blckchnd.com вписываем ws://ваш публичный ip-адрес сервера:8090

  • Бот сможет работать с личной нодой только после полной синхронизации самой ноды с сетью (это ~10-12 часов)

Ну вот и всё готово, выбирайте вариант работы бота и больших профитов!


Для Вас старался @erikkartmen, спасибо за внимание!


Sort:  

сложнА..

Если по шагам пройти, то нет - максимально старался!))

у меня есть лицензия gunbot но нету денег для того чтобы им пользоваться) и к dex он версию пилить не будет(

Тогда ручками))

Coin Marketplace

STEEM 0.27
TRX 0.11
JST 0.032
BTC 64579.45
ETH 3101.05
USDT 1.00
SBD 3.83