Здравствуйте, обновил торгового бота для 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”
Предупреждаю сразу, я еще не оттестировал все, пользуйтейсь на свой страх и риск. Деньги ваши, отвественность ваша!
Исходники торгового бота можно взять здесь