> For the complete documentation index, see [llms.txt](https://manual.boxexchanger.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://manual.boxexchanger.net/obmen/napravlenie/strakhovka-kursa.md).

# Страховка курса

### Применение страховки курса

{% hint style="success" %}
**Страховочный курс, при корректной настройке, может быть полезен**:\
\- **при временной приостановки сервиса, который передает курсы в парсер**. К примеру, в случае, если биржа или любой другой сервис уходит на технические работы и курсы могут не обновляться. \
\- **при использовании парсера конкуренции**. К примеру, для того чтобы указать какой максимальный курс вы готовы отдать клиенту и какое действие будет произведено с направлением, если итоговый курс будет больше чем ваш максимально указанный курс, который вы готовы отдать клиенту (то есть сработает страховка курса)
{% endhint %}

### Алгоритм работы функционала

<details>

<summary>Определение переменных</summary>

**inAmount** - Сумма обмена отдаем&#x20;

**outAmount** - Сумма обмена получаем&#x20;

**outFeeAmount** - значение "Сумма комиссии"&#x20;

**FeePercent** - значение "Процент комиссии"&#x20;

**discount** - значение "DISCOUNT FOR AMOUNT" в настройках направления - шаг "Комиссии"&#x20;

**discountRate** - значение "DISCOUNT FOR AMOUNT" разделить на 100, то есть в %&#x20;

**feeRate** - значение "Процент комиссии" разделить на 100, то есть в %.&#x20;

**in:out** (курс из основного парсера либо курс указанный вручную в настройка направления)&#x20;

**rate** - курс обмена с учетом процента комиссии, но без учета суммы комиссий&#x20;

**RateFrom:RateTo** ( курс, указанный в страховке. К примеру, 1:39 (он может быть ручным либо из парсера)&#x20;

**defaultPercent** - тоже самое, что и значение "Процент комиссиии" только для страховочного курса. Задействуется только когда срабатывает страховка курса.&#x20;

**maxLimitPercent** - %, определяющий верхний лимит актуального курса по отношению к курсу, который указан в страховке курса.

</details>

#### Формула расчета курса обмена

```
feeRate = FeePercent / 100 
in = in + (in * feeRate) 
discountRate = discount / 100 
in = in - (in * discountRate) 
rate (курс обмена с учетом процента комиссии) = out / in
```

#### Формула расчета страховочного курса

{% code fullWidth="false" %}

```
Текущий курс страховки = RateTo / RateFrom - defaultPercent 
Курс страхования = Текущий курс страховки + maxLimitPercent.
```

{% endcode %}

#### **Варианты работы страховки курса**

{% hint style="info" %}
**Если Курс обмена с учетом процента комиссии** ≥ **Курса страхования -> срабатывает страховка курса и в зависимости от действия (action)**:&#x20;

а) Для “**Установить значение по умолчанию**” будет использоваться значение “Текущий курс страховки” в качестве актуального курса&#x20;

б) Для “**Максимальный курс**” будет использоваться значение “Курс страхования” в качестве актуального курса&#x20;

в) Для “**Отключить направление**” будет отключаться направление.

\
То есть страховка курса срабатывает когда **окончательный курс обмена (курс из парсера основного - (минус) процент комиссии) становится** ≥ **чем курс страхования (текущий курс страховки минус процент комиссии (defaultPercent)) на значение maxLimitPercent %.** \
По сути, в поле "Max limit difference percent" мы указываем насколько мы допускаем отклонение rate от курса страхования.
{% endhint %}

При [**срабатывании страховочного курса**](#user-content-fn-1)[^1] в админ панеле, направление окрашивается в красный цвет и отображается страховочный курс.

<details>

<summary>Пример 1 - Страховка не срабатывает</summary>

* Для направления указан курс обмена "Автоматически": из парсера whitebit (BTC-USDT, USDT-USD), курс из парсера (in:out) 1:34256.00.
* Процент комиссии (FeePercent): 7&#x20;
* Значение "DISCOUNT FOR AMOUNT (discount): 0
* В страховке курса указан тип "Автоматически": парсер kraken (BTC-USD), курс из страховочного парсера (RateFrom:RateTo) 1:34090.
* Значение "Default percent" (defaultPercent): 7
* Значение "Max limit difference percent" (maxLimitPercent): 1.1
* Action выбран "Установить значение по умолчанию"

feeRate = FeePercent / 100 = 7/100 = 0.07 \
in = in + (in \* feeRate) = 1 + (1*0.07)=1.07* \
*discountRate = discount / 100 = 0* \
*in = in - (in \* discountRate) = 1.07 - (1.07*0) = 1.07 \
RATE (окончательный курс обмена)= out / in = 34256.00/1.07= 32014.9533

ЕСЛИ RATE ≥ Курс страхования -> срабатывает страховка курса \
\
Текущий курс страховки = RateTo/RateFrom-defaultPercent = 34090 / 1 - 7% = 31703.7\
Курс страхования = Текущий курс страховки + maxLimitPercent = 31703.7 + 1.1% = 1 : 32052.4407

Rate (32014.9533) < Курса страхования (32052.4407) -> **страховка курса не срабатывает и клиент будет видеть курс с учетом процента комиссии, а именно 32014.9533**

</details>

<details>

<summary>Пример 2 - Страховка срабатывает / Action: Установить значение по умолчанию</summary>

* Для направления указан курс обмена "Автоматически": из парсера whitebit (BTC-USDT, USDT-USD), курс из парсера (in:out) 1:36256.00.
* Процент комиссии (FeePercent): 7&#x20;
* Значение "DISCOUNT FOR AMOUNT (discount): 0
* В страховке курса указан тип "Автоматически": парсер kraken (BTC-USD), курс из страховочного парсера (RateFrom:RateTo) 1:34090.
* Значение "Default percent" (defaultPercent): 7
* Значение "Max limit difference percent" (maxLimitPercent): 1.1
* Action выбран "Установить значение по умолчанию"

feeRate = FeePercent / 100 = 7/100 = 0.07 \
in = in + (in \* feeRate) = 1 + (1*0.07)=1.07* \
*discountRate = discount / 100 = 0* \
*in = in - (in \* discountRate) = 1.07 - (1.07*0) = 1.07\
RATE (окончательный курс обмена)= out / in = 36256.00/1.07= 33884.1121

ЕСЛИ RATE ≥ Курс страхования -> срабатывает страховка курса \
\
Текущий курс страховки = RateTo/RateFrom-defaultPercent = 34090 / 1 - 7% = 31703.7 // этот курс будет установлен если выбрано "Установить курс по умолчанию". То есть курс будет 1:31703.7\
Курс страхования = Текущий курс страховки + maxLimitPercent = 31703.7 + 1.1% = 1 : 32052.4407

Rate (33884.1121) > Курса страхования (32052.4407) -> **страховка курса срабатывает и клиент будет видеть текущий курс страховки, а именно 31703.7**

</details>

<details>

<summary>Пример 3 - Страховка срабатывает / Action: Максимальный курс </summary>

* Для направления указан курс обмена "Автоматически": из парсера whitebit (BTC-USDT, USDT-USD), курс из парсера (in:out) 1:34256.00.
* Процент комиссии (FeePercent): 7&#x20;
* Значение "DISCOUNT FOR AMOUNT (discount): 0
* В страховке курса указан тип "Автоматически": парсер kraken (BTC-USD), курс из страховочного парсера (RateFrom:RateTo) 1:34090.
* Значение "Default percent" (defaultPercent): 7
* Значение "Max limit difference percent" (maxLimitPercent): 0.35
* Action выбран "Максимальный курс"

feeRate = FeePercent / 100 = 7/100 = 0.07 \
in = in + (in \* feeRate) = 1 + (1*0.07)=1.07* \
*discountRate = discount / 100 = 0* \
*in = in - (in \* discountRate) = 1.07 - (1.07*0) = 1.07 \
RATE (окончательный курс обмена)= out / in = 34256.00/1.07= 32014.9533

ЕСЛИ RATE ≥ Курс страхования -> срабатывает страховка курса \
\
Текущий курс страховки = RateTo/RateFrom-defaultPercent = 34090 / 1 - 7% = 31703.7\
Курс страхования = Текущий курс страховки + maxLimitPercent = 31703.7 + 0.35% = 1 : 31814.6629 \
\
Rate (32014.9533) > Курса страхования (31814.6629) -> **страховка курса срабатывает и клиент будет видеть Курс страхования, а именно** 31814.6629

</details>

<details>

<summary>Пример 4 - Страховка срабатывает / Action: Отключить направление</summary>

* Для направления указан курс обмена "Вручную": (in:out) 1:41.37
* Процент комиссии (FeePercent): 4
* Значение "DISCOUNT FOR AMOUNT (discount): 0
* В страховке курса указан тип "Вручную": (RateFrom:RateTo) 1:42.08
* Значение "Default percent" (defaultPercent): 8
* Значение "Max limit difference percent" (maxLimitPercent): 1.1
* Action выбран "Отключить направление"

feeRate - FeePercent / 100 = 4 / 100 = 0.04

in = in + (in \* feeRate) = 1 + (1 \* 0.04) = 1.04 \
discountRate = discount / 100 = 0 / 100 = 0\
\&#xNAN;*in = in - (in \* discountRate) = 1.04 - (1.04\*0) = 1.04* \
RATE = out / in = 41.37 / 1.04 = 39.778

ЕСЛИ RATE ≥ Курс страхования -> срабатывает страховка курса&#x20;

Текущий курс страховки = manualRateTo/manualRateFrom-defaultPercent = 42.08 / 1 - 8% = 38.7136 \
Курс страхования = Текущий курс страховки + maxLimitPercent = 38.7136 + 1.1% = 39.139

RATE (39.778) > Курса страхования (39.139) -> **сработает страховка курса и направление будет отключено**.

</details>

[^1]: ![](/files/ALLji5gWCwgrF0Cmz44R)
