# Calculating borrowing fees

## Overview

* Borrowing fees are paid only by one side (either longs or shorts) which is decided by current open interest (higher OI pays the fee)
* Each pair is part of a group, meaning that borrowing fee should be calculated for pair and pair's group and the higher of two should be charged (never both)
* Borrowing fee is charged on trader's position size (collateral \* leverage)

## Borrowing fee per block

The formula for borrowing fee per block is:

{% hint style="info" %}

```
feePerBlock * (abs(longOi - shortOi) / maxOi) ** feeExponent
```

{% endhint %}

### *Example:*

Let's calculate the borrowing fee for **ENA/USD** pair (`pairIndex` is `219`) against USDC collateral (`collateralIndex` is `3`)

#### 1) Fetching Open Interest and Fees

Access current open interests and fees for given collateral and pair index via [`trading-variables`](/developer/integrators/backend.md#trading-variables) endpoint described [**here**](/developer/integrators/backend.md#trading-variables)**.**&#x20;

#### 2) Calculating Pair Borrowing Fees

To calculate ENA/USD borrowing fees, we use the following object retrieved from Step 1:

{% code overflow="wrap" %}

```javascript
tradingVariables.collaterals[2].borrowingFees.pairs[219] // collaterals[2] because its 0 indexed
```

{% endcode %}

```javascript
{
    "oi": {
        "long": "228761980790000", // 1e10
        "short": "59904000000000", // 1e10
        "max": "8806660000000000" // 1e10
    },
    "feePerBlock": "100236", // 1e10
    "feeExponent": "1",
    "groups": [
        {
            "groupIndex": "2",
            ...
        }
    ],
    ...
}
```

With these values, we can calculate the pair's borrowing fee (per block):

```javascript
feePerBlock = 0.0000100236
longOi = 22876.198079
shortOi = 5990.4
maxOi = 880666

pairFeePerBlock = 0.0000100236 * Math.abs(22876.198079 - 5990.4) / 880666 ** 1 = 1.9219146149012726e-7
```

#### 3) Calculating Group Borrowing Fees

Now we need to do the same for group fee, reading the `groupIndex` from the same `trading-variables` response (for this example, `groupIndex` is `2`). The process is the same as for calculating pair fees, using `groups` values of `borrowingFees`:

```javascript
tradingVariables.collaterals[2].borrowingFees.groups[2]
```

```javascript
{
    "oi": {
        "long": "7704464978990000", // 1e10
        "short": "1841270854980000", // 1e10
        "max": "50906510000000000" // 1e10
    },
    "feePerBlock": "16871", // 1e10
    "feeExponent": "1"
    ...
}
```

Therefore, the group's borrowing fee (per block) will be:

```javascript
feePerBlock = 0.0000016871
longOi = 770446.497899
shortOi = 184127.085498
maxOi = 5090651

groupFeePerBlock = 0.0000016871 * Math.abs(770446.497899 - 184127.085498) / 5090651 ** 1 = 1.9431296324610092e-7
```

In this example, `groupFeePairBlock`is greater than `pairFeePerBlok` (`1.9431296324610092e-7 > 1.9219146149012726e-7`) so `groupFeePairBlock` is the effective `feePerBlock`.

#### 4) Estimating Borrowing fee per hour

To estimate the hourly paid fee, we need to multiply the number of blocks per hour `feePerBlock`.

```javascript
feePerHour = blocksPerHour * Math.max(pairFeePerBlock, groupFeePerBlock)
```

For this example, on **Arbitrum** (12000 blocks per hour), the estimated borrowing fee per hour is:

{% code overflow="wrap" %}

```javascript
feePerHour = 12000 * Math.max(1.9219146149012726e-7, 1.9431296324610092e-7) // 0.002331755558953211% Borrowing (L) 
```

{% endcode %}

Which corresponds to **gTrade**'s UI:

<figure><img src="/files/J01QQSqITaxkLo93Jgq7" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: 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.gains.trade/developer/integrators/guides/calculating-borrowing-fees.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.
