Бот заработал!
По крайней мере он создал ордера и ждет, когда их закроют.
Исходники я опять же открываю на 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 для получения отладочных сообщений-
Пробовать на свой страх и риск, за ваши монеты вы отвечаете сами. )) Помочь с установкой к сожалению сильно не смогу, из-за нехватки времени - сами разбирайтесь. Кое-какие технические навыки лучше иметь, что бы запустить бота. Бот скажем так, не для крипто-обывателей.
Удачи!
Надо оставить бота торговать на время отпуска. Возможно он принесет лютый профит
Да, таков план, вернутся богатым с отпуска )
Да, приходится переключать мобильный браузер в режим "Полная версия сайта" (Яндекс.Браузер)
Получено 0.100 Сила Голоса от dobrobot
Спасибо глянем
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
yefet, losos, litrbooh, littleboo, ianboil, mishka, ukrainian, neo, mir, max-max, niiu, oleg257, larissa, vik, tristamoff, forbon21, shuler, brovaryleaks, vadbars, arsar, vasilisapor2, nefer, nikalaich, voltash, tnam0rken, sharps, asuleymanov, bystree, arturio777, yuriks2000, newodin, vika-teplo, zazazum, borisss, baltiyka, felicita, tatyanamishenko, lushaya, graff0x, sareon, manavendra, m1m2, mr-nikola, kertar, novy, lokkie, dim447, ieshua, student61, zhenek, abloud, wedge, chugoi, gbot, verdon, sansey, chupaaa, evgeniy1989
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас на странице https://golos.io/~witnesses, вот так:
спасибо вам!
интересно. если получится что годное, то буду использовать. жду дальнейших новостей по боту
Подозреваю, что "процент" ты задаёшь в долях, а не в процентах. Т.е. 0,001 - это 0,1%. Если так, то это стоит упомянуть, наверное.
Да нет, в процентах. Я обновил пост, добавил примеры с вычислениями и формулы.
тогда в примере кода, получается, стоит -0,001%. это какая-то совсем бессмысленная величина в данном случае. написал бы "-1" )
да, поправлю, это я тестировал бота, что бы он ордера сверху ставил в стакане и что бы они чаще закрывались.
nice post @ropox