Directions and cities
For cash directions the city becomes part of the pair and TXT code so rates do not mix across cities.
iEXRates collects BestChange offers, calculates final rates by your rules, tracks competitors, publishes TXT files, and shows the operator exactly why a rate was selected.
The module is designed for exchangers that need more than pulling a BestChange rate: position control, margin, commissions, cities, exclusions, formulas, and fast updates across many directions.
This project connects to an active iEXExchanger license and works as an additional module for the core platform.
The video shows admin workflows: profiles, directions, formulas, position control, TXT files, update analytics, and operator screens.
The administrator configures a profile, directions, and rules. The system then updates dictionaries, checks available pairs, receives offers, applies formulas, protects the position, and prepares public files for the exchanger website.
For cash directions the city becomes part of the pair and TXT code so rates do not mix across cities.
Reserve, limits, exchanger marks, blocklists, own exchanger and zero values can be accounted for.
The system can follow a selected competitor and automatically stay above or below it.
A single place for language, rate type, interval, timeout, default position, own exchanger and TXT publishing settings.
Directions can be added one by one or in bulk, grouped, filtered, and updated by selected conditions.
Details show base offer, position, exchanger, formula, step, fee, limits and final value for output.
The formula editor shows available tags, explains every calculation step, and allows checking the result before saving. This is useful when a rate must account for several conditions at once.
Best rate, exact position, position range, average of several places, own exchanger or competitor.
Tags are inserted from hints and preview shows the result before applying it to a direction.
You can limit maximum jump, minimum reserve, position and behavior when data is missing.
+1, -1, +1%, -1%, division, formula adjustments and separate rules for external sources are supported.
For every direction you can choose a target exchanger, above or below mode, minimum step, change limit, commission, and fallback if the target competitor disappears from the list.
A direction can target not only a position, but a specific exchanger from the BestChange list.
You can keep the rate slightly above the selected competitor or safely below it.
Change limits and anti-jump rules prevent sudden moves from random offers or temporary market errors.
A rate can use +1, -1, +1%, -1%, /5, /5%, or a custom formula to include margin and costs.
Rules can account for positions, reserve, limits, exchanger marks, city, and blocklists.
Trace shows the selected offer, applied step, commission point, and why the final value reached TXT.
Rules are configured once. iEXRates then receives the market, selects the correct offer, applies protection, and publishes the final rate.
For example BTC to cash RUB, with Moscow as a required city.
Position #2, stay above a selected exchanger, or average top-10.
Filters, reserve, limits, blocklist, fee, rounding and jump protection.
A ready code like BTC-CASHRUB_MSK is written to the profile file and available to the site.
The Go engine splits work into stages: dictionaries, direction checks, offer fetching, calculation, position guard, and file generation. This reduces latency and scales to thousands of pairs.
Currencies, cities, exchangers and marks update on the server and are read locally.
The system can first check which pairs actually exist to avoid unnecessary rate loading.
URL/key pool, limits, retries, snapshot cache and fallback help tolerate API instability.
Formulas, positions, fees, steps and limits produce one explainable final rate.
Target position, competitor, minimum step and allowed change are checked.
TXT is rebuilt only on changes, keeping publication fast.
If a rate did not update, the operator sees what happened: a BestChange mirror failed, a key hit a limit, a direction became stale, TXT was delayed, or a formula produced a forbidden result.
Shows update duration, successful pairs, stale directions and per-second speed.
You can inspect final rate, raw rate, position, spread between places and competitor behavior.
A problem becomes a clear card: where it failed, what happened to the key, URL, direction and TXT.
Key login, permission groups, users and audit trail help the team work safely.
The operations center shows update speed, TXT freshness, queue health, API errors, calculation history, and direction quality.
Binance, Bybit, WhiteBIT, Heleket, file, and manual rates can use separate profiles, own codes, fees, TXT files, and server-side pagination.
iEXRates is split into an admin panel, API, and a separate Go engine. The admin panel does not call BestChange directly: it works with prepared data from PostgreSQL, Redis, and logs, while server-side workers update rates.
React/Vite SPA with i18n, TanStack Query, server-side tables, virtual lists, and live operations screens.
NestJS 11 powers the admin API, public API, profile settings, access control, scheduler, job queue, and admin events.
iEXRates is deployed as a standalone server product: Go engine, Docker Compose, Nginx, PostgreSQL, Redis, ClickHouse, and public TXT file delivery.
Setup is tailored to your exchanger: profiles, API keys, mirrors, directions, formulas, position strategy, TXT files, additional sources, and update analytics.