Fees

Trading fees are necessary to help sustain the protocol over the long term. They are broken out into 3 areas; position fees, funding fees, and borrowing fees.

Position Fees

Position fees are paid when opening, increasing or decreasing a position. They are based on position size and a trading rate that is set per asset as follows:

positionFee=posSize×positionRate[asset]positionFee = posSize \times positionRate[asset]
Asset ClassRate

BTC/ ETH

0.05%

Crypto Alts

0.06%-0.08%

Forex

0.015%

Metals

0.013%

Velocity-based Funding Fees

Innovation is the name of the game, and we've done just that! Traditional funding rates tend to have large downside for traders, who pay volatile funding fees in order to keep their positions healthy. By introducing velocity-based funding fees, Vela Exchange supports market making with a stable and predictable model, while massively reducing fees for traders.

Velocity-based Funding fees are in place to keep open interest balanced while maintaining appeal to market makers. By smoothing out the time it takes to reach the target funding rate, market makers are incentivized to balance OI and the reduce skew. All parties benefit from the resulting stability:

  • Traders experience more predictable, reduced funding fees

  • LPs benefit from reduced counterparty risk as OI skew becomes balanced

  • Market makers and traders can arbitrage on Vela Exchange in order to earn funding fees

How Does it work?

The funding rate is determined by the following variables:

  1. targetRate: the funding rate at which an equilibrium would be established (ie: fundingVelocity = 0) given OI and tempMaxRate do not change.

  2. tempMaxRate: the highest funding rate possible per asset, it varies with historical asset volatility

  3. longBias: ensures that longs pay shorts when OI is balanced by a small percentage. Defaulted to 2.5% for crypto assets and 0% for non-crypto assets.

  4. skewRatio: the difference between long and short OI divided by the total OI limit at that time

  5. velocityFactor: this determines the velocity at which the funding rate proceeds to the target rate. Defaulted to 24hrs for all assets.

  6. volatilityFactor: this is the output of the volatility and therefore risk associated with each asset; it is based on the average true range percent (ATR%) over the past 21d period

  7. openInterest (OI): the total amount of all open positions, per asset, per side (long/ short)

  8. maxRateFactor: a config parameter for mapping asset volatility to the maximum possible desired funding rate per asset. Defaulted to 0.5% for all assets.

skewRatio=longOIshortOIlongLimitOI+shortLimitOIskewRatio = \frac{longOI - shortOI}{longLimitOI + shortLimitOI}
tempMaxRate=maxRateFactor×volatilityFactortempMaxRate = maxRateFactor \times volatilityFactor
targetRate=tempMaxRate(skewRatio+longBias)targetRate = tempMaxRate * (skewRatio + longBias)
deltaRate=targetRatelastRatedeltaRate = targetRate - lastRate

The funding velocity can be expressed as:

dRdt=deltaRatevelocityFactor\frac{dR}{dt} = \frac{deltaRate}{velocityFactor }

Solving for funding rate,RR, as a function of time, tt, yields the following:

R(t)=targetRatedeltaRate×e(tvelocityFactor)R(t) = targetRate - deltaRate\times e^{(\frac{-t}{velocityFactor})}

From this is can be shown (given no changes in OI) that when t=velocityFactort=velocityFactor (24 hrs) then RR will have moved by approximately 63% of the deltaRate to target. For example assume BTC funding rate is currently 0.001%/h and Bob opens a large BTC long position making the new targetRate = 0.005%/h. If no other trades are made on BTC after this point then 24 hrs later the new fundingRate on BTC will be ~ 63% x (0.005 - 0.001) + 0.001 = 0.00352%/h.

Funding Fees

A funding index (unique to each asset) is introduced which is updated each time a trading event is triggered. It increases/decreases over time based on a positive/negative funding rate as follows:

fundingIndex=fundingRate×(currentTimestamplastTimestamp)fundingIndex = fundingRate \times (currentTimestamp - lastTimestamp)
deltaFundingIndex=fundingIndex[current]fundingIndex[posID]deltaFundingIndex = fundingIndex[current] - fundingIndex[posID]
fundingFee={posSize×deltaFundingIndex/1000000if LONGposSize×deltaFundingIndex/1000000if SHORTfundingFee =\begin{cases} posSize \times deltaFundingIndex/1000000 &\text{if } LONG \\ -posSize \times deltaFundingIndex/1000000 &\text{if } SHORT\end{cases}

For example, lets say: the user opens a 100k BTC long position and the current funding index for 15010.

A simple flow for illustration:

  1. user calls a function to open a new position which sets fundingIndex[posID] = 15010.

  2. user holds position for a few hours at which time they decide to close 80% of their position. Now, due to dynamic conditions with other users opening and closing BTC positions as well as BTC funding rate changing, the funding index for BTC is now 15510.

  3. user pays 80% * 100k * (15510 - 15010)/1000000 = $40

Borrow Fees

A borrow fee is implemented to help mitigate/offset the vault's risk of always taking the opposite side of each trade. The borrow fee will be based on the position size as well as the duration, in seconds, the position is held open.

borrowFee=posSize×borrowRate×durationborrowFee=posSize\times borrowRate \times duration

Borrow rate will be determined per asset by using each assets historical volatility. This is set manually, based on analysis, and will be periodically reviewed and updated to ensure the vault's risk is being managed appropriately.

Asset Risk

We use Average True Range (ATR) over a 21d period to determine an asset's risk to the vault. All fees are automatically and dynamically adjusted according to this percent in order to assign OI and fees.

Mint/ Redeem

Minting VLP incurs a fee of 0.05%. This fee will be waived during the Hyper VLP event.

Spread

This new mechanism will simulate an order book by adding a slippage percentage to each order that is proportional to the vault utilization and position size.

Each index token will have its own slippage factor that will be a function of the tokens historical volatility, that of which is most often correlated to depth of market.

deltaPercent=slippageFactor2×totalOI+posSize2×vaultTVLdeltaPercent = slippageFactor * \frac{2 \times totalOI + posSize}{2 \times vaultTVL}
executionPrice={markPrice×(1+deltaPercent)if LONGmarkPrice×(1deltaPercent)if SHORTexecutionPrice =\begin{cases} markPrice \times (1 + deltaPercent) &\text{if } LONG \\ markPrice \times (1 - deltaPercent) &\text{if } SHORT\end{cases}

Each index token will have its own slippage factor that will be a function of the tokens historical volatility, that of which is most often correlated to depth of market.

IDAssetCurrent Slippage Factor

1

BTC/USD

50

2

ETH/USD

50

3

LTC/USD

100

4

ADA/USD

100

5

DOGE/USD

100

6

SHIB/USD

100

7

ARB/USD

100

8

SOL/USD

100

9

MATIC/USD

100

10

AVAX/USD

100

11

GBP/USD

75

12

EUR/USD

75

13

USD/JPY

75

14

AUD/USD

75

15

USD/CAD

75

24

XAG/USD

75

25

XAU/USD

75

26

USD/CNH

100

27

USD/CHF

100

28

USD/MXN

100

30

USDT/USD

50

31

ATOM/USD

100

32

DOT/USD

100

33

BNB/USD

100

34

PEPE/USD

150

35

XRP/USD

100

36

CRV/USD

100

37

MKR/USD

100

38

OP/USD

100

39

LINK/USD

100

40

INJ/USD

100

Slippage

Upon order confirmation of a new position users can also manually enter the max slippage that they are willing to accept as shown in the red box. The order will only execute if the execution price is less than the current mark price plus/minus (if long/short) the slippage percent entered here.

Last updated