Pulse strategy V2

Strategy for volatile pools

Strategy

Abstract

The strategy maintains the interval within the pool of the corresponding Automated Market Maker (AMM) protocol in an active state. When the price approaches the current interval margin, the strategy automatically rebalances the liquidity to a new interval by swapping funds and providing liquidity to a new interval. The strategy utilizes integration with 1inch, which leads to reduced swap fees for rebalances.

The primary distinction from the previous version lies in a more efficient rebalancing process:

When the price (spot tick) in the pool approaches the interval's boundary, the strategy does not mint a new position centered on the current tick. Instead, it expands the existing position uniformly in both directions. This approach reduces the amount of tokens to be swapped and significantly decreases the impact of Impermanent Loss (IL) on profitability.

As the position's width increases gradually, its depth decreases. This process results in reduced fees from pool swaps and increased slippage when swapping within this pool. To counteract these effects, the strategy introduces the concept of position limit width. If the width reaches this limit, it resets to the default width size, and a position centered on the spot tick is minted, similar to the approach employed in the strategy's first version.

For the exchange of tokens, 1inch AggregationRouterV5 is used, the data for which is received by the bot off-chain and transferred to the rebalance function. After the swap, the received number of tokens is compared with the expected one. The swap price should not deviate by more than swapSlippageD, and the number of swapped tokens should not deviate more than by swappingAmountsCoefficientD.

Parameters

ImmutableParams

Name
Description
Value in strategy

router

address of 1inch AggregationRouterV5

0x1111111254EEB25477B68fb85Ed929f73A960582

erc20Vault

address of buffer vault of the root vault system

0x06E16D36Ed1A99A46c0Cb771Ce927808d96132C2

uniV3Vault

address of vault that holds Uniswap V3 position

0xe04DC6F116A85508cD6299229218Ed4719E43F2a

tokens

arrays of strategy tokens

[0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0, 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48]

MutableParams

Name
Description
Value in strategy

priceImpactD6

Additional coefficient for expected price impact of swap of tokens

0

defaultIntervalWidth

Default width of UniswapV3 position

4200

maxPositionLengthInTicks

Width limit after which position will be minted with defaultIntervalWidth

10000

maxDeviationForVaultPool

If the spot tick in UniswapV3Pool deviates from the average tick by a larger value, then rebalance reverts with LIMIT_OVERFLOW error

50

timespanForAverageTick

The time interval in seconds used to determine the average tick values and prices in UniswapV3Pool

60

neighborhoodFactorD

The multiplier of the current interval width, showing the minimum required difference between the tick and the border of the current position to trigger a rebalance

150000000 (15% of interval width)

extensionFactorD

The multiplier of the current tickNeigborhood, showing how much the position will be expanded in case of rebalance

2000000000 (2 times the current tickNeighborhood)

swapSlippageD

Permissible slippage level during swap

1000000000 (1.0%)

swappingAmountsCoefficientD

Permissible level of difference between the amount of expected tokens for swap and the exchanged ones during swap

1000000000 (1.0%)

minSwapAmounts

Thresholds that cut off swap of an insignificant amount of tokens (in weis)

[10000000000000,10000]

DesiredAmounts:

Name
Description
Value in strategy

amount0Desired

Required number of tokens (wstETH in weis) that must be on the balance of the strategy to make a mint of a new Uniswap V3 position during the rebalance

1000000000

amount1Desired

Required number of tokens (USDC in weis) that must be on the balance of the strategy to make a mint of a new Uniswap V3 position during the rebalance

100000

Last updated