Напрямки та міста
Для готівки місто стає частиною пари і TXT-коду, щоб курс не змішувався з іншими містами.
iEXRates збирає пропозиції BestChange, розраховує підсумкові курси за вашими правилами, стежить за конкурентами, публікує TXT-файли та показує оператору, чому курс вийшов саме таким.
Модуль створений для обмінників, яким важливо не просто отримати курс із BestChange, а керувати позицією, маржею, комісіями, містами, винятками, формулами та швидкістю оновлення на великій кількості напрямків.
топ-1, топ-2, топ-3 та конкретні конкуренти
теги, комісії, кроки, округлення та preview
окремий файл під кожен профіль
швидке оновлення великих списків
Головна ідея
Адміністратор задає профіль, напрямки та правила. Далі система сама оновлює довідники, перевіряє доступні пари, отримує оффери, застосовує формули, захищає позицію та готує файли видачі для сайту обмінника.
Для готівки місто стає частиною пари і TXT-коду, щоб курс не змішувався з іншими містами.
Можна враховувати резерв, ліміти, мітки обмінників, black list, свій обмінник та нульові значення.
Система вміє орієнтуватися на конкретного конкурента і автоматично вставати вище чи нижче за нього.
Що входить
Приклад роботи
Одного разу задаються правила, далі iEXRates сам отримує ринок, вибирає коректний оффер, застосовує захист та публікує підсумковий курс.
Наприклад, BTC на готівку RUB, з обов'язковим містом Москва.
Позиція #2, бути вищою за обраний обмінник або брати середнє по топ-10.
Фільтри, резерв, ліміти, black list, комісія, округлення та захист від різких стрибків.
Готовий код виду BTC-CASHRUB_MSK потрапляє у файл профілю та доступний сайту.
Формули
Формула показує доступні теги, пояснює кожен крок розрахунку та дозволяє перевірити результат до збереження. Це зручно, коли курс має враховувати не одну позицію, а кілька умов одразу.
приклад правила
[pos:3]
+ step_to_competitor
− 0.15%Стеження та комісії
Для кожного напряму можна вибрати обмінник-орієнтир, режим "встати вище" або "встати нижче", мінімальний крок, ліміт зміни, комісію та fallback, якщо потрібний конкурент зник з видачі.
приклад правила
Напрямок може орієнтуватися як на позицію, а й у конкретний обмінник з видачі BestChange.
Можна налаштувати курс так, щоб він постійно був трохи вищим за обраний конкурент або акуратно нижчий за нього.
Ліміт зміни та антистрибок не дають курсу різко піти через випадковий оффер або тимчасову помилку ринку.
Для курсу можна задати +1, -1, +1%, -1%, /5, /5% або свою формулу, щоб одразу враховувати маржу та витрати.
Правила можуть враховувати позиції, резерв, ліміти, позначки обмінників, місто та чорні списки.
Trace показує, який оффер обраний, який крок застосований, де спрацювала комісія і чому результат потрапив до TXT.
Аналітика
Операційний центр показує швидкість оновлення, свіжість TXT, стан черг, помилки API, історію розрахунків та якість кожного напряму.
Показується тривалість оновлення, кількість успішних пар, неоновлені напрямки та швидкість за секунду.
Можна дивитися підсумковий курс, raw rate, позицію, spread між місцями та поведінку конкурентів.
Проблема оформляється як зрозуміла картка: де впало, що було з ключем, URL, напрямом та TXT.
Вхід за ключами, групи прав, користувачі та журнал дій допомагають безпечно працювати команді.
Швидке ядро
Go-ядро поділяє роботу на етапи: довідники, перевірка напрямків, отримання офферів, розрахунок, захист позиції та генерація файлів. Це знижує затримки та дозволяє масштабувати систему на тисячі пар.
dictionary.sync
Валюти, міста, обмінники та мітки оновлюються на сервері та використовуються з локального сховища.
presence.scan
Система може спочатку перевірити, які пари реально існують, щоб не завантажувати зайві курси.
rates.fetch
URL/key pool, ліміти, повтори, кеш знімків та fallback допомагають витримувати нестабільність API.
rates.calculate
Формули, позиції, комісії, кроки та обмеження збираються в один зрозумілий підсумковий курс.
guard.apply
Перевіряється цільова позиція, конкурент, мінімальний крок та допустима зміна.
txt.generate
TXT перезбирається лише за змін, тому публікація залишається швидкою.
Додаткові джерела
Для Binance, Bybit, WhiteBIT, Heleket, файлових та ручних курсів передбачені окремі профілі, власні коди, комісії, TXT-файли та серверна пагінація.
[binance_usdt-btc][bybit_usdt-btc][whitebit_usdt-btc][heleket_usdt-btc][manual_usdt-btc]готовий курс, зворотний 1/курс або власна комісія
Корисні матеріали
Інструкції та допомога з налаштуванням вашого продукту.
Під капотом
iEXRates розділений на адмінку, API та окреме Go-ядро. Адмінка не звертається до BestChange безпосередньо: вона працює з готовими даними з PostgreSQL, Redis та журналів, а оновлення курсів виконує серверний конвеєр.
Frontend
React/Vite SPA з i18n, TanStack Query, серверними таблицями, віртуальними списками та живими операційними розділами.
кеш запитів, оновлення без перезавантаження та стабільна робота екранів
пагінація, фільтри та віртуальні списки для тисяч записів
швидка збірка та адаптивний інтерфейс адмінки
строга типізація форм, API-контрактів та стану інтерфейсу
Backend
NestJS 11 об'єднує admin API, public API, налаштування профілів, права доступу, scheduler, черга завдань та події для адмінки.
єдиний API для профілів, напрямків, логів, доступу та джерел
основна база, суворі моделі та міграції схеми
гарячий кеш, live-стан, блокування та швидкі знімки
швидкі журнали, історія оновлень та аналітика подій
Infra
iEXRates розгортається як окремий серверний продукт: Go-ядро, Docker Compose, Nginx, PostgreSQL, Redis, ClickHouse та публічна видача TXT-файлів.
worker pool, batch-оновлення, rate limit та атомарна генерація файлів
єдиний запуск адмінки, API, engine, PostgreSQL, Redis, ClickHouse та Nginx
проксіювання API та публічна видача TXT-файлів
рекомендована база для встановлення на сервер
Готово для обмінника
Підключення налаштовується під ваш обмінник: профілі, API-ключі, дзеркала, напрямки, формули, стратегія позиції, TXT-файли, додаткові джерела та аналітика оновлень.
Проєкт підключається до чинної ліцензії iEXExchanger та працює як додатковий модуль до основної платформи.