Өзіндік сауданың алдын алу (STP) дегеніміз не?

2023-08-29 07:03

Өзіндік сауданың алдын алу (STP) дегеніміз не?

Өзіндік сауданың алдын алу (STP) – пайдаланушылардың өздеріне қарсы байқаусызда сауда жасауына жол бермеу үшін сауда платформалары пайдаланатын механизм. Өзіндік сауда деп аталатын бұл жағдай тапсырыс кітабында пайдаланушының жеке тапсырыстары бір-бірімен сәйкес келген кезде орын алады. STP әділ және ашық сауда ортасын қолдауда ерекше маңызды, өйткені ол нарықтағы бағалармен айла-шарғы жасаудың алдын алуға көмектеседі және сауда қызметінің нарықтағы шынайы мүдделерді дәл көрсететініне кепілдік береді.

Binance жүйесінде Өзіндік сауданың алдын алу (STP) пайдаланушы тапсырыстарын немесе пайдаланушының «tradeGroupId» идентификаторын өздерімен сәйкестендіруге жол бермейді.

Өзіндік сауданы не анықтайды?

Өзіндік сауда келесі сценарийлердің бірі бойынша орын алуы мүмкін:

  • Тапсырыс бірдей шотқа қарсы саудаланды.
  • Тапсырыс бірдей «tradeGroupId» шотына қарсы саудаланды.

STP іске қосылғанда не болады?

Тапсырыс бойынша өзіндік сауда жасау мүмкін болса, жүйе не істейтіні туралы төрт ықтимал режим бар.

  • ЖОҚ: Бұл режим тапсырысты өзіндік сатудың алдын алу жағдайынан босатады. Шоттар немесе «tradeGroupIds» салыстырылмайды, тапсырыстар қайтарылмайды және сауда орын алады.
  • EXPIRE_TAKER: Бұл режим тейкер тапсырысының қалған санын дереу жою арқылы саудаға жол бермейді.
  • EXPIRE_MAKER: Бұл режим мейкер тапсырысының қалған санын дереу жою арқылы саудаға жол бермейді.
  • EXPIRE_BOTH: Бұл режим тейкер мен ықтимал мейкер тапсырысының қалған сандарын дереу жою арқылы саудаға жол бермейді.

STP тейкер тапсырысының STP режиміне байланысты орын алады. Осылайша кітаптағы тапсырыстың STP режимі енді өзекті емес және барлық болашақ тапсырысты өңдеу үшін еленбейді.

Тапсырыс үшін STP режимін қалай орнатуға болады?

STP режимін тек төмендегі API соңғы нүктелері арқылы «selfTradePreventionMode» өрісін пайдаланып орнатуға болады:

  • POST /fapi/v1/order
  • POST /fapi/v1/batchOrders

«tradeGroupId» дегеніміз не?

Бірдей «tradeGroupId» бар әртүрлі шоттар бір «сауда тобының» бөлігі болып саналады. Сауда тобының мүшелері жіберген тапсырыстар тейкер тапсырысының STP режиміне сәйкес STP үшін жарамды.

Пайдаланушы GET fapi/v2/account (REST API) интерфейсінен API ішіндегі өз шоттарының бірдей «tradeGroupId» ішінде екенін растай алады.

Мәні -1-ге тең болса, онда «tradeGroupId» бұл шот үшін орнатылмаған, STP тек сол шот тапсырыстары арасында орын алуы мүмкін.

Қандай таңбалар STP-ны қолдайды?

GET fapi/v1/exchangeInfo ішіндегі барлық таңба STP-ны қолдайды.

Қандай тапсырыс түрлері STP-ны қолдайды?

Қолданылу мерзімі (timeInForce) GTC/IOC/GTD мәніне реттелгенде, келесі тапсырыс түрлері STP-ны қолдайды:

  • Лимиттік тапсырыс
  • Нарықтық тапсырыс
  • Тейк-профит тапсырысы
  • Стоп-маркет тапсырысы
  • Тейк-профит нарығы тапсырысы
  • Трейлинг стоп-маркет тапсырысы

FOK немесе GTX-те STP шарты қолданылу мерзімі (timeInForce) үшін күшіне енбейтінін ескеріңіз.

Өзгерту тапсырыстары STP режиміне қолдау көрсете ме?

Жоқ. Өзгерту тапсырыстары STP қолдамайды.

STP режиміне байланысты тапсырыстың күші жойылғанын қалай анықтауға болады?

Тапсырыс күйі «EXPIRED_IN_MATCH» ретінде көрсетіледі. «ORDER_TRADE_UPDATE» пайдаланушы деректер ағыны оқиғасында тапсырыс STP себебінен қайтарылып алынса, X өрісінде «EXPIRED_IN_MATCH» көрсетіледі.

{  "e":"ORDER_TRADE_UPDATE",      // Event Type  "E":1568879465651,             // Event Time  "T":1568879465650,             // Transaction Time  "o":{                                "s":"BTCUSDT",               // Symbol    "c":"TEST",                  // Client Order Id      // special client order id:      // starts with "autoclose-": liquidation order      // "adl_autoclose": ADL auto close order      // "settlement_autoclose-": settlement order for delisting or delivery    "S":"SELL",                  // Side    "o":"TRAILING_STOP_MARKET",  // Order Type    "f":"GTC",                   // Time in Force    "q":"0.001",                 // Original Quantity    "p":"0",                     // Original Price    "ap":"0",                    // Average Price    "sp":"7103.04",              // Stop Price. Please ignore with TRAILING_STOP_MARKET order    "x":"EXPIRED",               // Execution Type    "X":"EXPIRED_IN_MATCH",      // Order Status    "i":8886774,                 // Order Id    "l":"0",                     // Order Last Filled Quantity    "z":"0",                     // Order Filled Accumulated Quantity    "L":"0",                     // Last Filled Price    "N":"USDT",                  // Commission Asset, will not push if no commission    "n":"0",                     // Commission, will not push if no commission    "T":1568879465650,           // Order Trade Time    "t":0,                       // Trade Id    "b":"0",                     // Bids Notional    "a":"9.91",                  // Ask Notional    "m":false,                   // Is this trade the maker side?    "R":false,                   // Is this reduce only    "wt":"CONTRACT_PRICE",       // Stop Price Working Type    "ot":"TRAILING_STOP_MARKET", // Original Order Type    "ps":"LONG",                 // Position Side    "cp":false,                  // If Close-All, pushed with conditional order    "AP":"7476.89",              // Activation Price, only pushed with TRAILING_STOP_MARKET order    "cr":"5.0",                  // Callback Rate, only pushed with TRAILING_STOP_MARKET order    "pP": false,                 // ignore    "si": 0,                     // ignore    "ss": 0,                     // ignore    "rp":"0"                     // Realized Profit of the trade    "V": "NONE".                 // selfTradePreventionMode    "pm":"QUEUE"                 // price match type    "gtd":1768879465650          // good till date   }}

STP мысалдары

Барлық осы жағдайлар үшін осы мысалдарға арналған барлық тапсырыс бір шотта жасалған деп есептейік.

А сценарийі: пайдаланушы кітапта ағымдағы басқа тапсырыспен сәйкес келетін «selfTradePreventionMode:NONE» арқылы жаңа тапсырыс жібереді.

Maker Order: symbol=BTCUSDT side=BUY  type=LIMIT quantity=1 price=20000 selfTradePreventionMode=NONE Taker Order: symbol=BTCUSDT side=SELL type=LIMIT quantity=1 price=20000 selfTradePreventionMode=NONE

Нәтижесі: STP іске қосылмайды және тапсырыстар сәйкес келеді.

Мейкер тапсырысының тапсырыс күйі:

{    "orderId": 292864713,    "symbol": "BTCUSDT",    "status": "FILLED",    "clientOrderId": "43N239GaUaqshfG7825184",    "price": "20000",    "avgPrice": "20000",    "origQty": "1",    "executedQty": "1",    "cumQty": "1",    "cumQuote": "20000",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "BUY",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "NONE",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "updateTime": 1692849639460}

Тейкер тапсырысының тапсырыс күйі:

{    "orderId": 292864714,    "symbol": "BTCUSDT",    "status": "FILLED",    "clientOrderId": "43N239GaUaqshfG7825184",    "price": "20000",    "avgPrice": "20000",    "origQty": "1",    "executedQty": "1",    "cumQty": "1",    "cumQuote": "20000",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "SELL",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "NONE",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "updateTime": 1692849639460}

B сценарийі: пайдаланушы кітапта бар тапсырыстарымен сәйкес келетін «EXPIRE_MAKER» арқылы тапсырыс жібереді.

Maker Order 1: symbol=BTCUSDT side=BUY  type=LIMIT quantity=1 price=20002 selfTradePreventionMode=NONE Maker Order 2: symbol=BTCUSDT side=BUY  type=LIMIT quantity=1 price=20001 selfTradePreventionMode=NONE Taker Order 1: symbol=BTCUSDT side=SELL type=LIMIT quantity=1 price=20000 selfTradePreventionMode=EXPIRE_MAKER

Нәтижесі: кітапта болған тапсырыстар STP режиміне байланысты жойылады және тейкер тапсырысы кітапқа енгізіледі.

1-ші мейкер тапсырысы:

{    "orderId": 292864710,    "symbol": "BTCUSDT",    "status": "FILLED",    "clientOrderId": "testMaker1",    "price": "20002",    "avgPrice": "20002",    "origQty": "1",    "executedQty": "1",    "cumQuote": "20002",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "BUY",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "NONE",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "time": 1692849639460,    "updateTime": 1692849639460}

2-ші мейкер тапсырысы:

{    "orderId": 292864711,    "symbol": "BTCUSDT",    "status": "EXPIRED_IN_MATCH",    "clientOrderId": "testMaker2",    "price": "20001",    "avgPrice": "0.0000",    "origQty": "1",    "executedQty": "0",    "cumQuote": "0",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "BUY",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "NONE",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "time": 1692849639460,    "updateTime": 1692849639460}

Тейкер тапсырысын шығару:

{    "orderId": 292864712,    "symbol": "BTCUSDT",    "status": "PARTIALLY_FILLED",    "clientOrderId": "testTaker1",    "price": "20000",    "avgPrice": "20002",    "origQty": "2",    "executedQty": "1",    "cumQuote": "20002",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "SELL",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "EXPIRE_MAKER",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "time": 1692849639460,    "updateTime": 1692849639460}

С сценарийі: пайдаланушы кітапта бар тапсырыстарымен сәйкес келетін «EXPIRE_TAKER» арқылы тапсырыс жібереді.

Maker Order 1: symbol=BTCUSDT side=BUY  type=LIMIT quantity=1 price=20002  selfTradePreventionMode=NONE Maker Order 2: symbol=BTCUSDT side=BUY  type=LIMIT quantity=1 price=20001  selfTradePreventionMode=NONE Taker Order 1: symbol=BTCUSDT side=SELL type=LIMIT quantity=2 price=20000      selfTradePreventionMode=EXPIRE_TAKER

Нәтижесі: кітапта ағымдағы тапсырыстар қалады, ал тейкер тапсырысы жойылады.

1-ші мейкер тапсырысы:

{    "orderId": 292864710,    "symbol": "BTCUSDT",    "status": "NEW",    "clientOrderId": "testMaker1",    "price": "20002",    "avgPrice": "0.0000",    "origQty": "1",    "executedQty": "0",    "cumQuote": "0",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "BUY",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "NONE",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "time": 1692849639460,    "updateTime": 1692849639460}

2-ші мейкер тапсырысы:

{    "orderId": 292864711,    "symbol": "BTCUSDT",    "status": "NEW",    "clientOrderId": "testMaker2",    "price": "20001",    "avgPrice": "0.0000",    "origQty": "1",    "executedQty": "0",    "cumQuote": "0",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "BUY",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "NONE",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "time": 1692849639460,    "updateTime": 1692849639460}

Тейкер тапсырысын шығару:

{    "orderId": 292864712,    "symbol": "BTCUSDT",    "status": "EXPIRED_IN_MATCH",    "clientOrderId": "testTaker1",    "price": "20000",    "avgPrice": "0.0000",    "origQty": "3",    "executedQty": "0",    "cumQuote": "0",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "SELL",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "EXPIRE_TAKER",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "time": 1692849639460,    "updateTime": 1692849639460}

D сценарийі: пайдаланушының кітапта тапсырысы бар, содан кейін ағымдағы тапсырысқа сәйкес келетін «EXPIRE_BOTH» тапсырысын жібереді.

Maker Order: symbol=BTCUSDT side=BUY  type=LIMIT quantity=1 price=20002 selfTradePreventionMode=NONETaker Order: symbol=BTCUSDT side=SELL type=LIMIT quantity=3 price=20000 selfTradePreventionMode=EXPIRE_BOTH

Нәтижесі: екі тапсырыстың да күші жойылады.

Мейкер тапсырысы:

{    "orderId": 292864710,    "symbol": "BTCUSDT",    "status": "EXPIRED_IN_MATCH",    "clientOrderId": "testMaker1",    "price": "20002",    "avgPrice": "0.0000",    "origQty": "1",    "executedQty": "0",    "cumQuote": "0",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "BUY",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "NONE",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "time": 1692849639460,    "updateTime": 1692849639460}

Тейкер тапсырысы:

{    "orderId": 292864712,    "symbol": "BTCUSDT",    "status": "EXPIRED_IN_MATCH",    "clientOrderId": "testTaker1",    "price": "20000",    "avgPrice": "0.0000",    "origQty": "3",    "executedQty": "0",    "cumQuote": "0",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "SELL",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "EXPIRE_BOTH",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "time": 1692849639460,    "updateTime": 1692849639460}

E сценарийі: пайдаланушыда «EXPIRE_MAKER» тапсырысы бар, содан кейін ағымдағы тапсырысқа сәйкес келетін «EXPIRE_TAKER» жаңа тапсырысын жібереді.

Maker Order: symbol=BTCUSDT side=BUY  type=LIMIT quantity=1 price=20002 selfTradePreventionMode=EXPIRE_MAKER Taker Order: symbol=BTCUSDT side=SELL type=LIMIT quantity=1 price=20000 selfTradePreventionMode=EXPIRE_TAKER

Нәтижесі: тейкер тапсырысының STP режимі іске қосылады, сондықтан тейкер тапсырысы күшін жояды.

Мейкер тапсырысы:

{    "orderId": 292864710,    "symbol": "BTCUSDT",    "status": "NEW",    "clientOrderId": "testMaker1",    "price": "20002",    "avgPrice": "0.0000",    "origQty": "1",    "executedQty": "0",    "cumQuote": "0",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "BUY",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "EXPIRE_MAKER",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "time": 1692849639460,    "updateTime": 1692849639460}

Тейкер тапсырысы:

{    "orderId": 292864712,    "symbol": "BTCUSDT",    "status": "EXPIRED_IN_MATCH",    "clientOrderId": "testTaker1",    "price": "20000",    "avgPrice": "0.0000",    "origQty": "1",    "executedQty": "0",    "cumQuote": "0",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "SELL",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "EXPIRE_TAKER",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "time": 1692849639460,    "updateTime": 1692849639460}

F сценарийі: пайдаланушы ағымдағы тапсырысқа сәйкес келетін «EXPIRE_MAKER» нарықтық тапсырысын жібереді.

Maker Order: symbol=BTCUSDT side=BUY  type=LIMIT  quantity=1 price=20002  selfTradePreventionMode=NONE Taker Order: symbol=BTCUSDT side=SELL type=MARKET quantity=3 selfTradePreventionMode=EXPIRE_MAKER

Нәтижесі: ағымдағы тапсырыс STP режиміне байланысты жойылады, күйі «EXPIRED_IN_MATCH» ретінде көрсетіледі. Тапсырыс кітабындағы өтімділіктің төмендігіне байланысты жаңа тапсырыстың да күші жойылады және «МЕРЗІМІ ӨТКЕН» күйі көрсетіледі.

Мейкер тапсырысы:

{    "orderId": 292864710,    "symbol": "BTCUSDT",    "status": "EXPIRED_IN_MATCH",    "clientOrderId": "testMaker1",    "price": "20002",    "avgPrice": "0.0000",    "origQty": "1",    "executedQty": "0",    "cumQuote": "0",    "timeInForce": "GTC",    "type": "LIMIT",    "reduceOnly": false,    "closePosition": false,    "side": "BUY",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "EXPIRE_MAKER",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "time": 1692849639460,    "updateTime": 1692849639460}

Тейкер тапсырысы:

{    "orderId": 292864712,    "symbol": "BTCUSDT",    "status": "EXPIRED",    "clientOrderId": "testTaker1",    "price": "20000",    "avgPrice": "0.0000",    "origQty": "3",    "executedQty": "0",    "cumQuote": "0",    "timeInForce": "GTC",    "type": "MARKET",    "reduceOnly": false,    "closePosition": false,    "side": "SELL",    "positionSide": "BOTH",    "stopPrice": "0",    "workingType": "CONTRACT_PRICE",    "priceMatch": "NONE",    "selfTradePreventionMode": "EXPIRED",    "goodTillDate": 0,    "priceProtect": false,    "origType": "LIMIT",    "time": 1692849639460,    "updateTime": 1692849639460}