Торговый бот Btsnotifier

Торговый бот для биржи RuDEX.org

Описание

Решил добить бота для bitshares. И бот таки заработал. Я закрыл все окна с сайтом btsbots.com и все перевел на свой скрипт и он вроде бы работает и ведет себя аналогично btsbots.

Бот заработал!

Billionaire_Bot.jpg

По крайней мере он создал ордера и ждет, когда их закроют.

Исходники я опять же открываю на bitbucket.com

https://bitbucket.org/gropox/btsnotifier

Да, название не подходящее, изначально я хотел сделать бота, извещающего о закрытых ордерах. Но потом, ввиду приближающегося отпуска, я решил сделать бота аналогичного btsbots.com, что бы его можно запустить на сервере и не держать открытыми браузеры.

После небольшой тренировки на аналогичном боте для внутреннего рынка Голоса я начал писать бота для bitshares, что оказалось не так просто. Старший брат голоса несколько отличался, от голоса и стимита. Во первых приходится работать не с символьными именами операций и объектов, а с их id и просто номерами. Видимо изначально разработчики заботились о эффективности работы блокчейна и снижении объема данных хранимых в базе блокчейна.

Во вторых библиотека для bitshares оказалась не такой комфортной, как steem-js и golos-js. Да и времени, честно говоря разбираться не было. По началу у меня даже руки опустились, думал не получится побороть API bitshares в короткие сроки, но все же с божией помощью и отладочной консолью chrome и отслеживанием коммуникации rudex.org с нодой по вебсокетам мне все так пришло просветление и дело сдвинулось с мертвой точки.

В виду сжатых сроков, исходники все таки немного сумбурно организованы и мне пришлось отказаться от изначальной идеи об извещении о закрытых ордерах. Собственно это и не потребовалось, так как сайт rudex.org дает достаточно инфы, что бы отслеживать сразу несколько аккаунтов. (еще бы чуточку получше отображался на телефоне)

Установка

Собственно можно либо скачать скрипт в виде zip архива, либо клонировать репозиторий git утилитой

Для запуска понадобится node.js начиная с 7-й версии. Актуальна 8-я версия. Все должно одинаково работать, как под linux, так и под windows и макось (прости Господи)

В директории со скриптом выполните следующие команды, что бы установить необходимые библиотеки

npm install
npm install golos-js 

Последнее требуется из-за golos-addons которую я использовал при написании скрипта бота.

Конфигурация

В папке бота лежит пример конфигурационного файла config.json.example. Его надо скопировать или переименовать как config.json, и отредактировать под ваши нужны.

Пока что можно задать только API сервер, параметром ws. И одного или более ботов под разные пары активов.

Типичная конфигурация бота выглядит следующим образом

        {
            "name" : "g-ropox",
            "key" : "5xxx",
            "base" : {
                "asset" : "OPEN.ETH",
                "percent" : 1.5, 
                "max" : 0.01,
                "min" : 0.001,
                "reserve" : 0.05
            },
            "quote" : {
                "asset" : "BTS",
                "percent" : 1.5, 
                "max" : 5,
                "min" : 1,
                "reserve" : 1                
            }
        },

name и key понятно я надеюсь. Если нет, то лучше дальше не испытывать судьбу ))

base и quote задаются параметры для базового актива и (тут я долго думал как quote перевести) и для актива торгуемого относительно базового. Все аналогично экрану рынка по активам на том же rudex.org.

Тут каждый выбирает как кому удобнее и привычнее. Можно как базовый актив указать BTS, а можно наоборот OPEN.ETH. У меня к примеру базовым стоит OPEN.ETH, так как я изначально так выбрал на сайте и уже привык к ценам в районе 3000. В паре BTS — OPEN.BTC для меня привычнее наоборот, так как я пришел с другой биржи, где BTS относительно BTC торгуется. В конце концов «от перемены мест слагаемых сумма не меняется».

percent — это процент относительно верхней цены в стакане. Если это bid, то бот создаст ордер с на покупку с ценой на указанный процент ниже, чем самая высокая цена. Если это ask, то соответственно ордер на продажу будет создан с ценой на заданный процент выше, самой низкой цены продажи. Все аналогично btsbots.com.

Приведу пример на одном из моих ботов. У него установлен 1 процент для обоих случаев, продажи и покупки. Как видно ниже, на скриншоте, самое выгодное предложение на покупку 3521.96845. Сумма по которой бот должен выставить свой ордер вычисляется по следующей формуле.


price = top_price / (1 + percent / 100)
То-есть в нашем случае получается 3521.96845 / (1+1/100) = 3487,097475. На скриншоте правда как видно стоит ордер на покупку (зеленым) по цене 3487,07458. Но возможно на момент создания ордера, топовая цена была чуточку выше.

Аналогично и с ордерами на продажу. Берется ордер с самой низкой ценой продажи. В нашем случае это 3524.02185 и цена ордера вычисляется по формуле.


price = top_price * (1 + percent / 100)
Что в нашем случае 3524.02185 * (1+1/100) = 3559,2620685. То-есть на один процент выше самой низкой цены.

можно задать отрицательный процент, в этом случае бот выставит ордер на продажу по цене ниже самой выгодной. Таким образом можно бота заставить выставлять ордера на верху стакана.

Бот вычисляет периодически цену ордера и если разрыв в цене выставленного ордера с топовой, больше указанного процента, то бот отменяет ордер и создает ордер с новой ценой. Если указать слишком малый процент, то сделки могут совершаться слишком часто, что приведет к большим комиссионным В таком случае может быть выгодным приобрести пожизненную подписку на rudex.org, в этом случае 80% комиссионных будут возвращены с течением времени.

Сколько процентов выставлять зависит от ситуации на рынке, насколько часто происходят колебания рынка. Какой объем торговли. Я бы не советовал бы лезть этим вариантом бота на рынки с малым объемом. Подбирать надо самому по своим предпочтениям.

max — максимальная сумма ордера
min — минимальная сумма ордера
reserve — минимальная сумма на балансе, которую бот не имеет права использовать. Должна быть больше нуля, что бы было чем заплатить комиссионные, да и вообще, для бережливых.

Запуск

Запускается бот командой node btsnotifier.js

Можно добавить параметры debug и trace для получения отладочных сообщений-

Пробовать на свой страх и риск, за ваши монеты вы отвечаете сами. )) Помочь с установкой к сожалению сильно не смогу, из-за нехватки времени — сами разбирайтесь. Кое-какие технические навыки лучше иметь, что бы запустить бота. Бот скажем так, не для крипто-обывателей.

Удачи!

Источник


Здравствуйте, обновил торгового бота для bitshares сети. Ниже список обновлений.

Исходники

Прибрался в исходниках. Вернее вынес торговый функционал в отдельный класс Bot. Исходная версия была написана менее чем за неделю, не все было чудесно. Буду потихонечку убираться в исходниках. Это должно потом упростить развитие.

Watchdog

Добавил watchdog. По непонятным пока мне причинам, иногда бот зависает, если связь с сервером рвется. Почему-то просто перестает реагировать и используемая библиотека никак об этом не сообщает. Может и может, но я пока не разобрался. Сделал просто. По таймеру будет проверяться,  получает ли скрипт новые блоки или нет. Если в течении 9 секунд новых блоков не поступило, то скрипт будет полностью остановлен. Для запуска я использую pm2, который может перезапустить программу, если та по каким то причинам была остановлена. До этого я по крону перезапускал бота раз в несколько часов. Теперь надеюсь перерывов в работе не будет и бот не будет без нужды перезапускаться.

Brain

Добавил мозгов боту. Шутка конечно, мозгов у бота не прибавилось. Просто добавил новые параметры, для этого добавил новую секцию в конфигурационном файле. Так думаю будет проще добавлять параметры, не переделывая уже готовые части программы. Пришлось конечно переделать бота для этого.
Вот так выглядит новая секция

            "brain" : {
                "greedy" : {
                    "enabled" : true,
                    "base" : 30,
                    "quote" : 30
                },
                "limits" : {
                    "enabled" : false,
                    "bid" :  {
                        "min" : 0.0000305,
                        "max" : 0.00003202 
                    },
                    "ask": {
                        "min": 0.00001,
                        "max": 0.00003400
                    }
                },
                "basePrice" : {
                    "enabled" : true,
                    "strategy" : "avg",
                    "offset" : 5,
                    "count" : 3
                }
            }

 

greedy

Если включить greedy и задать проценты для base и quote, то бот будет резервировать ликвидные токены на сумму заданную в процентах от общей суммы токенов. Если сумма на счету будет увеличиваться, то и зарезервированная сумма будет соответственно увеличена. При уменьшении суммы токенов на счету, зарезервированная сумма не будет уменьшаться. Сделано в надежде, что бот будет накапливать токены, а не раздавать, при следующем падении или повышении.

limits

В секции limits можно задать границы в виде фиксированных цен. Если вычисленная цена ордера выйдет за пределы указанных границ, то цена будет установлена либо на минимальную или на максимальную заданную величину. Возможно это будет полезно на парах ассетов представляющих один и тот же актив. К примеру bitRUBLE и escrow.RUBLE. Можно задать максимальную цену в 1, которую бот не будет превышать.
Если вычисленная базовая (см. basePrice) цена, выйдет за пределы заданных границ, бот не будет больше создавать ордера, пока цена не вернется в заданные пределы.

basePrice

basePrice устанавливает, как будет определяться базовая цена, относительно которой будет вычисляться цена ордера. Это было сделано для того, чтобы не дать манипулировать роботом. До этого можно было выманивать бота на слабых рынках в верх стакана и выкупать у него ассеты по заниженной цене.  Для этого можно было выставить ордер с самой низкой, возможной ценой, дождаться, когда бот переставит ордер повыше, затем закрыть выкупить ассеты у бота.
Параметр strategy можно установить в одно из следующих значений.
«top» — эта стратегия по умолчанию, что использовалась до сих пор. В качестве базовой цены бралась цена ордера сверху стакана.
«avg» — в данном случае базовая цена будет определяться как средняя цена первых N ордеров сверху стакана. Количество ордеров задается дополнительным параметром «count».
«offset» — при включенной стратегии offset в качестве базовой цены будет браться цена Nth ордера сверху. Номер ордера задается дополнительным параметром «offset».
 
Предупреждаю сразу, я еще не оттестировал все, пользуйтейсь на свой страх и риск. Деньги ваши, отвественность ваша!
Исходники торгового бота можно взять здесь

 

Источник

 

Ссылки

Пост на Голосе: golos.io/@ropox/lichnyi-btsbots
Обновление: golos.io/@ropox/btsnotifier

Исходный код на BitBucket

Отзывы

Отзывов пока нет.

Будьте первым, кто оставил отзыв на “Торговый бот Btsnotifier”

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Возможно Вас также заинтересует…

  • Торговый бот Torgobot

    Подробнее