For information on changes for our US clients, please visit our Support Center article.

Due to increased demand, account verification may be delayed. Please avoid submitting multiple requests, and for best results, review our document requirements beforehand.
Search
Self trading prevention
Kraken restricts customers from filling their own orders (simultaneously being the maker and taker for the same trade). This prevents wash trading, which is a form of market manipulation in which a trader simultaneously buys and sells the same financial instrument to create misleading, artificial activity in the market.
It is possible to place a self matching orders successfully (valid order IDs would be returned), but the taker order would be immediately cancelled. 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 cancelled (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 cancelled.
  • If there are two resting orders, the first would have time priority and the second might cancel along with any remaining volume from the third aggressing order.
Within account management, an order that has been cancelled due to the self trading prevention would show a status of "Canceled" with the reason "Cannot trade with self":
Trading_CanceledCannotTradeWithSelf_09102021.png
The following is an example of the order flow and resulting order status via the Kraken REST API. The API calls place a buy limit order at the top of the XDGUSD order book, immediately followed by a sell market order for XDGUSD, resulting in the market order being automatically cancelled due to the self trading restriction:
  • $ ./krakenapi AddOrder pair=xdgusd type=buy ordertype=limit price=0.002449 volume=5000 {"error":[],"result":{"descr":{"order":"buy 5000.00000000 XDGUSD @ limit 0.0024490"},"txid":["OQMVWA-LSE57-4LPF45"]}}
  • $ ./krakenapi AddOrder pair=xdgusd type=sell ordertype=market volume=5000 {"error":[],"result":{"descr":{"order":"sell 5000.00000000 XDGUSD @ market"},"txid":["OSLIEB-IQBNV-K7P5ET"]}}
  • $ ./krakenapi QueryOrders txid=OSLIEB-IQBNV-K7P5ET {"error":[],"result":{"OSLIEB-IQBNV-K7P5ET":{"refid":null,"userref":0,"status":"canceled","reason":"Cannot trade with self","opentm":1588683502.71,"closetm":1588683502.7117,"starttm":0,"expiretm":0,"descr":{"pair":"XDGUSD","type":"sell","ordertype":"market","price":"0","price2":"0","leverage":"none","order":"sell 5000.00000000 XDGUSD @ market","close":""},"vol":"5000.00000000","vol_exec":"0.00000000","cost":"0.000000000","fee":"0.000000000","price":"0.000000000","stopprice":"0.000000000","limitprice":"0.000000000","misc":"","oflags":"fciq"}}}
Full details of the order information fields/values are available via the QueryOrders and ClosedOrders documentation.
The decimal and thousands separators shown in this article may differ from the formats displayed on our trading platforms. Review our article on how we use points and commas for more information.