vegaprotocol / vega

A Go implementation of the Vega Protocol, a protocol for creating and trading derivatives on a fully decentralised network.
https://vega.xyz
GNU Affero General Public License v3.0
36 stars 22 forks source link

Can fill orders when limit price less than price monitoring bounds minValidPrice #5206

Closed vega-paul closed 2 years ago

vega-paul commented 2 years ago

Proposed and enacted market

{"id":"71134-270","block":"B1E3827562521777268C9EC58DB2397DADFD3F48C34E1A3580DE8812B8E31E97","type":"BUS_EVENT_TYPE_PROPOSAL","proposal":{"id":"4e26bb7599fccbe54dbaa8017d029ebaaede07b0ba55b9255859fb2ef69616b8","reference":"C9A5ED743D","partyId":"8d43f19d16d338ca7c0030bf4ffadc226c1e91497a428d4d4224bc6f8218ae52","state":"STATE_ENACTED","timestamp":"1649439070863452000","terms":{"closingTimestamp":"1649439079","enactmentTimestamp":"1649439081","validationTimestamp":"1649439071","newMarket":{"changes":{"instrument":{"name":"Futures System-Tests Market","code":"CRYPTO:VEGA CORE SYS TEST","future":{"settlementAsset":"64c973e3ec83ef0ec562e64315bb2d5a6ff2c24cfdc8382d53ebec127523286a","quoteName":"USD","oracleSpecForSettlementPrice":{"pubKeys":["8d43f19d16d338ca7c0030bf4ffadc226c1e91497a428d4d4224bc6f8218ae52"],"filters":[{"key":{"name":"oracle.test.settlementBF82F","type":"TYPE_INTEGER"},"conditions":[{"operator":"OPERATOR_GREATER_THAN_OR_EQUAL","value":"0"}]}]},"oracleSpecForTradingTermination":{"pubKeys":["8d43f19d16d338ca7c0030bf4ffadc226c1e91497a428d4d4224bc6f8218ae52"],"filters":[{"key":{"name":"oracle.test.termination5C170","type":"TYPE_BOOLEAN"},"conditions":[{"operator":"OPERATOR_EQUALS","value":"True"}]}]},"oracleSpecBinding":{"settlementPriceProperty":"oracle.test.settlementBF82F","tradingTerminationProperty":"oracle.test.termination5C170"}}},"decimalPlaces":"6","metadata":["asset_class:fx/crypto","product:futures"],"priceMonitoringParameters":{"triggers":[{"horizon":"5","probability":"0.95","auctionExtension":"10"}]},"liquidityMonitoringParameters":{"targetStakeParameters":{"timeWindow":"10","scalingFactor":5},"auctionExtension":"1"},"logNormal":{"riskAversionParameter":0.001,"tau":0.00011407711613050422,"params":{"r":0.016,"sigma":1.5}},"positionDecimalPlaces":"6"},"liquidityCommitment":{"commitmentAmount":"3905000000000000000","fee":"0.3","sells":[{"reference":"PEGGED_REFERENCE_BEST_ASK","proportion":13,"offset":"1000000"}],"buys":[{"reference":"PEGGED_REFERENCE_BEST_BID","proportion":2,"offset":"1000000"}],"reference":"C9E000A041"}}}},"version":1,"chainId":"test-chain-Ury7yE"}

Before test orders , we have following data

{'markPrice': '977142641', 'bestBidPrice': '900000000', 'bestBidVolume': '1741000000', 'bestOfferPrice': '1200000000', 'bestOfferVolume': '1307000000', 'bestStaticBidPrice': '900000000', 'bestStaticBidVolume': '5000000', 'bestStaticOfferPrice': '1200000000', 'bestStaticOfferVolume': '5000000', 'midPrice': '1050000000', 'staticMidPrice': '1050000000', 'market': '4e26bb7599fccbe54dbaa8017d029ebaaede07b0ba55b9255859fb2ef69616b8', 'timestamp': '1649439170104648000', 'openInterest': '7000000', 'indicativePrice': '0', 'marketTradingMode': 'TRADING_MODE_CONTINUOUS', 'targetStake': '1890917581731150', 'suppliedStake': '3905000000000000000', 'priceMonitoringBounds': [{'minValidPrice': '975999652', 'maxValidPrice': '978286620', 'trigger': {'horizon': '5', 'probability': '0.95', 'auctionExtension': '10'}, 'referencePrice': '977142641000000'}], 'marketValueProxy': '3905000000000000000', 'liquidityProviderFeeShare': [{'party': '8d43f19d16d338ca7c0030bf4ffadc226c1e91497a428d4d4224bc6f8218ae52', 'equityLikeShare': '1', 'averageEntryValuation': '3905000000000000000'}], 'auctionEnd': '0', 'auctionStart': '0', 'indicativeVolume': '0', 'trigger': 'AUCTION_TRIGGER_UNSPECIFIED', 'extensionTrigger': 'AUCTION_TRIGGER_UNSPECIFIED'}

Submitted two orders at to match at less than the minValidPrice 975999652

{"id":"71241-273","block":"A6CE602F5CCAFC3828562628557CAE6B00214392BE428D36CD03F900CBB5F2EA","type":"BUS_EVENT_TYPE_ORDER","order":{"id":"779D8E0CF019F245C85D4DE134D8060B6EB1678472AFB6F45652CF8797A46576","marketId":"4e26bb7599fccbe54dbaa8017d029ebaaede07b0ba55b9255859fb2ef69616b8","partyId":"a77150f668c18794ead921561f6e55bdb2dceaa2afc7fc5529ec85dead9d4d99","side":"SIDE_BUY","price":"975999651","size":"1000000","remaining":"1000000","timeInForce":"TIME_IN_FORCE_GTC","type":"TYPE_LIMIT","createdAt":"1649439267600599000","status":"STATUS_ACTIVE","reference":"a77150f668c18794ead921561f6e55bdb2dceaa2afc7fc5529ec85dead9d4d99-381db2b5-a1e9-43b5-977e-bb3abf7f4fba","version":"1","batchId":"2"},"version":1,"chainId":"test-chain-Ury7yE","txHash":"EAC54CB994D4A74C87B144A550AAD374DDBE62081929E2B74CED914EE7142B43"}
{"id":"71241-309","block":"A6CE602F5CCAFC3828562628557CAE6B00214392BE428D36CD03F900CBB5F2EA","type":"BUS_EVENT_TYPE_ORDER","order":{"id":"659386E19DD0593CBAEF91BF599C9D6F86D3B8D40AA55B06AED21646A198A798","marketId":"4e26bb7599fccbe54dbaa8017d029ebaaede07b0ba55b9255859fb2ef69616b8","partyId":"4a05cf9789cec3be5d75fd209f2ec478a8a6ee7ef0378c0e80c2bc1464c8d274","side":"SIDE_SELL","price":"975999651","size":"1000000","remaining":"1000000","timeInForce":"TIME_IN_FORCE_GTC","type":"TYPE_LIMIT","createdAt":"1649439267600599000","status":"STATUS_ACTIVE","reference":"4a05cf9789cec3be5d75fd209f2ec478a8a6ee7ef0378c0e80c2bc1464c8d274-cac88e07-b07e-43d9-ab9e-ca23195394ff","version":"1","batchId":"2"},"version":1,"chainId":"test-chain-Ury7yE","txHash":"ACC05E4406B9D841CD88315AA7C3CA12DADDB2BAB8300A31633819D22871398E"}

These orders filled, expected to take market to price monitoring auction and remain ACTIVE

{"id":"71248-276","block":"AF1863F409FC485589ECB5F0CCD038F6D5053A7A3C2D27E567A140A9548260E8","type":"BUS_EVENT_TYPE_ORDER","order":{"id":"659386E19DD0593CBAEF91BF599C9D6F86D3B8D40AA55B06AED21646A198A798","marketId":"4e26bb7599fccbe54dbaa8017d029ebaaede07b0ba55b9255859fb2ef69616b8","partyId":"4a05cf9789cec3be5d75fd209f2ec478a8a6ee7ef0378c0e80c2bc1464c8d274","side":"SIDE_SELL","price":"975999651","size":"1000000","timeInForce":"TIME_IN_FORCE_GTC","type":"TYPE_LIMIT","createdAt":"1649439267600599000","status":"STATUS_FILLED","reference":"4a05cf9789cec3be5d75fd209f2ec478a8a6ee7ef0378c0e80c2bc1464c8d274-cac88e07-b07e-43d9-ab9e-ca23195394ff","updatedAt":"1649439279059203000","version":"1","batchId":"2"},"version":1,"chainId":"test-chain-Ury7yE"}
{"id":"71248-280","block":"AF1863F409FC485589ECB5F0CCD038F6D5053A7A3C2D27E567A140A9548260E8","type":"BUS_EVENT_TYPE_ORDER","order":{"id":"779D8E0CF019F245C85D4DE134D8060B6EB1678472AFB6F45652CF8797A46576","marketId":"4e26bb7599fccbe54dbaa8017d029ebaaede07b0ba55b9255859fb2ef69616b8","partyId":"a77150f668c18794ead921561f6e55bdb2dceaa2afc7fc5529ec85dead9d4d99","side":"SIDE_BUY","price":"975999651","size":"1000000","timeInForce":"TIME_IN_FORCE_GTC","type":"TYPE_LIMIT","createdAt":"1649439267600599000","status":"STATUS_FILLED","reference":"a77150f668c18794ead921561f6e55bdb2dceaa2afc7fc5529ec85dead9d4d99-381db2b5-a1e9-43b5-977e-bb3abf7f4fba","updatedAt":"1649439279059203000","version":"1","batchId":"2"},"version":1,"chainId":"test-chain-Ury7yE"}
EVODelavega commented 2 years ago

At first glance, this looks odd, but not impossible. The orders uncross just 1 below the minimum price. If the horizon has moved between your getting the market data, and the orders actually uncrossing, it's possible for the price bound to have moved a little. To confirm it'd be worth checking the market data immediately after the trade, and perhaps trying to run this a couple of times over, perhaps changing the order prices to be a bit further out of bounds