Trading RulesLast updated: 08-03-2019
Bitvavo operates a central limit order book (CLOB) trading platform, where digital assets can be exchanged for digital assets or fiat. This document describes the rules for trading on the platform.
To place an order on an order book, the account must have enough available balance to cover the total value of the amount required on hold. Orders have the following parameters:
- Market: Name of the market, in the format BASE-QUOTE (e.g. BTC-EUR)
- Side: Buy or sell
- Order Type: Limit (buy/sell a specified amount of the base asset for a specified price in the quote asset) or market (buy/sell a specified amount or price of either base or quote asset for the best possible price)
- Amount: The amount of the base asset to be bought/sold (Required for limit orders, optional for market orders)
- Amount Quote: The amount specified in the quote asset (Optional for market orders, either Amount or AmountQuote is required)
- Price: The price for base asset specified in the quote asset (Required for limit orders)
- Time In Force: This specifies how long the order should be placed on the order book. This only applies to limit orders. The following options are allowed:
- GTC: Good-Til-Canceled. This is the default setting and places an order on the order book until it is filled or canceled.
- IOC: Immediate-Or-Cancel. This allows (partial) filling of the order when it is submitted. The remaining amount that cannot be matched immediately will be canceled.
- FOK: Fill-Or-Kill. This ensures that the entire order is either filled or canceled. Partial fills are not possible.
- Self Trade Prevention: Trading with yourself is not allowed. This setting handles what should be done if your order matches with one of your own orders. The following options are allowed:
- Decrement And Cancel: This is the default setting and modifies both orders by the amount that would been filled. This results in the smaller of the two orders being canceled, and the other order being decremented in size.
- Cancel Oldest: Cancels the oldest order.
- Cancel Newest: Cancels the newest order.
- Cancel Both: Cancels both orders.
- Post Only: Limit orders that have this set to true will be canceled if matched immediately. This ensures that you pay the maker fee. The default value is false (i.e. Post Only is off).
- Disable Market Protection: Market orders that have this set to true will not be canceled if the next fill price is 10% worse than the best fill price (best bid/ask for at first match). This protects users against executing trades at prices that may be undesirable. The default value is false (i.e. protection is on).
- Response Required: If this value is set to false, only the Order Id of the newly created order is returned. The default value is true (i.e. a full response)
Once an order is placed, a certain amount of funds are placed on hold. This means that they can only be used to fulfill the order for which they are reserved. The amount of funds that is placed on hold varies for buy and sell orders, and limit and market orders. Amounts placed on hold are rounded up.
- Limit buy orders: amount * price * (1 + max fee) of quote asset. Example: buy 1 BTC @ 5001 EUR: 1*5001*1.0025 = 5013.5025 -> 5013.51 EUR on hold.
- Limit sell orders: amount of base asset. Example: sell 1 BTC @ 5001 EUR: 1 BTC on hold.
- Market buy orders with amountQuote supplied: price in quote asset. Example: buy 1000 EUR worth of BTC at the best price. 1000 EUR on hold.
- Market buy orders with amount supplied: all available funds in quote asset. Example: buy 1 BTC at the best price. All available EUR on hold.
- Market sell orders with amountQuote supplied: all available funds in base asset. Example: sell 1000 EUR worth of BTC at the best price. All available BTC on hold.
- Market sell orders with amount supplied: amount in base asset. Example: sell 1 BTC at the best price. 1 BTC on hold.
- Cancelling an order returns the remaining amount on hold back to the account.
- A fill lowers the remaining amount (required) on hold.
Order Matching during Regular Trading
- Orders that are matched immediately are taker orders. Orders that are not matched immediately and are placed in the order book are maker orders.
- Orders are matched based on price-time priority. This means that taker orders are matched with the best available price. If several orders have the same price, the oldest maker order is matched. This process continues until the order is filled, placed on the order book, or canceled.
- The price paid/received is determined by the maker order. This means that limit orders can be filled at prices better than their limit price.
- Fills are settled nearly instantly.
Order Matching during Auctions and Halted markets
- Order books are placed in Auction mode after a market has been Halted and before Regular Trading resumes.
- Orders can be placed and canceled when a market is Halted. No orders will be matched during Halted markets.
- Orders can not be placed or canceled when a market is in Auction. Orders will be matched during this period according to the following steps:
- Active limit orders are used to determine the price at which the most units of the base asset are traded. If there is no price where trades occur, all open market orders are canceled and Regular Trading resumes.
- If a price is obtained in the previous step, this price is used to prevent self trades according to the policy specified when the newest order was placed.
- The remaining active limit orders are used obtain a (possibly new) price at which the most units of the base asset are traded. If there is no price where trades occur, all open market orders are canceled and Regular Trading resumes.
- Orders are matched based on price-time priority and all orders are considered taker orders. This means that the oldest market orders will be filled first, at the price determined in the previous step. Once there are no more market orders, the limit order with the best price will be filled first, at the price determined in the previous step. When no more orders can be matched at the determined price, all remaining market orders will be canceled and Regular Trading resumes.
- No order book updates will be broadcasted when markets are Halted or in Auction.
- The fee is charged (and rebates are given) in the quote asset.
- Fees are calculated for each fill.
- Fees are rounded up, to the precision of the asset.
- Fees are averaged for each order. This means that if one fill has paid more in fees than required, the next fill pays a lower fee, so that the average fee paid equals or exceeds the fee tier the user is in.
- Example: a buy order of 0.1 BTC @ 4951 EUR is filled with three separate fills. The fee charged is 0.1%
- Fill 1: 0.0331 @ 4951 = 163.8781 cost, 0.1638781 fee (total 164.0419781). The amount deducted from hold is 164.05. The user paid 0.1638781 EUR fee, and 0.0080219 EUR due to rounding. Notice that the effective fee is 0.1048950409% for this fill.
- Fill 2: 0.0610 @ 4951 = 302.011 cost, 0.302011 fee (total 302.313011). The amount deducted from hold is 302.31. The user paid 0.302011 EUR fee, and receives 0.003011 EUR back that was paid due to rounding. Notice that the effective fee is 0.09900301645% for this fill.
- Fill 3: 0.0059 @ 4951 = 29.2109 cost, 0.0292109 fee (total 29.2401109). The amount deducted from hold is 29.24. The user paid 0.0292109 fee, and receives 0.0001109 EUR back that was paid due to rounding. Notice that the effective fee is 0.0996203472% for this fill.
- All traders pay the fees mentioned in the fees structure. Bitvavo may temporarily increase the fee tier for market makers and large institutions (determined on a case-by-case basis). Bitvavo does not provide preferential fees lower than those mentioned in the best tier.
- The 30 day rolling volume used to determine the fee tier is calculated at 00:00 UTC each day, or upon request (Settings -> Trading fees)
- All traders have equal access to the web interfaces and Bitvavo API. Bitvavo does not provide prioritized access to any trader.
- All traders have full and equal real-time access to market data. Market data is made available through the web interfaces and Bitvavo API.
- Traders are prohibited from engaging in market manipulation which includes, but is not limited to, the following activities:
- Pump and dumps: traders who artificially inflate the price of a digital currency through false and misleading positive statements, in order to sell the cheaply purchased digital currency at a higher price.
- Wash trading: traders who buy and sell a digital currency for the express purpose of feeding misleading information to the market.
- Front-running: traders who buy or sell digital currency with foreknowledge that will influence the price of the digital currency, resulting in an economic gain for the trader.
- Churning: traders who place both buy and sell orders nearly at the same price to increase the price by attracting more traders.
- Quote stuffing: traders who quickly entering and then withdrawing large orders in an attempt to flood the market with quotes, causing competitors to lose time in processing them.
- Spoofing / layering: traders who create the illusion of pessimism (or optimism) in the market by placing buy or sell orders without the intention of filling them.
- Bitvavo may suspend trading temporarily for maintenance or for other reasons. Normally Bitvavo will proceed according to the following steps:
- Announcing scheduled downtime: Traders will be informed through a message on account.bitvavo.com.
- Scheduled downtime begins: Traders will be informed through a message on account.bitvavo.com.
- Scheduled downtime ends: Markets will be placed in Halted mode. Traders will be informed through a message on account.bitvavo.com when trading resumes. This will be at least 15 minutes after the scheduled downtime ended.