Личный btsbots
Бот заработал!
По крайней мере он создал ордера и ждет, когда их закроют.
Исходники я опять же открываю на 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 для получения отладочных сообщений-
Пробовать на свой страх и риск, за ваши монеты вы отвечаете сами. )) Помочь с установкой к сожалению сильно не смогу, из-за нехватки времени - сами разбирайтесь. Кое-какие технические навыки лучше иметь, что бы запустить бота. Бот скажем так, не для крипто-обывателей.
Удачи!