Полная инструкция по формулам курсов
Формулы курсов iEXExchanger: теги, функции, коэффициенты, примеры расчётов, preview и диагностика.
Для чего нужен раздел
Формулы курсов нужны, когда обычного ручного курса или одного источника недостаточно. С помощью формулы можно собрать итоговый курс из нескольких источников, добавить маржу, сделать запасной источник, ограничить курс снизу и сверху, округлить результат, использовать коэффициенты и настроить отдельную логику для каждой пары.
Простыми словами: формула — это правило, по которому обменник считает курс для направления. После расчета формулу можно выбрать в направлении обмена как источник курса.
Когда использовать формулы
Нужен простой фиксированный курс
Ручной курс в направлении
Редкая пара, которую меняют вручную
Нужно добавить небольшой процент к готовому курсу
Корректировка направления или простая формула
[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 — для проверки.
Базовые правила перед настройкой
Сначала создайте или проверьте источники курсов.
Скопируйте теги из каталога тегов, не набирайте их вручную по памяти.
Проверьте каждое исходное значение отдельно.
Соберите формулу и проверьте preview.
Проверьте результат на понятном примере суммы.
Только после этого включайте формулу и привязывайте ее к направлению.
После привязки проверьте публичную форму обмена и тестовую заявку.
Ограничения безопасного preview
Редактор проверяет формулу до тяжёлого расчёта. Текущие пределы защищают сервер от случайно огромного или зацикленного выражения:
Длина формулы
2048 символов
Вложенность круглых и квадратных скобок
24 уровня
Теги в квадратных скобках
160
Арифметические операторы
320
Если формула упирается в эти значения, разделите расчёт на понятные коэффициенты или промежуточные формулы. Не пытайтесь обходить проверку.
Синтаксис формул
Сложение
[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]
Выбирает результат по условию
Для сложной логики
Как создать формулу для пары
Определите направление, например BTC - RUB.
Решите, какой рынок является базовым: BTC - USDT, USDT - RUB, BestChange или другой источник.
Проверьте, что все исходные пары обновляются.
Скопируйте теги из каталога тегов.
Соберите простую формулу.
Добавьте маржу или коэффициент.
Укажите количество знаков после запятой.
Проверьте preview.
Сохраните формулу выключенной, если нужно еще проверить.
Включите формулу.
Привяжите формулу к направлению.
Проверьте публичный калькулятор и тестовую заявку.
Примеры готовых формул
Взять курс 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 BTC или 100 USDT.
Проверьте, что маржа применена один раз.
Проверьте обратную пару, если она связана.
Проверьте, что округление не съело важные знаки.
Сравните результат с рынком и конкурентами.
Сделайте preview в админке.
Если preview совпадает с ручным расчетом, привяжите формулу к направлению.
Проверьте публичный калькулятор и тестовую заявку.
Как понять, какую маржу ставить
Ликвидная криптовалютная пара
0.3-1 процент
Рынок быстрый и прозрачный
Фиатная пара с банковским переводом
0.5-2 процента или фиксированная добавка
Есть банковские комиссии и задержки
Наличное направление
1-4 процента
Есть риск наличия, города, курьера и операционных затрат
Редкая монета
2 процента и выше
Может быть низкая ликвидность и резкие скачки
Агрессивная конкуренция
Меньшая маржа, но с лимитами
Важно не уйти в убыточный курс
Высокий риск AML или ручной обработки
Больше маржа или ручной контроль
Дополнительная проверка стоит времени и денег
Это рекомендации, а не финансовое правило. Перед включением всегда сравните итог с вашей комиссией платежной системы, расходами на выплату, резервом и рыночной ситуацией.
Как выбирать точность
RUB, UAH, KZT и другие фиатные валюты
2 знака
Обычно хватает для денежных сумм
USDT - RUB и похожие стабильные пары
2-4 знака