iEXRates — курсы BestChange под контролем

Система, которая держит курсы обменника рядом с нужной позицией.

iEXRates собирает предложения BestChange, рассчитывает итоговые курсы по вашим правилам, следит за конкурентами, публикует TXT-файлы и показывает оператору, почему курс получился именно таким.

Модуль создан для обменников, которым важно не просто получить курс из BestChange, а управлять позицией, маржой, комиссиями, городами, исключениями, формулами и скоростью обновления на большом количестве направлений.

Стоимость
топ-1, топ-2, топ-3 и конкретные конкуренты теги, комиссии, шаги, округление и preview отдельный файл под каждый профиль быстрое обновление больших списков
100k+
направлений можно вести через серверную пагинацию и batch-обновления
2 контура
BestChange отдельно, внешние источники отдельно — в одной админке
24/7
живое состояние обновлений, инциденты, логи и свежесть TXT
Только для клиентов iEXExchanger

Проект подключается к действующей лицензии iEXExchanger и работает как дополнительный модуль к основной платформе.

Демо

Посмотрите короткое видео с демонстрацией iEXRates

В видео показана логика админки: профили, направления, формулы, контроль позиции, TXT-файлы, аналитика обновлений и рабочие экраны оператора.

Открыть демо в Telegram
BestChange профилиформулы и комиссиислежка за обменникомTXT-публикация
Главная идея

Это не таблица курсов, а рабочий центр управления рынком BestChange

Администратор задаёт профиль, направления и правила. Дальше система сама обновляет справочники, проверяет доступные пары, получает офферы, применяет формулы, защищает позицию и готовит файлы выдачи для сайта обменника.

Направления и города

Для наличных направлений город становится частью пары и TXT-кода, чтобы курс не смешивался с другими городами.

Фильтры офферов

Можно учитывать резерв, лимиты, метки обменников, black list, свой обменник и нулевые значения.

Слежка за обменником

Система умеет ориентироваться на конкретного конкурента и автоматически вставать выше или ниже него.

Что входит

Основные возможности iEXRates

01 · Профили

Профиль BestChange

Единая настройка языка, типа курса, интервала, таймаута, позиции по умолчанию, своего обменника и TXT-публикации.

API URL и зеркала общие, с пингом и приоритетом
ключи хранятся в базе и управляются из админки
каждый профиль получает отдельный TXT-файл
02 · Направления

Пары и массовые правила

Направления можно добавлять по одному или массово, группировать, фильтровать, менять позиции и шаги сразу по выбранным условиям.

группы направлений хранятся в базе
каждая вкладка запрашивает данные отдельно
массовые операции работают по серверному фильтру
03 · Расчёт

Trace каждого курса

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

понятное объяснение “как получился курс”
нулевые и некорректные офферы исключаются
история помогает разбирать спорные изменения
Формулы

Формулы как отдельный продукт внутри системы

Формула показывает доступные теги, объясняет каждый шаг расчёта и позволяет проверить результат до сохранения. Это удобно, когда курс должен учитывать не одну позицию, а несколько условий сразу.

Formula preview
[pos:3] + step_to_competitor - 0.15%
Позиция
#3
Конкурент
Обменник
Итог
0.06784261

Готовые стратегии

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

Формула вручную

Теги вставляются из подсказок, а preview показывает результат до применения к направлению.

Ограничения результата

Можно ограничить максимальный скачок, минимальный резерв, позицию и поведение, если данных нет.

Комиссии и поправки

Поддерживаются +1, -1, +1%, -1%, деление, формульные поправки и отдельные правила для внешних источников.

Слежка и комиссии

Курс можно вести за конкретным обменником, выше него или ниже

Для каждого направления можно выбрать обменник-ориентир, режим “встать выше” или “встать ниже”, минимальный шаг, лимит изменения, комиссию и fallback, если нужный конкурент исчез из выдачи.

пример правила
ОриентирОбменник · #3
Действиевстать выше на шаг
Комиссия-0.15%

Слежка за выбранным обменником

Направление может ориентироваться не только на позицию, но и на конкретный обменник из выдачи BestChange.

Встать выше или ниже

Можно настроить курс так, чтобы он постоянно был чуть выше выбранного конкурента или аккуратно ниже него.

Защита от скачков

Лимит изменения и антискачок не дают курсу резко уйти из-за случайного оффера или временной ошибки рынка.

Комиссии и поправки

Для курса можно задать +1, -1, +1%, -1%, /5, /5% или свою формулу, чтобы сразу учитывать маржу и расходы.

Фильтры по условиям

Правила могут учитывать позиции, резерв, лимиты, метки обменников, город и чёрные списки.

Понятный расчёт

Trace показывает, какой оффер выбран, какой шаг применён, где сработала комиссия и почему итог попал в TXT.

Пример работы

Как владелец настраивает направление

Один раз задаются правила, дальше iEXRates сам получает рынок, выбирает корректный оффер, применяет защиту и публикует итоговый курс.

1

Выбирается пара

Например, BTC на наличные RUB, с обязательным городом Москва.

2

Задаётся цель

Позиция #2, быть выше выбранного обменника или брать среднее по топ-10.

3

Применяются правила

Фильтры, резерв, лимиты, black list, комиссия, округление и защита от резких скачков.

4

Публикуется TXT

Готовый код вида BTC-CASHRUB_MSK попадает в файл профиля и доступен сайту.

Быстрое ядро

Обновление построено как конвейер, а не как один тяжёлый запрос

Go-ядро разделяет работу на этапы: справочники, проверка направлений, получение офферов, расчёт, защита позиции и генерация файлов. Это снижает задержки и позволяет масштабировать систему на тысячи пар.

dictionary.sync

Справочники

Валюты, города, обменники и метки обновляются на сервере и используются из локального хранилища.

presence.scan

Проверка направлений

Система может сначала проверить, какие пары реально существуют, чтобы не грузить лишние курсы.

rates.fetch

Получение офферов

URL/key pool, лимиты, повторы, кеш снимков и fallback помогают выдерживать нестабильность API.

rates.calculate

Расчёт курса

Формулы, позиции, комиссии, шаги и ограничения собираются в один понятный итоговый курс.

guard.apply

Защита позиции

Проверяется целевая позиция, конкурент, минимальный шаг и допустимое изменение.

txt.generate

Генерация файлов

TXT пересобирается только при изменениях, поэтому публикация остаётся быстрой.

Операционный центр

Логи, инциденты и аналитика показывают не “ошибку”, а причину

Если курс не обновился, оператор видит, что именно произошло: зеркало BestChange не ответило, ключ упёрся в лимит, направление устарело, TXT не успел собраться или формула дала запрещённый результат.

Скорость обновления

Показывается длительность обновления, количество успешных пар, необновлённые направления и скорость в секунду.

История и графики

Можно смотреть итоговый курс, raw rate, позицию, spread между местами и поведение конкурентов.

Инциденты

Проблема оформляется как понятная карточка: где упало, что было с ключом, URL, направлением и TXT.

Права и доступ

Вход по ключам, группы прав, пользователи и журнал действий помогают безопасно работать команде.

Аналитика

Видно, что обновилось, где задержка и почему курс изменился

Операционный центр показывает скорость обновления, свежесть TXT, состояние очередей, ошибки API, историю расчётов и качество каждого направления.

Обновлено
1166
Скорость
4 961/с
Успешность
100%
BTC → CASHRUB_MSK
позиция #2 · свой шаг · TXT готов
Live
Итоговый курс
4 414 387.0458
Ориентир
Обменник · #2
Дополнительные источники

BestChange остаётся основой, но курсы можно расширять внешними источниками

Для Binance, Bybit, WhiteBIT, Heleket, файловых и ручных курсов предусмотрены отдельные профили, собственные коды, комиссии, TXT-файлы и серверная пагинация.

[binance_usdt-btc]
готовый курс, обратный 1/курс или своя комиссия
можно в TXT
[bybit_usdt-btc]
готовый курс, обратный 1/курс или своя комиссия
можно в TXT
[whitebit_usdt-btc]
готовый курс, обратный 1/курс или своя комиссия
можно в TXT
[heleket_usdt-btc]
готовый курс, обратный 1/курс или своя комиссия
можно в TXT
[manual_usdt-btc]
готовый курс, обратный 1/курс или своя комиссия
можно в TXT
Под капотом

На чём построен iEXRates

iEXRates разделён на админку, API и отдельное Go-ядро. Админка не обращается к BestChange напрямую: она работает с готовыми данными из PostgreSQL, Redis и журналов, а обновление курсов выполняет серверный конвейер.

Frontend

Админка оператора

React/Vite SPA с i18n, TanStack Query, серверными таблицами, виртуальными списками и живыми операционными разделами.

React + TanStack Query
кеш запросов, обновления без перезагрузки и стабильная работа экранов
TanStack Table + Virtual
пагинация, фильтры и виртуальные списки для тысяч записей
Tailwind CSS + Vite
быстрая сборка и адаптивный интерфейс админки
TypeScript strict
строгая типизация форм, API-контрактов и состояния интерфейса
Backend

API, воркеры и очереди

NestJS 11 объединяет admin API, public API, настройки профилей, права доступа, scheduler, очередь задач и события для админки.

NestJS 11
единый API для профилей, направлений, логов, доступа и источников
PostgreSQL + Prisma ORM
основная база, строгие модели и миграции схемы
Redis
горячий кеш, live-состояние, блокировки и быстрые снимки
ClickHouse
быстрые журналы, история обновлений и аналитика событий
Infra

Self-hosted развёртывание

iEXRates разворачивается как отдельный серверный продукт: Go-ядро, Docker Compose, Nginx, PostgreSQL, Redis, ClickHouse и публичная выдача TXT-файлов.

Go
worker pool, batch-обновления, rate limit и атомарная генерация файлов
Docker Compose
единый запуск админки, API, engine, PostgreSQL, Redis, ClickHouse и Nginx
Nginx
проксирование API и публичная выдача TXT-файлов
Debian 12 / Ubuntu 22.04
рекомендованная база для установки на сервер
Готово для обменника

iEXRates закрывает всю цепочку: от BestChange до готового курса на сайте

Подключение настраивается под ваш обменник: профили, API-ключи, зеркала, направления, формулы, стратегия позиции, TXT-файлы, дополнительные источники и аналитика обновлений.