> 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/knowledge-base/kursy-i-rezervy/rate-source-selection/formula-rates.md).

# Курсы по формуле

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

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

Для работы требуется право «Разрешить управление формулами курсов в админпанели» из блока «Админпанель».

## Список формул

В панели управления откройте:

**«Парсер курсов» — «Курсы по формуле»**

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

Нулевой или отсутствующий результат нельзя считать допустимым курсом. Перед удалением проверьте связанные направления и другие формулы, которые могут использовать этот код.

## Создание формулы

Нажмите «Добавить формулу» и заполните:

* название;
* «Формула»;
* «Знаков после запятой»;
* «Статус».

Коды источников заключаются в квадратные скобки. Формат выражения:

```
[binance_btc-usdt] * [coinmarketcap_usdt-rub]
```

Поддерживаются сложение, вычитание, умножение, деление, проценты и доступные функции редактора. Вкладки «Переменные», «Функции» и «Коэффициенты» содержат поиск и вставляют выбранный код в позицию курсора. Источники сгруппированы по типу, поэтому сначала выберите нужную группу, затем найдите название или код. Не вводите тег по памяти, если его нет в текущем каталоге.

Редактор проверяет пустое выражение, баланс квадратных скобок, модификаторы, неизвестные теги, допустимую глубину и объём выражения. Исправьте все показанные ошибки до сохранения. Если сервер отклонил сохранение, введённая формула и остальные поля остаются в форме для исправления.

## Каталог функций

Нажмите нужный элемент во вкладке «Функции», чтобы вставить проверенный пример. В формулах доступны две формы записи: обычные функции с круглыми скобками и парные теги с квадратными скобками.

### Математические функции

| Функция           | Назначение                                                          | Пример                 |
| ----------------- | ------------------------------------------------------------------- | ---------------------- |
| `avg()`           | Среднее арифметическое                                              | `avg(1,3)`             |
| `median()`        | Центральное значение; для чётного списка — среднее двух центральных | `median(1,5,3)`        |
| `min()` / `max()` | Минимум или максимум                                                | `min(1,3)`, `max(1,3)` |
| `round()`         | Округление до заданного числа знаков                                | `round(1.235,2)`       |
| `abs()`           | Модуль числа                                                        | `abs(-2)`              |
| `sum()`           | Сумма всех аргументов                                               | `sum(1,2,3)`           |
| `if()`            | Выбор результата по условию                                         | `if(true,2,3)`         |

### Теги формул

| Тег                        | Назначение                                                        | Пример из редактора                                          |
| -------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------ |
| `set`                      | Сохранить значение в переменную текущего расчёта                  | `[set]amount=2[/set][amount]`                                |
| `decimal`                  | Оставить заданное число знаков без округления                     | `[decimal]2:1.234[/decimal]`                                 |
| `decimal:N`                | Ограничить знаки только значения предыдущего тега                 | `[CODE][decimal:2]`                                          |
| `system-1`                 | Условие в форме `условие ? результат : резерв`                    | `[system-1]1>0?2:3[/system-1]`                               |
| `if`                       | Выбрать ветку «Если да» или «Если нет»                            | `[if]1>0 2 [else]3[/if]`                                     |
| `avg`                      | Среднее списка                                                    | `[avg]1,3[/avg]`                                             |
| `min` / `max`              | Минимум или максимум списка                                       | `[min]1,3[/min]`, `[max]1,3[/max]`                           |
| `diff_percent`             | Процент, на который второе значение меньше первого                | `[diff_percent]100,90[/diff_percent]`                        |
| `round`                    | Округлить значение с указанной точностью                          | `[round]2,1.235[/round]`                                     |
| `spread`                   | Разница между ask и bid в процентах от ask                        | `[spread]90,100[/spread]`                                    |
| `filter`                   | Применить `abs`, `ceil` или `floor`                               | `[filter]-1.2\|abs[/filter]`                                 |
| `currency_convert`         | Перемножить два курса через промежуточную валюту                  | `[currency_convert]2,3[/currency_convert]`                   |
| `ratio`                    | Разделить первое значение на второе                               | `[ratio]1,2[/ratio]`                                         |
| `inverse`                  | Получить обратный курс `1 / значение`                             | `[inverse]2[/inverse]`                                       |
| `threshold`                | Выбрать результат по достигнутому порогу                          | `[threshold]0.4,0.5:10,1.5:20[/threshold]`                   |
| `limit`                    | Удержать число между нижней и верхней границами                   | `[limit]12,1,10[/limit]`                                     |
| `fees`                     | Рассчитать сумму процентной комиссии                              | `[fees]100,5%[/fees]`                                        |
| `markup` / `discount`      | Добавить надбавку или вычесть скидку                              | `[markup]100,5%[/markup]`, `[discount]100,5%[/discount]`     |
| `confidence`               | Рассчитать среднее с весами                                       | `[confidence]10:1,20:3[/confidence]`                         |
| `combine`                  | Сложить произведения «значение × вес»                             | `[combine]10:1,20:3[/combine]`                               |
| `fallback`                 | Выбрать первое доступное положительное значение                   | `[fallback]0,2[/fallback]`                                   |
| `latest_rate`              | Выбрать положительный курс с наиболее свежими источниками         | `[latest_rate]1,2[/latest_rate]`                             |
| `priority_rate`            | Выбрать первый доступный положительный курс по порядку            | `[priority_rate]1,2[/priority_rate]`                         |
| `worst_rate` / `best_rate` | Выбрать минимальный или максимальный доступный положительный курс | `[worst_rate]1,2[/worst_rate]`, `[best_rate]1,2[/best_rate]` |

Примеры показывают синтаксис, а не рекомендуемые рабочие числа. После вставки замените значения и коды, затем проверьте разбор. Деление на ноль недопустимо; `fallback` возвращает ноль, если ни один вариант не пригоден, но нулевой итог курса не проходит проверку публикации.

## Проверка результата

Во время создания и редактирования запустите проверку выражения. Блок «Результат формулы» показывает итог, а «Используемые теги и значения» — исходные составляющие.

Раскройте блок **«Как работает формула»**. Он показывает серверный разбор, а не повторный приблизительный расчёт браузера:

* вкладка «Расчёт» перечисляет операции от входных значений к итогу;
* нажатие шага показывает выражение, входные значения, результат или ошибку;
* для условия отображается «Условие выполнено» или «Условие не выполнено» и выбранная ветка «Если да» либо «Если нет»;
* «Не вычислялось» означает, что ветка не выбрана или расчёт остановился раньше;
* вкладка «Источники» показывает коды, значения и ошибки источников;
* полностью одинаковые вхождения одного источника объединяются, а разные значения или состояния остаются отдельными;
* сначала показывается до 40 строк; «Показать ещё» открывает следующую часть;
* для очень большого выражения интерфейс может показать только первую часть разбора, но итог рассчитывается по полному выражению.

Проверяйте формулу по шагам:

1. оставьте один источник;
2. убедитесь в его ориентации;
3. добавьте следующую операцию;
4. повторно сравните промежуточное число;
5. добавляйте округление и проценты последними.

Деление на пустое или нулевое значение является ошибкой и не должно записывать ноль как новый рабочий курс. Последнее корректное значение может оставаться доступным по общей политике свежести. Если старое значение нужно исключать автоматически, включите [«Проверять срок актуальности курсов»](https://docs.iexexchanger.com/knowledge-base/kursy-i-rezervy/rate-source-selection/pages/8b4cbcyn12JsWyqdlk01#срок-актуальности-курсов) и обязательно подготовьте резервный источник.

## Коэффициенты

Откройте точный путь:

**«Парсер курсов» — «Курсы по формуле» — «Коэффициенты»**

Список ищет по названию, коду и значению. Для записи задаются:

* «Название»;
* «Тип индекса» — «Значение индекса» или «Шаблон формулы»;
* «Сумма» либо «Шаблон»;
* «Комментарий».

После создания интерфейс показывает «Код», тип, «Значение / формула» и результат; вариант «Значение индекса» обозначается в списке как «Число». Скопируйте код кнопкой «Скопировать код», а не вводите вручную. При ошибке сохранения строка остаётся в редакторе; исправьте сообщение формы и повторите сохранение. На небольшом экране те же сведения показываются карточками, действия находятся внутри соответствующей карточки.

Тип «Значение индекса» хранит число. Тип «Шаблон формулы» хранит выражение с индексом. Комментарий должен объяснять назначение и связанные направления.

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

## Настройки замены кода

Кнопка «Настройки» открывает поля «Найти код пары» и «Заменить на». Это массовая замена кода в формулах.

{% hint style="danger" %}
Замена затрагивает формулы, содержащие найденный код. Перед сохранением проверьте точное написание обоих кодов и список зависимых формул.
{% endhint %}

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

## Подключение к направлению

Откройте:

**«Основное» — «Направление обмена» — «Список направлений»**

Откройте карточку нужного направления, затем перейдите в группу «Обмен» и выберите «Курс обмена». Выберите формулу как источник и сохраните. Затем откройте «Как сформирован курс» и проверьте исходное число, инверсию и последующие комиссии.

## История и аналитика

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

## Если формула не рассчитывается

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


---

# 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, and the optional `goal` query parameter:

```
GET https://docs.iexexchanger.com/knowledge-base/kursy-i-rezervy/rate-source-selection/formula-rates.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
