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

in blockchain •  7 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, спасибо за внимание!


Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

сложнА..

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

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

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