Kraken Derivatives restricts clients from matching their own orders (filling a maker order with one’s own taker order). This restriction prevents wash trading, which is a form of market manipulation in which a trader executes orders against themselves to create misleading, artificial activity in the market.
Note: Self trading prevention is active across all related accounts including master accounts and linked sub-accounts.
It is possible to place a self matching orders successfully (valid order IDs would be returned), but by default the taker order would be immediately canceled. The specific order flow that occurs when two orders from the same account would match is as follows:
- If two orders of the same quantity would result in self-execution, the maker (limit) order would stay on the order book and the taker (market) order would be canceled (regardless of the size of the order).
- In the case that an order can be partially filled from the order book, the remaining volume that would result in a self match would be canceled.
Within account management, an order that has been canceled due to the self trading prevention would show a status of "OrderRejected" with the reason "Would match self". You are also able to change the self trade strategy on your account via our REST API endpoint "/derivatives/api/v3/self-trade-strategy"
Below are the strategy options and their description:
- REJECT_TAKER: default behaviour, rejects the taker order that would match against a maker order from any sub-account
- CANCEL_MAKER_SELF: only cancels the maker order if it is from the same account that sent the taker order
- CANCEL_MAKER_CHILD: only allows master to cancel its own maker orders and orders from its sub-account
- CANCEL_MAKER_ANY: allows both master accounts and their subaccounts to cancel maker orders
The following is an example of the order status via the Kraken Derivatives API for a sell order in PF_MATICUSD market where a limit buy order at the top of book is in place, resulting in the market order being automatically cancelled due to the default self trading restriction:
{
"result":"success",
"sendStatus":{
"order_id":"6cd99bd6-518a-4326-a652-22511d83d08c",
"status":"selfFill",
"receivedTime":"2023-01-23T14:23:56.150Z",
"orderEvents":[
{
"uid":"6cd99bd6-518a-4326-a652-22511d83d08c",
"order":{
"orderId":"6cd99bd6-518a-4326-a652-22511d83d08c",
"cliOrdId":null,
"type":"ioc",
"symbol":"pf_maticusd",
"side":"sell",
"quantity":10,
"filled":0,
"limitPrice":0.7425,
"reduceOnly":false,
"timestamp":"2023-01-23T14:23:56.150Z",
"lastUpdateTimestamp":"2023-01-23T14:23:56.150Z"
},
"reason":"WOULD_EXECUTE_SELF",
"type":"REJECT"
}
]
},
"serverTime":"2023-01-23T14:23:56.216Z"
}
"result":"success",
"sendStatus":{
"order_id":"6cd99bd6-518a-4326-a652-22511d83d08c",
"status":"selfFill",
"receivedTime":"2023-01-23T14:23:56.150Z",
"orderEvents":[
{
"uid":"6cd99bd6-518a-4326-a652-22511d83d08c",
"order":{
"orderId":"6cd99bd6-518a-4326-a652-22511d83d08c",
"cliOrdId":null,
"type":"ioc",
"symbol":"pf_maticusd",
"side":"sell",
"quantity":10,
"filled":0,
"limitPrice":0.7425,
"reduceOnly":false,
"timestamp":"2023-01-23T14:23:56.150Z",
"lastUpdateTimestamp":"2023-01-23T14:23:56.150Z"
},
"reason":"WOULD_EXECUTE_SELF",
"type":"REJECT"
}
]
},
"serverTime":"2023-01-23T14:23:56.216Z"
}