> For the complete documentation index, see [llms.txt](https://docs.iexexchanger.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.iexexchanger.com/help-center/ai-base/kursy/formula-rates-complete-guide.md).

# Полная инструкция по формулам курсов

## Для чего нужен раздел

Формулы курсов нужны, когда обычного ручного курса или одного источника недостаточно. С помощью формулы можно собрать итоговый курс из нескольких источников, добавить маржу, сделать запасной источник, ограничить курс снизу и сверху, округлить результат, использовать коэффициенты и настроить отдельную логику для каждой пары.

Простыми словами: формула — это правило, по которому обменник считает курс для направления. После расчета формулу можно выбрать в направлении обмена как источник курса.

## Когда использовать формулы

| Ситуация                                              | Что лучше использовать                        | Пример                                  |
| ----------------------------------------------------- | --------------------------------------------- | --------------------------------------- |
| Нужен простой фиксированный курс                      | Ручной курс в направлении                     | Редкая пара, которую меняют вручную     |
| Нужно добавить небольшой процент к готовому курсу     | Корректировка направления или простая формула | `[binance_btc-usdt] * 1.01`             |
| Нужно считать криптовалюту через промежуточную валюту | Формулу с умножением источников               | BTC - RUB через BTC - USDT и USDT - RUB |
| Один источник иногда не отвечает                      | `fallback` или `priority_rate`                | Взять Binance, если нет — Bybit         |
| Нужно сгладить скачки рынка                           | `avg`, `min`, `max`, BestChange top N         | Среднее из нескольких источников        |
| Нужно держать курс в пределах                         | `limit`                                       | Не ниже 90 и не выше 120                |
| Одинаковая маржа используется в нескольких формулах   | Коэффициент                                   | `[index_margin-btc]`                    |
| Нужно быстро менять маржу сразу в нескольких формулах | Коэффициент вместо числа в каждой формуле     | Менять 1.015 в одном месте              |
| Нужна сложная логика по суммам или условиям           | Формула с `if`, `threshold`, `limit`          | Разная маржа при разных рынках          |

## Главные понятия

| Понятие             | Что означает                                                 | Пример                                                             |
| ------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------ |
| Формула             | Математическое правило расчета курса                         | `[binance_btc-usdt] * 1.01`                                        |
| Тег                 | Готовое значение курса или коэффициента в квадратных скобках | `[binance_btc-usdt]`                                               |
| Источник            | Откуда берется исходный курс                                 | Binance, BestChange, файл, конкурент                               |
| Коэффициент         | Число или шаблон, который можно переиспользовать             | `[index_margin-btc]`                                               |
| Preview             | Тестовый расчет до сохранения                                | Показывает результат и значения тегов                              |
| Знаки после запятой | Сколько знаков хранить или показывать в результате           | 2 для RUB, 8 для BTC                                               |
| Статус              | Включена ли формула                                          | Выключенная формула не должна использоваться в рабочем направлении |
| История             | Изменения результата формулы                                 | Помогает понять, когда курс изменился                              |

## Поля и настройки формулы

| Поле / настройка            | Что означает                                  | Как правильно заполнять                                                  | Важно знать                                                      |
| --------------------------- | --------------------------------------------- | ------------------------------------------------------------------------ | ---------------------------------------------------------------- |
| Название                    | Понятное имя формулы в админке                | Пишите по смыслу пары и рынка: "BTC - RUB через USDT с маржей 1 процент" | Хорошее название помогает не перепутать рабочие формулы          |
| Код или алиас               | Короткое имя формулы                          | Используйте понятные латинские слова без пробелов, если поле доступно    | Не меняйте код без необходимости, если формула уже используется  |
| Формула                     | Само правило расчета курса                    | Вставляйте теги из каталога и добавляйте математические действия         | Не набирайте теги по памяти, одна ошибка в букве даст 0          |
| Статус                      | Включена ли формула                           | Включайте только после тестового расчета                                 | Если формула выключена, направление может не получать курс       |
| Точность                    | Сколько знаков после запятой оставить         | Для фиата обычно 2, для криптовалюты 6-8                                 | Слишком грубое округление может испортить обратные пары          |
| Описание                    | Заметка для администратора                    | Кратко запишите, откуда берется курс и какая маржа применяется           | Полезно для поддержки и будущей проверки                         |
| Preview или тестовый расчет | Проверка формулы до применения                | Сравните итог с ручным расчетом на простой сумме                         | Если preview уже неверный, не привязывайте формулу к направлению |
| Каталог тегов               | Список доступных источников и коэффициентов   | Копируйте тег целиком вместе с квадратными скобками                      | Если тега нет в каталоге, формула не сможет взять значение       |
| Ошибка расчета              | Признак, что формула не посчиталась корректно | Проверьте теги, скобки, деление и пустые источники                       | При ошибке старый курс может временно оставаться в работе        |
| История                     | Журнал прошлых значений                       | Смотрите, когда курс менялся и насколько сильно                          | Помогает найти момент, когда появилась проблема                  |

Если в вашей версии админки часть полей называется немного иначе, ориентируйтесь на смысл: название — для людей, формула — для расчета, статус — для включения, preview — для проверки.

## Базовые правила перед настройкой

1. Сначала создайте или проверьте источники курсов.
2. Скопируйте теги из каталога тегов, не набирайте их вручную по памяти.
3. Проверьте каждое исходное значение отдельно.
4. Соберите формулу и проверьте preview.
5. Проверьте результат на понятном примере суммы.
6. Только после этого включайте формулу и привязывайте ее к направлению.
7. После привязки проверьте публичную форму обмена и тестовую заявку.

## Синтаксис формул

| Возможность               | Как писать                               | Что означает                       |
| ------------------------- | ---------------------------------------- | ---------------------------------- |
| Сложение                  | `[rate_a] + [rate_b]`                    | Сложить два значения               |
| Вычитание                 | `[rate_a] - [rate_b]`                    | Вычесть одно значение из другого   |
| Умножение                 | `[rate_a] * 1.01`                        | Умножить курс на коэффициент       |
| Деление                   | `[rate_a] / [rate_b]`                    | Разделить одно значение на другое  |
| Скобки                    | `([rate_a] + [rate_b]) / 2`              | Управлять порядком расчета         |
| Процентная надбавка       | `[rate_a] + 2%`                          | Увеличить значение на 2 процента   |
| Процентная скидка         | `[rate_a] - 1.5%`                        | Уменьшить значение на 1.5 процента |
| Тег источника             | `[binance_btc-usdt]`                     | Подставить курс источника          |
| Тег коэффициента          | `[index_margin-btc]`                     | Подставить значение коэффициента   |
| Ограничение знаков у тега | `[binance_btc-usdt][decimal:2]`          | Взять тег с нужной точностью       |
| Функция                   | `[fallback]основной,запасной[/fallback]` | Выполнить специальное правило      |

## Важные правила написания

| Правило                                     | Почему важно                                            | Правильно                                       |
| ------------------------------------------- | ------------------------------------------------------- | ----------------------------------------------- |
| Используйте точку в дробных числах          | Запятая используется как разделитель аргументов функций | `1.5`, а не `1,5`                               |
| Не ставьте пробелы внутри тега              | Тег должен совпадать с каталогом                        | `[binance_btc-usdt]`                            |
| Пары в описаниях пишите понятно             | Менеджеру проще проверять направление                   | BTC - USDT                                      |
| Проверяйте обратные пары                    | BTC - USDT и USDT - BTC дают разные значения            | Для обратного курса используйте `inverse`       |
| Не делите на источник, который может быть 0 | Деление на 0 ломает расчет                              | Используйте `fallback` или проверенный источник |
| Не меняйте рабочую формулу без теста        | Изменение влияет на все привязанные направления         | Сначала preview, потом тестовая заявка          |

## Как читать теги источников

| Тип тега          | Пример                         | Что означает простыми словами                   | Когда использовать                                  |
| ----------------- | ------------------------------ | ----------------------------------------------- | --------------------------------------------------- |
| Биржевой источник | `[binance_btc-usdt]`           | Курс BTC - USDT из выбранной биржи              | Для ликвидных криптовалютных пар                    |
| Рыночный источник | `[coinmarketcap_usdt-rub]`     | Курс USDT - RUB из рыночного источника          | Для фиатных пересчетов и кросс-курсов               |
| Курс из файла     | `[fileparser_usd-rub]`         | Значение, загруженное из файла курсов           | Когда курс дает партнер, банк или отдельная таблица |
| Курс конкурента   | `[competitors_some_btc-usdt]`  | Курс выбранного конкурента                      | Для конкурентной настройки рынка                    |
| BestChange        | `[bestchange_btc_usdttrc20_4]` | Курс по BestChange с выбранным правилом расчета | Для ориентирования на рынок обменников              |
| Коэффициент       | `[index_margin-btc]`           | Ваше собственное значение маржи или индекса     | Чтобы менять маржу в одном месте                    |

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

## Проценты и коэффициенты

| Что нужно сделать           | Формула                                       | Что получится                      |
| --------------------------- | --------------------------------------------- | ---------------------------------- |
| Добавить 1 процент к курсу  | `[binance_btc-usdt] * 1.01`                   | Курс станет выше на 1 процент      |
| Добавить 2.5 процента       | `[binance_btc-usdt] * 1.025`                  | Курс станет выше на 2.5 процента   |
| Уменьшить курс на 1 процент | `[binance_btc-usdt] * 0.99`                   | Курс станет ниже на 1 процент      |
| Добавить процент функцией   | `[markup][binance_btc-usdt],1.2[/markup]`     | Курс станет выше на 1.2 процента   |
| Сделать скидку функцией     | `[discount][binance_btc-usdt],0.7[/discount]` | Курс станет ниже на 0.7 процента   |
| Посчитать только комиссию   | `[fees][binance_btc-usdt],2%[/fees]`          | Вернет размер 2 процентов от курса |

## Как выбрать коэффициент

| Задача                                     | Рекомендация                                        | Пример                                      |
| ------------------------------------------ | --------------------------------------------------- | ------------------------------------------- |
| Одна формула, одна маржа                   | Можно умножить на число прямо в формуле             | `[binance_btc-usdt] * 1.01`                 |
| Одна маржа используется во многих формулах | Создайте коэффициент                                | `[binance_btc-usdt] * [index_margin-btc]`   |
| Маржа часто меняется                       | Используйте коэффициент, чтобы менять одно значение | 1.01 сегодня, 1.015 завтра                  |
| Разная маржа для разных рынков             | Делайте отдельные коэффициенты                      | `[index_margin-btc]`, `[index_margin-usdt]` |
| Сложный расчет маржи                       | Используйте шаблонный коэффициент                   | Коэффициент сам считается из других тегов   |

## Рекомендованные значения коэффициентов

| Цель               | Коэффициент | Что означает                      |
| ------------------ | ----------- | --------------------------------- |
| Без изменения      | `1`         | Курс остается как есть            |
| Плюс 0.3 процента  | `1.003`     | Небольшая маржа                   |
| Плюс 0.5 процента  | `1.005`     | Часто подходит для стабильных пар |
| Плюс 1 процент     | `1.01`      | Простая стандартная маржа         |
| Плюс 2 процента    | `1.02`      | Более защитная маржа              |
| Минус 0.5 процента | `0.995`     | Небольшая скидка                  |
| Минус 1 процент    | `0.99`      | Снижение курса на 1 процент       |

Важно: “лучший” коэффициент зависит от направления, конкуренции, комиссий, волатильности и риска. Для быстрых криптовалютных пар обычно нужна меньшая маржа, для редких, наличных или рискованных направлений — больше.

## Поля и настройки коэффициента

| Поле / настройка | Что означает                                       | Как правильно заполнять                                         | Важно знать                                                                |
| ---------------- | -------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------------------------------------- |
| Название         | Понятное имя коэффициента                          | Например: "Маржа BTC", "Маржа USDT TRC20", "Резервная надбавка" | Название должно объяснять, где коэффициент используется                    |
| Код или тег      | Имя, по которому коэффициент вставляется в формулу | Делайте коротко и понятно: `[index_margin-btc]`                 | Если поменять код, старые формулы могут перестать находить коэффициент     |
| Значение         | Число, которое подставится в формулу               | Для плюс 1 процент укажите `1.01`, для минус 1 процент — `0.99` | Не путайте `1.01` и `1 процент`: это разные записи                         |
| Тип значения     | Обычное число или расчетный шаблон                 | Для простой маржи используйте число, для сложной — шаблон       | Сложный шаблон нужен только если маржа тоже должна считаться автоматически |
| Статус           | Можно ли использовать коэффициент                  | Включайте после проверки формул, где он применяется             | Выключение коэффициента может дать 0 в связанных формулах                  |
| Точность         | Сколько знаков оставить                            | Для маржи обычно хватает 3-6 знаков                             | Чем меньше точность, тем грубее итоговый курс                              |
| Комментарий      | Пояснение для команды                              | Запишите: "используется в BTC - USDT и BTC - RUB"               | Помогает не изменить маржу случайно сразу в нескольких местах              |

## Как выбирать способ настройки маржи

| Что нужно                                         | Лучше сделать                                        | Почему                                                |
| ------------------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------- |
| Быстро поднять курс в одном направлении           | Добавить коэффициент прямо в формулу: `* 1.01`       | Быстро, видно прямо в формуле                         |
| Одинаковая маржа в нескольких направлениях        | Создать коэффициент и использовать его в формулах    | Меняется один раз, меньше риска забыть пару           |
| Разная маржа для покупки и продажи                | Сделать два отдельных коэффициента                   | Покупка и продажа часто имеют разную экономику        |
| Маржа зависит от рынка                            | Использовать отдельные коэффициенты по группам валют | BTC, USDT, наличные и банки имеют разный риск         |
| Нужно временно усилить защиту                     | Увеличить коэффициент, но записать причину           | Потом проще вернуть нормальное значение               |
| Нужно повторить курс конкурента, но чуть выгоднее | Использовать курс конкурента и небольшую поправку    | Подходит для конкурентной борьбы, но требует контроля |

## Функции формул

| Функция            | Как писать                                                        | Что делает                                      | Когда использовать                               |
| ------------------ | ----------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------ |
| `fallback`         | `[fallback]основной,запасной[/fallback]`                          | Если основной курс равен 0, берет запасной      | Когда источник иногда не отвечает                |
| `priority_rate`    | `[priority_rate]курс1,курс2,курс3[/priority_rate]`                | Берет первый ненулевой курс по списку           | Когда есть несколько источников по приоритету    |
| `latest_rate`      | `[latest_rate]курс1,курс2[/latest_rate]`                          | Берет первый доступный ненулевой курс           | Для простой запасной цепочки                     |
| `avg`              | `[avg]курс1,курс2,курс3[/avg]`                                    | Считает среднее                                 | Для сглаживания рынка                            |
| `min`              | `[min]курс1,курс2[/min]`                                          | Берет минимальное значение                      | Когда нужен нижний ориентир                      |
| `max`              | `[max]курс1,курс2[/max]`                                          | Берет максимальное значение                     | Когда нужен верхний ориентир                     |
| `best_rate`        | `[best_rate]курс1,курс2[/best_rate]`                              | Берет максимальное ненулевое значение           | Только если большее число действительно выгоднее |
| `worst_rate`       | `[worst_rate]курс1,курс2[/worst_rate]`                            | Берет минимальное ненулевое значение            | Для защитного консервативного курса              |
| `limit`            | `[limit]курс,минимум,максимум[/limit]`                            | Не дает курсу выйти ниже или выше границ        | Для защиты от резких скачков                     |
| `inverse`          | `[inverse]курс[/inverse]`                                         | Возвращает обратный курс                        | Когда есть BTC - USDT, а нужен USDT - BTC        |
| `markup`           | `[markup]курс,процент[/markup]`                                   | Добавляет процент к курсу                       | Для маржи                                        |
| `discount`         | `[discount]курс,процент[/discount]`                               | Уменьшает курс на процент                       | Для скидки                                       |
| `fees`             | `[fees]значение,процент[/fees]`                                   | Считает размер комиссии                         | Когда нужно получить только сумму комиссии       |
| `spread`           | `[spread]покупка,продажа[/spread]`                                | Считает разницу между двумя курсами в процентах | Для анализа рынка                                |
| `ratio`            | `[ratio]значение1,значение2[/ratio]`                              | Делит первое значение на второе                 | Для соотношений                                  |
| `diff_percent`     | `[diff_percent]значение1,значение2[/diff_percent]`                | Считает процентную разницу                      | Для контроля отклонения                          |
| `round`            | `[round]2,выражение[/round]`                                      | Округляет результат до указанного числа знаков  | Для удобного отображения                         |
| `decimal`          | `[decimal]2: выражение[/decimal]`                                 | Ограничивает количество знаков                  | Для аккуратного результата                       |
| `currency_convert` | `[currency_convert]курс1,курс2[/currency_convert]`                | Перемножает два курса                           | Для курса через промежуточную валюту             |
| `confidence`       | `[confidence]курс1:вес1,курс2:вес2[/confidence]`                  | Считает взвешенное значение                     | Когда одному источнику доверяете больше          |
| `combine`          | `[combine]курс1:вес1,курс2:вес2[/combine]`                        | Складывает значения с весами                    | Для сложных составных индексов                   |
| `threshold`        | `[threshold]значение,порог:результат,порог:результат[/threshold]` | Выбирает результат по диапазону                 | Для ступенчатых правил                           |
| `if`               | `[if]условие результат [else] результат[/if]`                     | Выбирает результат по условию                   | Для сложной логики                               |

## Как создать формулу для пары

1. Определите направление, например BTC - RUB.
2. Решите, какой рынок является базовым: BTC - USDT, USDT - RUB, BestChange или другой источник.
3. Проверьте, что все исходные пары обновляются.
4. Скопируйте теги из каталога тегов.
5. Соберите простую формулу.
6. Добавьте маржу или коэффициент.
7. Укажите количество знаков после запятой.
8. Проверьте preview.
9. Сохраните формулу выключенной, если нужно еще проверить.
10. Включите формулу.
11. Привяжите формулу к направлению.
12. Проверьте публичный калькулятор и тестовую заявку.

## Примеры готовых формул

| Задача                                    | Формула                                                                                | Когда применять                                       |
| ----------------------------------------- | -------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| Взять курс BTC - USDT из одного источника | `[binance_btc-usdt]`                                                                   | Если источник надежный и маржа задается в направлении |
| BTC - USDT плюс 1 процент                 | `[binance_btc-usdt] * 1.01`                                                            | Простая маржа                                         |
| BTC - USDT плюс 1.2 процента функцией     | `[markup][binance_btc-usdt],1.2[/markup]`                                              | Когда удобнее явно показать процент                   |
| BTC - USDT минус 0.5 процента             | `[discount][binance_btc-usdt],0.5[/discount]`                                          | Акция или скидка                                      |
| BTC - RUB через USDT                      | `[binance_btc-usdt] * [coinmarketcap_usdt-rub]`                                        | Когда нет прямого источника BTC - RUB                 |
| BTC - RUB с маржей 1 процент              | `([binance_btc-usdt] * [coinmarketcap_usdt-rub]) * 1.01`                               | Криптовалюта через промежуточную валюту               |
| BTC - RUB с округлением до 2 знаков       | `[round]2,([binance_btc-usdt] * [coinmarketcap_usdt-rub]) * 1.01[/round]`              | Для фиатного курса                                    |
| USDT - BTC из BTC - USDT                  | `[inverse][binance_btc-usdt][/inverse]`                                                | Для обратной пары                                     |
| Основной источник и запасной              | `[fallback][binance_btc-usdt],[bybit_btc-usdt][/fallback]`                             | Если основной источник пустой                         |
| Три источника по приоритету               | `[priority_rate][binance_btc-usdt],[bybit_btc-usdt],[kucoin_btc-usdt][/priority_rate]` | Когда есть главный и запасные источники               |
| Средний курс из трех бирж                 | `[avg][binance_btc-usdt],[bybit_btc-usdt],[kucoin_btc-usdt][/avg]`                     | Для сглаживания скачков                               |
| Не ниже 90000 и не выше 120000            | `[limit][binance_btc-usdt],90000,120000[/limit]`                                       | Для защиты от ошибочного скачка                       |
| Взвешенный курс                           | `[confidence][binance_btc-usdt]:3,[bybit_btc-usdt]:2,[kucoin_btc-usdt]:1[/confidence]` | Когда Binance важнее остальных источников             |
| Курс с коэффициентом маржи                | `[binance_btc-usdt] * [index_margin-btc]`                                              | Если маржа хранится отдельно                          |
| Только комиссия 2 процента                | `[fees][binance_btc-usdt],2%[/fees]`                                                   | Когда нужно посчитать размер комиссии                 |
| Процентная разница двух источников        | `[diff_percent][binance_btc-usdt],[bybit_btc-usdt][/diff_percent]`                     | Для контроля расхождения                              |

## Практические рецепты по парам

### BTC - USDT

| Цель                      | Формула                                                            | Комментарий                            |
| ------------------------- | ------------------------------------------------------------------ | -------------------------------------- |
| Базовый курс              | `[binance_btc-usdt]`                                               | Просто взять готовую пару              |
| Курс с небольшой маржей   | `[binance_btc-usdt] * 1.005`                                       | Плюс 0.5 процента                      |
| Курс со страхующей маржей | `[binance_btc-usdt] * 1.02`                                        | Плюс 2 процента для волатильного рынка |
| Запасной источник         | `[fallback][binance_btc-usdt],[bybit_btc-usdt][/fallback]`         | Если первый источник пустой            |
| Среднее из рынка          | `[avg][binance_btc-usdt],[bybit_btc-usdt],[kucoin_btc-usdt][/avg]` | Менее резкий курс                      |

### USDT - RUB

| Цель                          | Формула                                            | Комментарий                     |
| ----------------------------- | -------------------------------------------------- | ------------------------------- |
| Базовый курс                  | `[coinmarketcap_usdt-rub]`                         | Если источник подходит по рынку |
| Курс с фиксированной добавкой | `[coinmarketcap_usdt-rub] + 0.5`                   | Добавить 0.5 RUB к курсу        |
| Курс с процентной маржей      | `[coinmarketcap_usdt-rub] * 1.01`                  | Плюс 1 процент                  |
| Ограничение курса             | `[limit][coinmarketcap_usdt-rub],80,120[/limit]`   | Не ниже 80 и не выше 120        |
| Округление до 2 знаков        | `[round]2,[coinmarketcap_usdt-rub] * 1.01[/round]` | Удобно для фиата                |

### BTC - RUB

| Цель                      | Формула                                                                               | Комментарий               |
| ------------------------- | ------------------------------------------------------------------------------------- | ------------------------- |
| Через USDT                | `[binance_btc-usdt] * [coinmarketcap_usdt-rub]`                                       | Самый понятный кросс-курс |
| Через USDT с маржей       | `([binance_btc-usdt] * [coinmarketcap_usdt-rub]) * 1.01`                              | Добавить 1 процент        |
| Через USDT с fallback     | `[fallback][binance_btc-usdt],[bybit_btc-usdt][/fallback] * [coinmarketcap_usdt-rub]` | Запасной BTC - USDT       |
| Через USDT с ограничением | `[limit]([binance_btc-usdt] * [coinmarketcap_usdt-rub]),7000000,12000000[/limit]`     | Защита от аномалий        |

### USDT - BTC

| Цель                               | Формула                                                       | Комментарий                         |
| ---------------------------------- | ------------------------------------------------------------- | ----------------------------------- |
| Обратный курс                      | `[inverse][binance_btc-usdt][/inverse]`                       | 1 делится на BTC - USDT             |
| Обратный курс с точностью          | `[decimal]8: [inverse][binance_btc-usdt][/inverse][/decimal]` | Для криптовалюты                    |
| Обратный курс с защитной поправкой | `[inverse][binance_btc-usdt][/inverse] * 0.99`                | Осторожно: проверьте экономику пары |

Важно: для обратных пар всегда проверяйте итог на тестовой сумме. Ошибка в стороне пары может перевернуть выгоду обменника.

## Как считать руками для проверки

| Пример                       | Исходные значения                    | Расчет          | Итог    |
| ---------------------------- | ------------------------------------ | --------------- | ------- |
| BTC - RUB без маржи          | BTC - USDT = 100000, USDT - RUB = 90 | 100000 \* 90    | 9000000 |
| BTC - RUB с маржей 1 процент | База = 9000000                       | 9000000 \* 1.01 | 9090000 |
| USDT - RUB плюс 0.5 RUB      | USDT - RUB = 90                      | 90 + 0.5        | 90.5    |
| USDT - BTC                   | BTC - USDT = 100000                  | 1 / 100000      | 0.00001 |
| Комиссия 2 процента          | Курс = 100000                        | 100000 \* 0.02  | 2000    |

## Готовые стратегии для разных пар

| Пара / рынок           | Рекомендуемый способ                     | Пример формулы                                                 | Почему так                                         |
| ---------------------- | ---------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------- |
| BTC - USDT             | Биржевой курс плюс небольшая маржа       | `[binance_btc-usdt] * 1.005`                                   | Пара ликвидная, обычно хватает небольшой поправки  |
| ETH - USDT             | Биржевой курс плюс коэффициент           | `[binance_eth-usdt] * [index_margin-eth]`                      | Удобно отдельно управлять маржей ETH               |
| USDT - RUB             | Рыночный источник или BestChange         | `[coinmarketcap_usdt-rub] * 1.01`                              | В фиате важны рынок, комиссии и способ оплаты      |
| BTC - RUB              | Кросс-курс через USDT                    | `([binance_btc-usdt] * [coinmarketcap_usdt-rub]) * 1.01`       | Прямой BTC - RUB может быть хуже или отсутствовать |
| RUB - USDT             | Обратный курс или отдельный источник     | `[inverse][coinmarketcap_usdt-rub][/inverse]`                  | Обязательно проверить итог на тестовой сумме       |
| Редкая монета - USDT   | Источник плюс запасной источник          | `[fallback][binance_coin-usdt],[bybit_coin-usdt][/fallback]`   | Редкие пары чаще дают пустой курс                  |
| Наличные направления   | Курс с ручным контролем или ограничением | `[limit]([coinmarketcap_usdt-rub] * 1.02),80,130[/limit]`      | Наличные зависят от города, наличия и риска        |
| Банковские направления | Источник плюс фиксированная добавка      | `[coinmarketcap_usdt-rub] + 0.5`                               | Иногда комиссия удобнее в рублях, а не в процентах |
| Конкурентный рынок     | Среднее или выбранный конкурент          | `[avg][competitors_a_usdt-rub],[competitors_b_usdt-rub][/avg]` | Не стоит зависеть от одного конкурента             |
| BestChange-ориентир    | BestChange плюс защитная поправка        | `[bestchange_btc_usdttrc20_4] * 0.998`                         | Подходит, если вы хотите быть рядом с рынком       |

## Готовые шаблоны для копирования логики

| Задача                           | Шаблон                                                               | Как адаптировать                                         |
| -------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------- |
| Основной источник плюс запасной  | `[fallback][основной_тег],[запасной_тег][/fallback]`                 | Замените оба тега на реальные теги вашей пары            |
| Основной источник плюс маржа     | `[основной_тег] * 1.01`                                              | Вместо `1.01` поставьте нужный коэффициент               |
| Маржа через коэффициент          | `[основной_тег] * [тег_коэффициента]`                                | Создайте коэффициент отдельно и вставьте его тег         |
| Кросс-курс через USDT            | `[монета-usdt] * [usdt-фиат]`                                        | Подходит для BTC - RUB, ETH - RUB и похожих пар          |
| Кросс-курс с запасным источником | `[fallback][монета-usdt_1],[монета-usdt_2][/fallback] * [usdt-фиат]` | Используйте, если одна биржа иногда не дает курс         |
| Ограничение от ошибок рынка      | `[limit]курс,минимум,максимум[/limit]`                               | Минимум и максимум берите из нормального диапазона рынка |
| Округление фиата                 | `[round]2,курс[/round]`                                              | Для RUB, UAH, KZT чаще всего достаточно 2 знаков         |
| Точность криптовалюты            | `[decimal]8: курс[/decimal]`                                         | Для BTC и обратных пар лучше 8 знаков или больше         |
| Среднее из источников            | `[avg]курс1,курс2,курс3[/avg]`                                       | Используйте 2-4 надежных источника                       |
| Приоритет источников             | `[priority_rate]курс1,курс2,курс3[/priority_rate]`                   | Первый источник главный, остальные запасные              |

## Как проверить формулу по шагам

1. Выпишите все теги, которые используются в формуле.
2. Посмотрите значение каждого тега отдельно.
3. Посчитайте простую сумму вручную: например, 1 BTC или 100 USDT.
4. Проверьте, что маржа применена один раз.
5. Проверьте обратную пару, если она связана.
6. Проверьте, что округление не съело важные знаки.
7. Сравните результат с рынком и конкурентами.
8. Сделайте preview в админке.
9. Если preview совпадает с ручным расчетом, привяжите формулу к направлению.
10. Проверьте публичный калькулятор и тестовую заявку.

## Как понять, какую маржу ставить

| Условие                               | Обычно подходит                          | Почему                                                   |
| ------------------------------------- | ---------------------------------------- | -------------------------------------------------------- |
| Ликвидная криптовалютная пара         | 0.3-1 процент                            | Рынок быстрый и прозрачный                               |
| Фиатная пара с банковским переводом   | 0.5-2 процента или фиксированная добавка | Есть банковские комиссии и задержки                      |
| Наличное направление                  | 1-4 процента                             | Есть риск наличия, города, курьера и операционных затрат |
| Редкая монета                         | 2 процента и выше                        | Может быть низкая ликвидность и резкие скачки            |
| Агрессивная конкуренция               | Меньшая маржа, но с лимитами             | Важно не уйти в убыточный курс                           |
| Высокий риск AML или ручной обработки | Больше маржа или ручной контроль         | Дополнительная проверка стоит времени и денег            |

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

## Как выбирать точность

| Тип курса                             | Рекомендация        | Почему                                           |
| ------------------------------------- | ------------------- | ------------------------------------------------ |
| RUB, UAH, KZT и другие фиатные валюты | 2 знака             | Обычно хватает для денежных сумм                 |
| USDT - RUB и похожие стабильные пары  | 2-4 знака           | Зависит от точности рынка                        |
| BTC, ETH и другие криптовалюты        | 6-8 знаков          | Малые значения требуют большей точности          |
| Обратные пары вроде USDT - BTC        | 8 знаков или больше | Иначе результат может стать слишком грубым       |
| Внутренние индексы                    | 4-8 знаков          | Чтобы не терять точность в промежуточном расчете |

## Что лучше применять в разных ситуациях

| Ситуация                                         | Лучший способ                                    | Почему                                     |
| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------ |
| Нужно быстро добавить маржу к одному направлению | Корректировка направления или `* 1.01`           | Просто и понятно                           |
| Нужно управлять маржей во многих парах           | Коэффициент                                      | Меняется в одном месте                     |
| Источник иногда пустой                           | `fallback` или `priority_rate`                   | Формула не станет 0 сразу                  |
| Рынок сильно скачет                              | `avg` или BestChange top N                       | Сглаживает резкие значения                 |
| Нужно защититься от ошибки источника             | `limit`                                          | Не выпускает курс за границы               |
| Нужно получить обратную пару                     | `inverse`                                        | Не нужно создавать отдельный источник      |
| Нужно посчитать кросс-курс                       | Умножение двух источников или `currency_convert` | Понятная логика через промежуточную валюту |
| Нужно сравнить два рынка                         | `diff_percent` или `spread`                      | Видно расхождение                          |
| Нужно сложное правило по диапазонам              | `threshold` или `if`                             | Подходит для продвинутой логики            |

## Типовые ошибки

| Ошибка / ситуация                         | Причина                                                         | Что сделать                                     |
| ----------------------------------------- | --------------------------------------------------------------- | ----------------------------------------------- |
| Формула дала 0                            | Тег не найден, источник пустой или ошибка расчета               | Проверить значения тегов в preview              |
| Курс слишком большой                      | Перепутана пара, дважды применена маржа или неверный кросс-курс | Проверить исходные значения и порядок умножения |
| Курс слишком маленький                    | Использована обратная пара или лишнее деление                   | Проверить BTC - USDT и USDT - BTC отдельно      |
| Формула не сохраняется                    | Пустое название, пустая формула или неверный синтаксис          | Заполнить обязательные поля и проверить скобки  |
| Тег подсвечивается как неизвестный        | Такого тега нет в каталоге                                      | Скопировать тег из каталога заново              |
| Процент работает не так                   | Перепутали 1.01 и 1 процент                                     | Для плюс 1 процент используйте `* 1.01`         |
| Запятая ломает формулу                    | В дробном числе написали `1,5`                                  | Использовать `1.5`                              |
| Fallback скрывает проблему источника      | Формула берет запасной курс, но основной давно не работает      | Проверять историю и дату обновления источников  |
| Изменение коэффициента поменяло много пар | Коэффициент используется в нескольких формулах                  | Перед изменением проверьте связанные формулы    |
| Best rate дал не тот результат            | Большее число не всегда выгоднее для конкретной стороны обмена  | Проверить экономику направления                 |

## Диагностика по симптомам

| Что видит администратор                               | Что проверить сначала                           | Что делать дальше                                                   |
| ----------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------- |
| Формула показывает 0                                  | Значения всех тегов в preview                   | Если один тег пустой, проверьте источник или добавьте `fallback`    |
| Формула показывает старый курс                        | Дату обновления источников и историю формулы    | Проверить автообновление курсов и выбранный источник в направлении  |
| На сайте курс другой                                  | Какая формула или источник выбран в направлении | Проверить, нет ли отдельной наценки, скидки, комиссии или кеша      |
| После изменения коэффициента поменялись несколько пар | Где используется этот коэффициент               | Вернуть значение или разделить коэффициенты по рынкам               |
| Обратный курс слишком маленький                       | Не перепутаны ли BTC - USDT и USDT - BTC        | Посчитать вручную: `1 / курс` и проверить точность                  |
| Курс слишком выгодный для клиента                     | Не применена ли скидка дважды                   | Проверить формулу, наценку направления и комиссию платежной системы |
| Курс слишком невыгодный для клиента                   | Не применена ли маржа дважды                    | Проверить коэффициент, формулу и настройки направления              |
| Файл курсов обновился, а формула нет                  | Тег файла и дату обновления файла               | Убедиться, что формула использует правильный тег                    |
| BestChange есть, но формула пустая                    | Пару, фильтры и доступность данных              | Ослабить фильтры или добавить запасной источник                     |
| Конкурент резко изменил курс                          | Не завязана ли формула на одного конкурента     | Использовать среднее, ограничение или запасной источник             |

## Безопасный порядок изменения рабочей формулы

1. Найдите, какие направления используют формулу.
2. Скопируйте текущую формулу в заметку внутри задачи или регламента.
3. Проверьте новые исходные теги.
4. Сделайте preview нового выражения.
5. Сравните старый и новый результат на 3-5 суммах.
6. Проверьте обратную пару, если она связана.
7. Сохраните изменение в тихое время, если формула важная.
8. Проверьте публичный калькулятор.
9. Создайте тестовую заявку или проверьте расчет без оплаты.
10. Следите за историей курса после изменения.

## Что нельзя делать

| Нельзя                                                     | Почему                                          |
| ---------------------------------------------------------- | ----------------------------------------------- |
| Менять формулу без preview                                 | Можно сразу испортить расчет заявок             |
| Использовать неизвестные теги                              | Неизвестный тег даст 0                          |
| Добавлять большую маржу без проверки                       | Клиент увидит неадекватный курс                 |
| Отключать fallback без проверки источника                  | При сбое основного источника курс может стать 0 |
| Делить на источник, который может пропасть                 | Деление на 0 даст ошибочный результат           |
| Использовать один коэффициент для разных рынков без смысла | Изменение затронет несвязанные пары             |
| Ориентироваться только на один источник                    | При сбое или выбросе курс станет неверным       |

## FAQ по формулам

| Вопрос                                                        | Ответ                                                                             |
| ------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| Где взять тег источника?                                      | В каталоге тегов редактора формулы или в списке пар источника                     |
| Можно ли использовать одну формулу в нескольких направлениях? | Да, но изменение формулы повлияет на все эти направления                          |
| Что делать, если источник временно пустой?                    | Использовать `fallback` или `priority_rate`                                       |
| Как добавить 1 процент?                                       | Умножить на `1.01` или использовать `[markup]курс,1[/markup]`                     |
| Как убрать 1 процент?                                         | Умножить на `0.99` или использовать `[discount]курс,1[/discount]`                 |
| Как сделать обратный курс?                                    | Использовать `[inverse]курс[/inverse]`                                            |
| Как не дать курсу выйти за пределы?                           | Использовать `[limit]курс,минимум,максимум[/limit]`                               |
| Что делать, если формула стала 0?                             | Проверить каждый тег в preview, источник курса и деление                          |
| Как понять, что формула обновляется?                          | Смотреть дату обновления, историю и статус ошибки                                 |
| Что лучше: коэффициент или число в формуле?                   | Если значение используется в одном месте — число. Если в нескольких — коэффициент |

## Связанные разделы

Курсы, Источники курсов, BestChange, Курсы из файла, Курсы конкурентов, Направления обмена, CRON и фоновые процессы, Ошибки и диагностика, База вопросов для AI-чата.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.iexexchanger.com/help-center/ai-base/kursy/formula-rates-complete-guide.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
