Торговый робот для децентрализованной биржи в блокчейн-платформе Erachain
Позволяет получать курсы обмена с разных бирж (настройка внутри кода), и выставлять на децентрализованную биржу Эрачейн свои заявки по заданному алгоритму.
В программе есть разные потоки, получающие курсы с бирж по заданным парам (курсовик - Rater) и потоки, осуществляющие торговлю по заданному алгоритму (трейдеры Trader)
Для работы бота нужно запустить на локальной машине полную ноду Erachain и открыть доступ по RPC (на локальный адрес 127.0.0.1) и задать пароль у кошелька более 8-ми символов.
Перезадать пароль для кошелька можно так:
- удалить из рабочей папки ноды папки walletKeys и dataWallet
- запустить ноду и восстановить по СИДу кошелек и задать нужный пароль
Скопируйте файл secret-keys-orig.json
в secret-keys.json
и задайте в нем ключи доступа:
- к кошельку ноды Erachain - в параметре
wallet
- к вашему аккаунту на metals-api.com - в параметре
metals-api.com
См. как Развернуть проект в IDEA
Скопируйте файл settings-orig.json
в settings.json
и задайте в нем нужные параметры:
- Для выбора нужной сети блокчейн - отладочная или боевая используйте
network
- Для запуска без запуска торговцев:
only_raters
: true
Лучше всего запускать run.bat - так как там вставлен циклический запуск и другие настройки
Логи см в папке logs
Нажмите в черном окошке, где крутится прога Crtl-C
Если доступа к полной ноде нет то прога выйдет сразу же.
Если курс для трейдера не найден (например связь с биржой пропала) трейдер снимет все заявки.
Файл настройки raters.json
содержит список курсовиков. Полный список есть в raters-orig.json
- скопируйте его в raters.json
.
Список курсовиков (настройка пар внутри кода):
static
(RaterStatic) - for static pricesbinance
(binance) - BTC / USD etc.bitforex
(RaterBitforexCom) - GOLD / USDcoinMarketCap
(RaterCoinMarketCapCom) - в разработкеcrocc-curse
(RaterCross) - задаем пару парlivecoin
(RaterLiveCoin) - за один запрос только одну паруlivecoinRUR
(RaterLiveCoinRUR) - за один запрос только одну паруmetals-api
(RaterMetalsAPI) - GOLD / USD и другие - по металламpolonex
(RaterPolonex) - за один запрос выбирает все пары - BTC / USDwex
(RaterWEX) - бывший BTC-e, сейчас не работает - BTC / RUR
Каждый курсовик использует АПИ соответствующей биржи. Так как данные бесплатные, не рекомендую чаще чем раз в 5-10 минут получать курсы
Файл настройки трейдеров traders.json
содержит список настроек, каждый элемент которого запускающий своего трейдера.
Причем трейдеры отличаются по названиям:
- Guard - страж позиции, держит заданные позиции в стакане относительно курса обмена с внешних источников. Нужно задавать источник курса и список ордеров с отступами по цене от него.
- GuardAbs - страж позиции с абсолютными значениями, то же что и Guard но отступы заданы в абсолютных значениях
- RandomHit - случайные покупки по заданной схеме и внешнему курсу с отступом от него на заданный сдвиг.
- RandomHitRand - тоже, но еще случайный объем в пределах 0...+50%.
- RandomHitSelf - случайные покупки по заявкам из стакана или между ними. Задавать внешний источник для курса не требуется.
- RandomHitSelfRand - тоже, но еще случайный объем в пределах 0...+50%.
- RandomHitSelfRandPrice - тоже, но еще случайно цена в пределах 1% по рынку меняется
Для торговцев RandomHit и подобных схема задается массивом массивов - чтобы сохранить порядок следования ключей
Все торговцы будут работать пока есть КУРС, если соответствующий Курсовик перестанет получать курсы то, трейдер снимает все заявки. Например если биржа дающая курс закрылась, то торговец снимет заявки чтобы не уйти в минус если цена уйдет не туда. Это не относится к Торговцам с приставкой Self
Примеры настроек:
[
{
"traderAddress": "7NhZBb8Ce1H2S2MkPerrMnKLZNf9ryNYtP",
"sleepTime": 200,
"cleanAllOnStart": true,
"haveAssetKey": 1106,
"wantAssetKey": 1108,
// нужный курсовик из списка:
"sourceExchange":"polonex",
"limitUP": "0.01",
"limitDown": "0.02",
"scheme": {
"1000":"0.1",
"100":"0.03",
"10":"0.001",
"-10":"0.001",
"-100":"0.03",
"-1000":"0.1"
}
},
...
{
"type": "RandomHitSelfRand",
"traderAddress": "77FrM7Y9CC17Lwo6Ku4U4pzXr8V9xtMGtn",
"startDelay": 10,
"sleepTime": 550,
"cleanAllOnStart": false,
"haveAssetKey": 1,
"wantAssetKey": 2,
"sourceExchange": "",
"scheme": [
["5", "20.0"],
["7", "10.0"],
["10", "5.0"],
["-10", "5.0"],
["-7", "10.0"],
["-5", "20.0"]
]
},
...
]
traderAddress - счет с котрого будут создаваться ордера, должен быть в вашем кошельке
sleepTime - время сна - лучше ставить не чаще чем один блок
cleanAllOnStart - при запуске очищать стокан от всех своих ордеров. Очень удобно если у вас слетела прога
haveAssetKey - номер актива в Erachain. Прога найдет его и возьмет Имя из блокчейна
wantAssetKey - номер актива в Erachain
sourceExchange - по курсу какого источника работаем
limitUP - если превышена разница вверх нового курса от старого, то переносим все заявки в стакане
limitDown - если превышена разница вних нового курса от старого, то переносим все заявки в стакане
scheme - схема заявок в стакане:
- Количество продажи/покупки. Минус у количества означает покупку.
- Отклонение к среднему курсу. Минус означает отклонение "по рынку". Например минус задаем для торговца RandomHit
Вы можете разрабатывать дальнейшие стратегии бота, создавая свои классы и внедряя их в org.erachain.dextrader.traders.TradersManager.start