code.vegaprotocol.io/vega@v0.79.0/core/integration/features/amm/pegged-orders-market-tick.feature (about)

     1  Feature: 0090-VAMM-036: With an existing book consisting solely of vAMM orders, pegged orders referencing best bid/best ask remain deployed, pegged to their pegs, where the best buy/sell vAMM order price acts as the best bid, or best ask peg respectively.
     2  
     3    Background:
     4      Given the average block duration is "1"
     5      And the margin calculator named "margin-calculator-1":
     6        | search factor | initial factor | release factor |
     7        | 1.2           | 1.5            | 1.7            |
     8      And the log normal risk model named "log-normal-risk-model":
     9        | risk aversion | tau                   | mu | r   | sigma |
    10        | 0.001         | 0.0011407711613050422 | 0  | 0.9 | 3.0   |
    11      And the liquidity monitoring parameters:
    12        | name       | triggering ratio | time window | scaling factor |
    13        | lqm-params | 1.00             | 20s         | 1              |
    14  
    15      And the following network parameters are set:
    16        | name                                                | value |
    17        | market.value.windowLength                           | 60s   |
    18        | network.markPriceUpdateMaximumFrequency             | 0s    |
    19        | limits.markets.maxPeggedOrders                      | 6     |
    20        | market.auction.minimumDuration                      | 1     |
    21        | market.fee.factors.infrastructureFee                | 0.001 |
    22        | market.fee.factors.makerFee                         | 0.004 |
    23        | spam.protection.max.stopOrdersPerMarket             | 5     |
    24        | market.liquidity.equityLikeShareFeeFraction         | 1     |
    25        | market.amm.minCommitmentQuantum                     | 1     |
    26        | market.liquidity.bondPenaltyParameter               | 0.2   |
    27        | market.liquidity.stakeToCcyVolume                   | 1     |
    28        | market.liquidity.successorLaunchWindowLength        | 1h    |
    29        | market.liquidity.sla.nonPerformanceBondPenaltySlope | 0.1   |
    30        | market.liquidity.sla.nonPerformanceBondPenaltyMax   | 0.6   |
    31        | validators.epoch.length                             | 10s   |
    32        | market.liquidity.earlyExitPenalty                   | 0.25  |
    33        | market.liquidity.maximumLiquidityFeeFactorLevel     | 0.25  |
    34      #risk factor short:3.5569036
    35      #risk factor long:0.801225765
    36      And the following assets are registered:
    37        | id  | decimal places |
    38        | USD | 2              |
    39      And the fees configuration named "fees-config-1":
    40        | maker fee | infrastructure fee |
    41        | 0.0004    | 0.001              |
    42  
    43      And the liquidity sla params named "SLA-22":
    44        | price range | commitment min time fraction | performance hysteresis epochs | sla competition factor |
    45        | 0.5         | 0.6                          | 1                             | 1.0                    |
    46  
    47      And the markets:
    48        | id        | quote name | asset | liquidity monitoring | risk model            | margin calculator   | auction duration | fees          | price monitoring | data source config     | linear slippage factor | quadratic slippage factor | sla params | decimal places |
    49        | ETH/MAR22 | USD        | USD   | lqm-params           | log-normal-risk-model | margin-calculator-1 | 2                | fees-config-1 | default-none     | default-eth-for-future | 1e0                    | 0                         | SLA-22     | 1              |
    50  
    51      # Setting up the accounts and vAMM submission now is part of the background, because we'll be running scenarios 0090-VAMM-006 through 0090-VAMM-014 on this setup
    52      Given the parties deposit on asset's general account the following amount:
    53        | party  | asset | amount  |
    54        | lp1    | USD   | 1000000 |
    55        | lp2    | USD   | 1000000 |
    56        | lp3    | USD   | 1000000 |
    57        | party1 | USD   | 1000000 |
    58        | party2 | USD   | 1000000 |
    59        | party3 | USD   | 1000000 |
    60        | party4 | USD   | 1000000 |
    61        | party5 | USD   | 1000000 |
    62        | vamm1  | USD   | 1000000 |
    63  
    64      When the parties submit the following liquidity provision:
    65        | id   | party | market id | commitment amount | fee   | lp type    |
    66        | lp_1 | lp1   | ETH/MAR22 | 600               | 0.02  | submission |
    67        | lp_2 | lp2   | ETH/MAR22 | 400               | 0.015 | submission |
    68      Then the network moves ahead "4" blocks
    69      And the current epoch is "0"
    70  
    71      And the parties place the following orders:
    72        | party  | market id | side | volume | price | resulting trades | type       | tif     | reference |
    73        | lp1    | ETH/MAR22 | buy  | 20     | 40    | 0                | TYPE_LIMIT | TIF_GTC | LP1BO     |
    74        | party1 | ETH/MAR22 | buy  | 1      | 100   | 0                | TYPE_LIMIT | TIF_GTC |           |
    75        | party2 | ETH/MAR22 | sell | 1      | 100   | 0                | TYPE_LIMIT | TIF_GTC |           |
    76        | lp1    | ETH/MAR22 | sell | 10     | 160   | 0                | TYPE_LIMIT | TIF_GTC | LP1SO     |
    77      When the opening auction period ends for market "ETH/MAR22"
    78      Then the following trades should be executed:
    79        | buyer  | price | size | seller |
    80        | party1 | 100   | 1    | party2 |
    81  
    82      And the market data for the market "ETH/MAR22" should be:
    83        | mark price | trading mode            | target stake | supplied stake | open interest | ref price | mid price | static mid price |
    84        | 100        | TRADING_MODE_CONTINUOUS | 399          | 1000           | 1             | 100       | 100       | 100              |
    85      When the parties submit the following AMM:
    86        | party | market id | amount  | slippage | base | lower bound | upper bound | lower leverage | upper leverage | proposed fee |
    87        | vamm1 | ETH/MAR22 | 1000000 | 0.01     | 100  | 85          | 150         | 4              | 4              | 0.01         |
    88      Then the AMM pool status should be:
    89        | party | market id | amount  | status        | base | lower bound | upper bound | lower leverage | upper leverage |
    90        | vamm1 | ETH/MAR22 | 1000000 | STATUS_ACTIVE | 100  | 85          | 150         | 4              | 4              |
    91  
    92      And set the following AMM sub account aliases:
    93        | party | market id | alias    |
    94        | vamm1 | ETH/MAR22 | vamm1-id |
    95      And the following transfers should happen:
    96        | from  | from account         | to       | to account           | market id | amount  | asset | is amm | type                  |
    97        | vamm1 | ACCOUNT_TYPE_GENERAL | vamm1-id | ACCOUNT_TYPE_GENERAL |           | 1000000 | USD   | true   | TRANSFER_TYPE_AMM_LOW |
    98  
    99    @VAMM
   100    Scenario: Simply submit pegged orders, cancel all orders on the orderbook, the pegged orders should be pegged to the AMM orders, AMM orders may not stick to market ticks.
   101      When the parties place the following pegged iceberg orders:
   102        | party | market id | side | volume | peak size | minimum visible size | pegged reference | offset |
   103        | lp1   | ETH/MAR22 | buy  | 100    | 10        | 2                    | BID              | 5      |
   104        | lp1   | ETH/MAR22 | sell | 100    | 10        | 2                    | ASK              | 5      |
   105      Then the order book should have the following volumes for market "ETH/MAR22":
   106        | side | price | volume |
   107        | buy  | 40    | 20     |
   108        | buy  | 94    | 10     |
   109        | sell | 106   | 10     |
   110        | sell | 160   | 10     |
   111  
   112      # ensure moving the network by 1 block doesn't change a thing
   113      When the network moves ahead "1" blocks
   114      Then the order book should have the following volumes for market "ETH/MAR22":
   115        | side | price | volume |
   116        | buy  | 40    | 20     |
   117        | buy  | 94    | 10     |
   118        | sell | 106   | 10     |
   119        | sell | 160   | 10     |
   120  
   121      # Now cancel the LP1BO and LP1SO orders, the pegged orders should remain where they are.
   122      When the parties cancel the following orders:
   123        | party | reference |
   124        | lp1   | LP1BO     |
   125        | lp1   | LP1SO     |
   126      Then the order book should have the following volumes for market "ETH/MAR22":
   127        | side | price | volume |
   128        | buy  | 40    | 0      |
   129        | buy  | 94    | 10     |
   130        | sell | 106   | 10     |
   131        | sell | 160   | 0      |
   132  
   133      # We pass through block end CheckBook call without problems, and the book volumes still check out.
   134      When the network moves ahead "1" blocks
   135      Then the order book should have the following volumes for market "ETH/MAR22":
   136        | side | price | volume |
   137        | buy  | 40    | 0      |
   138        | buy  | 94    | 10     |
   139        | sell | 106   | 10     |
   140        | sell | 160   | 0      |
   141  
   142      # Now trade, but not necessarily at market tick-compatible price, let's see what happens to the pegged orders. Based on the book, we know there's a buy order at 99, and a sell order at 101
   143      When the parties place the following orders:
   144        | party  | market id | side | volume | price | resulting trades | type       | tif     | reference |
   145        | party2 | ETH/MAR22 | sell | 5      | 99    | 1                | TYPE_LIMIT | TIF_GTC |           |
   146      And the network moves ahead "1" blocks
   147      Then the order book should have the following volumes for market "ETH/MAR22":
   148        | side | price | volume |
   149        | buy  | 40    | 0      |
   150        | buy  | 93    | 10     |
   151        | sell | 99    | 0      |
   152        | sell | 106   | 10     |
   153        | sell | 160   | 0      |
   154