Налаштування торгового бота у хмарі (AWS, DigitalOcean, Hetzner)

Бот втрачає ордери під час обриву зв’язку, а простій у години волатильності обертається пропущеними угодами. Ми налаштовуємо торгових ботів на хмарних серверах під ключ: підбираємо конфігурацію, розгортаємо, налаштовуємо контроль відмов і передаємо регламенти. Виведення бота в робочий режим займає в рази менше часу.
Часті запитання

Налаштування торгового бота: де ламається інфраструктура

Торговий бот на сервері — це процес із відкритими позиціями в реальному часі: незакрита угода живе рівно до наступного мережевого розриву.

Обрив зв'язку з біржею приходить у найневдаліший момент — на різкому русі, коли заявка вже пішла, а підтвердження не повернулося, і бот не знає, чи існує ордер.

Друга точка відмови — перезапуск процесу. Планове оновлення, помилка конфігурації, вичерпання пам'яті: якщо стан позицій живе лише в оперативній пам'яті, втрата ордера при збої майже неминуча.

Після старту бот бачить залишок на рахунку інакше, ніж біржа, і перші хвилини торгує за неправильною картиною.

Третя — ліміти частоти запитів. На зростанні волатильності потік запитів зростає, біржа відповідає відмовами, частина заявок відхиляється. Простій бота вимірюється не часом падіння, а часом роботи наосліп, коли бот вважає позицію відкритою, а її вже закрив стоп.

Четверта — відсутність резервного вузла й логування. Один сервер, немає сліду про відмови — і розбір інциденту перетворюється на здогади. Налаштування торгового бота починається з того, що кожна з цих точок закривається до першого запуску: розбираємо, як це влаштовано.

Вимірюваний ефект налаштування: відгук, простій, відновлення

Час реакції на ринкову подію змінюється першим. На локальній машині тік оброблявся із затримкою в кілька секунд: заважав нестабільний канал, фонові процеси, черга заявок на одному ядрі.

У хмарі, у зоні AWS, відгук укладається в частки секунди — у новинні імпульси, коли ціна йде на 2–3% за секунди, бот встигає виставити й зняти заявку без прослизання.

Простій торгового бота вимірюється окремо. Падіння домашнього провайдера або відключення живлення давали 6–8 годин без торгівлі на місяць — як правило, у найволатильніші дні.

Автоматичний перезапуск процесу за правилом «немає ознак життя N циклів — піднімаємо знову» скорочує незапланований простій до 10–15 хвилин на місяць.

Час відновлення задає не швидкість перезапуску, а цілісність стану.

Знімки диска за розкладом і журнал ордерів дозволяють зібрати позиції заново та звірити їх із біржею: 30–40 хвилин ручної звірки з ризиком задвоїти ордер перетворюються на 3–5 хвилин автоматичного прогону зі звітом про розбіжності.

Закривається й клас відмов, який раніше просто не відстежувався: розсинхрон стану з біржею після часткового виконання, завислий без перезапуску процес, єдина точка у вигляді однієї машини й одного каналу.

Частка втрачених із технічних причин ордерів у спостережуваних періодах прямує до нуля — збій або не дає простою, або видно в моменті.

Режими розміщення: сервер, контейнер, кластер

Вибір майданчика визначається трьома речами: скільки стратегій крутиться одночасно, наскільки критична затримка між сигналом і ордером та що відбувається при падінні вузла. Тому розміщення торгового бота — це не «де дешевше», а який клас відмов ви готові прийняти.

Варіант Коли підходить Обмеження
Орендований сервер (віртуальна машина) Одна-дві стратегії, ручне керування, швидке введення в експлуатацію Автоперезапуск і резервний вузол налаштовуються вручну, простій на час оновлення ядра
Виділений хост Чутливість до затримки виконання, висока частота запитів до біржі Довге введення в експлуатацію, надлишкова потужність під невелику кількість стратегій
Контейнерний майданчик Кілька стратегій із різними залежностями, часті релізи Потрібні ліміти за пам'яттю та зовнішнє сховище для стану й ключів
Керований кластер Відмовостійкий кластер, регламент доступності, кілька вузлів Складніше налагодження, потрібні маніфести, політики й спостережуваність
Локальна машина Налагодження логіки, історичні прогони, тестові сценарії Залежить від домашнього каналу й живлення, для реальних ордерів непридатна

Перехід між варіантами не вимагає переписувати стратегію: логіка сигналів, ризик-контроль і робота з біржовим програмним інтерфейсом виносяться в окремий шар, а розміщення стає змінним параметром.

На контейнерному майданчику це дає швидкий відкат до попереднього образу, у кластері — автоматичний перезапуск пода на іншому вузлі та резервний вузол без ручного втручання.

Для оренди сервера під бота ми окремо прописуємо health-check, автопідйом процесу й винесення стану на зовнішній диск, щоб падіння вузла не означало втрату позицій.

Порядок робіт: аудит, схема, розгортання, перевірка

Розгортання торгового бота — це не копіювання файлів на сервер, а послідовність кроків із перевіркою на кожному: логіка працює з реальними заявками, і помилка на цьому рівні обходиться дорожче, ніж час, витрачений на підготовку. Порядок нижче однаковий і для нового бота, і для перенесення вже працюючого.

  1. Аудит схеми бота. Розбираємо, звідки приходять ринкові дані, як формуються й надсилаються заявки, де зберігаються ключі доступу та стан позицій. Результат — карта точок відмови: обрив зв'язку з біржею, розсинхронізація часу, повторне надсилання заявки після перезапуску.
  2. План розгортання. Вибираємо майданчик під навантаження й вимоги до затримки, визначаємо схему ізоляції процесів, розподіл прав, порядок роботи із секретами та резервне копіювання стану.
  3. Налаштування середовища. Ключі доступу випускаємо з мінімально потрібними правами й без виведення коштів, виносимо параметри у змінні середовища, синхронізуємо час, задаємо ліміти ресурсів, щоб бот не витісняв сусідні сервіси.
  4. Тестовий контур. Прогоняємо стратегію на історичних даних і на тестовому контурі біржі, потім — на мінімальних обсягах. Окремо перевіряємо сценарії збою: втрата зв'язку, відхилена заявка, часткове виконання.
  5. Контроль стану й захист. Налаштовуємо журнали й метрики, оповіщення про розбіжність позиції з біржею та аварійну зупинку за заданими умовами — вона спрацьовує без участі людини.
  6. Передача в експлуатацію. Віддаємо документацію щодо середовища, регламент оновлень і перезапуску, схему доступу для вашої команди та порядок відкату на попередню робочу конфігурацію.

Комплект передачі: конфігурації, схеми, регламенти

Комплект передачі збираємо так, щоб ваша команда могла підняти й супроводжувати бота без нашої участі. Усе, що входило в налаштування торгового бота на хмарних майданчиках, лягає в репозиторій і базу знань, а не в листування й не в голову окремого інженера. Нижче — що саме залишається у вас на руках.

  • Файли конфігурації — параметри запуску, торгові пари, ліміти на позицію й добовий обіг, адреси біржових інтерфейсів; версіонуються, відкат до попереднього набору займає хвилини.
  • Схема інфраструктури — задіяні вузли, зв'язки між ними, точки відмови, маршрути метрик і логів, порядок переходу на резервний вузол.
  • Права доступу до ключів — матриця ролей, роздільні ключі на читання й на торгівлю, вимкнене право виведення коштів, порядок ротації та місце зберігання секретів.
  • Регламент чергування — хто й у які години відповідає на оповіщення, граничний час реакції, порядок екстреної зупинки бота.
  • Документація на бота — логіка, підтримувані режими, перевірки перед стартом, розшифрування типових помилок за записами в логах.
  • Інструкції із запуску та відновлення — розгортання з нуля, підйом після збою вузла, перенесення на інший хмарний майданчик.
  • Чек-лист приймання — сценарії, за якими ви перевіряєте працездатність своїми руками.

Комплект вважаємо переданим, коли ваш інженер піднімає бота за інструкцією з нуля й відновлює роботу після навмисно погашеного вузла — без звернення до нас.

Кейс: бот перестав втрачати ордери при збоях

Що було

Бот торгував з однієї віртуальної машини, а чергу ордерів тримав у пам'яті процесу: знімок на диск ішов раз на кілька хвилин.

Перезапуск або переїзд машини на інший фізичний хост стирав усе, що не встигло зберегтися, — за місяць набиралося 12–15 збоїв, 6–8 із них із втратою ордерів.

Відновлення йшло вручну: звірка позицій із біржею за журналами, до 40 хвилин простою та частина угод за ціною, гіршою за заплановану.

Що змінили у схемі

Перевели бота на дві ноди Hetzner у різних зонах доступності: стан черги пишеться в журнал синхронно, до підтвердження від біржі, а на кожен ордер ставиться унікальний ключ — повтор при обриві зв'язку не створює дубль.

Перемикання на резерв автоматичне, за перевіркою доступності, близько десяти секунд; зависле з'єднання з біржею перезапускає сторожовий процес, а повтори йдуть з обмеженням частоти, щоб не потрапити під блокування за лімітами запитів.

Що стало

Втрачених ордерів — нуль: кожен або підтверджений, або безпечно скасований за ключем. Кількість збоїв упала з 12–15 до 1–2 на місяць, простій скоротився з 40 хвилин до секунд, а розбіжність позицій із біржею, яку раніше вичищали вручну, більше не виникає.

Відмови перестали бути регулярними: налаштування бота тепер зводиться до планових оновлень, а не до нічних розборів інцидентів.

Технічні сумніви: зв'язок, ключі, ліміти, надійність

Інженерні сумніви щодо бота зводяться до чотирьох вузлів: де лежать ключі біржі, як не впертися в ліміти запитів, що відбувається при обриві каналу зв'язку з біржею та як дізнатися про збій раніше, ніж він стане збитком. Нижче — короткі відповіді, як це влаштовано в наших конфігураціях.

Як зберігаються ключі доступу до біржі?

Ключ створюється з правом торгівлі та без права виведення коштів — це відсікає найдорожчий клас втрат. Сам ключ лежить у сховищі секретів хмарного провайдера й підставляється в середовище процесу при старті; у файлах конфігурації, образах і системі контролю версій його немає.

Доступ до секрету виданий окремій ролі та читається за журналом, ротація — при зміні складу команди або будь-якій підозрі на витік.

Що буде, якщо бот упреться в ліміти запитів біржі?

Ліміти рахуються і на IP, і на ключ, тому бюджет запитів планується під стратегію заздалегідь: довідники кешуються, баланс і позиції запитуються пачками, потік ордерів іде через чергу з обмеженням частоти.

При відповіді біржі про обмеження бот іде в паузу з наростаючим інтервалом, а не повторює запит — інакше тимчасове блокування перетворюється на тривале.

Канал до біржі обірвався — бот наторгує зайвого?

Потік котирувань може завмерти мовчки, тому тримаємо heartbeat і реконект із відновленням підписки, а після перепідключення звіряємо локальний стан із біржовим.

Ордери позначаються власними ідентифікаторами, тож повторне надсилання не створює дублі, а перезапуск процесу продовжує роботу з останнього підтвердженого стану.

Як влаштований моніторинг бота та повідомлення?

Знімаємо затримку потоку, частку відмов, розбіжність між локальними й біржовими позиціями та час простою. Пороги налаштовуються під стратегію: алерт приходить у робочий месенджер, а окремий сторожовий сигнал ловить ситуацію, коли процес живий, але дані не оновлюються. Далі — безпечний режим: зупинка відкриття нових заявок або зняття активних, на ваш вибір.

Обговоримо задачу — повернемося з оцінкою та планом робіт

Налаштування торгового бота — робота, де помилка в конфігурації видна відразу за угодами: розрив зв'язку з біржею вночі, втрачений стоп або дублюючий ордер коштують дорожче за саму інфраструктуру.

Щоб повернутися з оцінкою робіт і планом впровадження, а не загальними словами, нам потрібно побачити вашу схему цілком.

Надішліть щодо задачі:

  • Опис стратегії: логіка входу й виходу, робочі інтервали, набір інструментів, ліміти за позицією та ризиком на угоду.
  • Поточну схему запуску: де бот працює зараз, які є скрипти й файли налаштувань, що ви робите руками при перезапуску.
  • Перелік майданчиків і типів рахунків: спотові, строкові, тестові контури бірж, а також як зберігаються ключі доступу.
  • Вимоги до відмовостійкості: допустимий простій, чи потрібна гаряча заміна вузла, поведінка бота при обриві зв'язку з майданчиком.
  • Режим чергування: хто й як отримує повідомлення, чи потрібна цілодобова реакція або достатньо робочих годин.
  • Обмеження щодо розміщення: вимоги до юрисдикції, резервного копіювання стану та порядку доступів для наших інженерів.

Із цим набором ми збираємо план впровадження: переносимо бота на хмарний контур, розводимо секрети й збірку за середовищами, налаштовуємо моніторинг і автоматичний перезапуск, прогоняємо на тестовому контурі й лише потім виконуємо запуск бота в роботу. Опишіть задачу — повернемося з оцінкою та планом робіт.

Бот на сервері чи на домашній машині: що вибрати?

Якщо бот торгує постійно, бот на домашній машині — найслабший елемент схеми. Локальний запуск бота зручний, поки ви налагоджуєте логіку, але щойно позиції відкриваються без вашої участі, будь-яка пауза перетворюється на незакриту угоду.

Тому домашня машина залишається інструментом розробки, а робочий контур живе на серверному майданчику.

Ризики домашнього розміщення складаються з побутових дрібниць. Перезавантаження після оновлення системи, сплячий режим, перебої живлення, обрив каналу в провайдера, динамічна адреса за роутером — кожна з цих подій зупиняє процес.

Диск без резерву й знімків стану означає, що після збою ви відновлюєте вручну і самого бота, і історію ордерів.

На виділеному майданчику ці точки відмови закриваються окремо: процес піднімається автоматично після перезапуску, знімок повертає конфігурацію й стан до останньої робочої точки, зовнішній моніторинг повідомляє про падіння, а доступ за ключами обмежує коло людей із правами на торгові операції.

Локальний запуск при цьому не стає зайвим. Прогін стратегії на історичних даних, перевірка логіки на тестовому контурі, підготовка конфігурації — це швидше робити на своїй машині, де є прямий доступ до логів.

Окремий випадок — вимоги до зберігання ключів: якщо політика забороняє виносити їх на чужий майданчик, частина контуру залишається локальною.

Різниця проявляється не у швидкості угод, а в передбачуваності: домашня машина дає зручність налагодження, серверний майданчик — безперервність.

Робоча схема зазвичай гібридна — логіка готується локально, торгова частина працює на майданчику, а перенесення конфігурації між ними описане й повторюване.

Напрямки блокчейн-розробки

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1141