This is part one of a three-part series on price. Part two can be found here, and part three can be found here.
Price is the value of a single instance of an asset, such as 1 coin of a cryptocurrency or 1 share of a stock.
At the most basic level, the price of an asset is determined by a buyer and a seller agreeing upon the price.
This is a pretty simple claim, but already there are implications to this basic fact that we need to understand. First, let’s look at price discovery, which is the process by which the market connects buyers with sellers to determine the price of an asset.
Limit orders
The way traditional stock exchanges discover price is with an order book. Most centralized exchanges and a few decentralized exchanges have copied this model1. An order book contains two kinds of limit orders: sell orders and buy orders. An order book might look something like this:
Buys
10 ETH @ 3000 USD
1 ETH @ 3200 USD
2 ETH @ 3500 USD
5 ETH @ 3900 USD
Sells
8 ETH @ 4000 USD
2 ETH @ 4100 USD
12 ETH @ 4500 USD
5 ETH @ 5000 USD
Each of these orders is a willingness to buy or sell at the given price. “10 ETH @ 3000 USD” under the “Buys” section means that the person who placed the order is willing to buy 10 Ethereum for $3000 each, while “8 ETH @ 4000 USD” under the “Sells” column means that the person who placed the order is willing to sell 8 Ethereum for $4000 each.
These orders remain in the order book as long until they are filled or closed. An order is filled or closed when a buyer and a seller agree upon a price. All the orders that remain on the order book are unfilled or open. The people who placed these unfilled orders are called market makers because they have added their orders to the order book which allows for price discovery.
Let’s look at how filling/closing an order happens. Let’s say someone places a sell order for 6 ETH @ 3400 USD this person is called a market taker because their order matches orders from the order book and removes them from the market. To determine how much USD that seller receives, the exchange goes through the unfilled/open buy orders starting with the highest price and connects the market makers’ buys with the market taker’s sell:
The market taker’s sell for 6 ETH @ 3400 USD is matched with the market maker’s buy for 5 ETH @ 3900 USD. The market maker pays the market taker 3900 USD x 5 = 19500 USD, and the market taker gives the market maker 5 ETH.
The market taker’s order was to sell 6 ETH, and so far they have only sold 5 ETH. This is called a partial fill. The remaining 1 ETH @ 3400 USD order is placed back on the exchange.
Again the market taker’s buy for 1 ETH @ 3400 USD is matched with the market maker’s buy for 2 ETH @ 3500 USD. The market maker pays the market taker 3500 USD x 1 = 3500 USD, and the market taker gives the market maker 1 ETH.
Notice, in this case, the market maker’s order was for 2 ETH @ 3500 USD, and they have only received 1 ETH. So this is again a partial fill. The market maker’s unfilled order for 1ETH @ 3500 USD is placed back on the exchange’s order book.
The price in an order book is the most recent filled order on the exchange. In this case, that means the price of Ethereum on our hypothetical exchange is 3500.
Our order book now looks like this:
Buys
10 ETH @ 3000 USD
1 ETH @ 3200 USD
1 ETH @ 3500 USD
Sells
8 ETH @ 4000 USD
2 ETH @ 4100 USD
12 ETH @ 4500 USD
5 ETH @ 5000 USD
Liquidity on an Exchange
As we have seen above, the price of an asset on an exchange which uses an order book is determined by matching a buyer with a seller at the price offered by the market maker. But as we saw in the trade above, the market makers paid $3900 and $3500 for the Ethereum, even though the seller was willing to accept only $3400 for their Ethereum. The market makers could have paid significantly less for their Ethereum if they had known that there was a market taker willing to sell Ethereum for less. Market makers take a significant risk when they expose their price by placing an unfilled/open order in the order book.
However, market makers are critical to the process of price discovery in an order book. If everyone just waited to place orders as a market taker, there would be no market makers’ orders, so there would be no way to match a market maker’s order with a market taker’s order.
This brings us to the concept of liquidity. Liquidity is how easy it is to buy or sell an asset. An order-book-based exchange has good liquidity if it has a lot of large maker orders that are close together in price.
There are a few ways to measure liquidity on an exchange:
Bid-ask spread. The bid is the highest price of the highest open buy order on the order book. The ask is the lowest price of the lowest open sell order on the order book. The bid-ask spread is the bid subtracted from the ask. So in the case of our hypothetical exchange, the bid-ask spread is currently 500 USD. A high bid-ask spread is bad, because there may be market takers who are willing to buy or sell somewhere between the bid and the ask, but are waiting to place their orders to see if a price comes into the exchange which is more favorable. In other words, a high bid-ask spread means that the price on the exchange may be inaccurate. A low bid-ask spread is an indicator of good liquidity, while a high bid-ask spread is an indicator of bad liquidity.
Trade volume. When the bid-ask spread is high, there is a wide range in which people can manipulate the price. For example, on our hypothetical order book, the price is currently $3500. Two collaborators could place orders two orders: a sell for 0.01 ETH @ 3900 USD and a buy for 0.01 ETH @ 3900 USD. These two orders would match, and the new price of Ethereum on the exchange would be $3900. But this is just a price manipulation—the real price of Ethereum hasn’t changed. However, the price manipulators won’t want to place large orders on the exchange, because if they do that, they’ll risk that some other market taker comes in and trades at their proposed price before they can place their market taker order. So in this example, their trade volume is only 0.01 ETH. A high trading volume is an indicator of good liquidity, while a low trading volume is an indicator of bad liquidity.
Depth. Another way to manipulate the price of an asset is by actually executing market taker orders. This is effective when the order book has a lot of small orders. The total buy depth of our hypothetical exchange is currently 10 ETH + 1 ETH + 1 ETH = 12 ETH, and the total sell depth of our exchange is currently 8 ETH + 2 ETH + 12 ETH + 5 ETH = 27 ETH. However, total depth isn’t a good measure of liquidity, because it’s easy for whales to manipulate without risk. A whale could place a buy order for 1000 ETH @ 1 USD. Nobody would sell ETH for this price, so the order is pointless, but it would create very high total buy depth for the pair (now the total buy depth went from 12 ETH to 1012 ETH). To avoid this manipulation, we typically look at a percentage depth rather than a total depth. A percentage depth is the depth only considering orders within a certain percentage of the current price. Since the current price on our exchange is $3500, a 10% depth would consider prices between $3150 and $3850. This would give us a -10% depth of 1 ETH + 1 ETH = 2 ETH and a +10% depth of 0 ETH (there are no buy orders under $3850). A high percentage depth is an indicator of good liquidity, while a low percentage depth is an indicator of bad liquidity.
All this is to say, good liquidity results in accurate price discovery, while bad liquidity results in inaccurate price discovery.
I created the order book of our hypothetical exchange with just a few maker orders to make it easy to understand, and as a result, it has bad liquidity on all three measures of liquidity. Our bid-ask spread is $5002, our volume is only 6 ETH in the entire lifetime of the exchange, and our 10% depth is only 2 ETH buy depth and 0 ETH sell depth. Let’s look at a real exchange with good liquidity:
This screenshot is from the real Ethereum dashboard on Coinbase Pro. This gives us a lot of information.
The top left has the current price, as determined by the most recent trade, and the trade history on the right gives us recent prices and how large the trades were that determined those prices. For example, we can see that the only trades over 1 ETH in the last few seconds were at $3741.24 and $3741.36, which indicates that the real current price is may be a few cents cheaper than the given current price of $3741.75.
The left side has a partial order book and spread, which shows a lot of open orders and a very narrow spread: this indicates very good liquidity. The volume over the last 24 hours is shown on the top left as well, which is very high, also indicating good liquidity.
Price Impact
Let’s do another hypothetical trade on our hypothetical exchange. Remember that our order book currently looks like this:
Buys
10 ETH @ 3000 USD
1 ETH @ 3200 USD
1 ETH @ 3500 USD
Sells
8 ETH @ 4000 USD
2 ETH @ 4100 USD
12 ETH @ 4500 USD
5 ETH @ 5000 USD
We’ll place a buy order for 12 ETH @ 4100 USD.
Our buy for 12 ETH @ 4100 USD is partially filled with the sell for 8 ETH @ 4000 USD. We receive 8 ETH and pay 8 x 4000 USD = 32000 USD. This is a partial fill, so we now have a buy order for 4 ETH @ 4100 USD.
Our buy for 4 ETH @ 4100 USD is partially filled with the sell for 2 ETH @ 4100 USD. We receive 2 ETH and pay 2 x 4100 USD = 8200 USD. This is a partial fill, so we now have a buy order for 2 ETH @ 4100 USD.
Our buy for 2 ETH @ 4100 USD is not matched by any order in the order book, so it is placed in the order book as a maker order.
Our order book now looks like this:
Buys
10 ETH @ 3000 USD
1 ETH @ 3200 USD
1 ETH @ 3500 USD
2 ETH @ 4100 USD
Sells
12 ETH @ 4500 USD
5 ETH @ 5000 USD
Remember that the price of the asset is price of the last sale. Before this trade, the price was $3500, now it is $4100. This change in price is known as price impact.
The direction of price impact is determined by buy or sell: buys increase price, while sells decrease price. The magnitude of the price impact is determined by the size of the trade in relation to the liquidity. Large trades have a larger effect on price, while small trades have a smaller effect on price. Good liquidity means that trades have a smaller effect on price, while bad liquidity means that trades have a larger effect on price.
Let’s do one more trade. We’ll put in a sell order for 1 ETH @ 4100 USD. This matches the buy for 2 ETH @ 4100 USD, so we receive 4100 USD and give the market maker 1 ETH. The order book now looks like:
Buys
10 ETH @ 3000 USD
1 ETH @ 3200 USD
1 ETH @ 3500 USD
1 ETH @ 4100 USD
Sells
12 ETH @ 4500 USD
5 ETH @ 5000 USD
Notice, however, that the price has not changed: the price impact is 0. However, our trade removed buy depth from the order book, which means that it will be easier for future sells to reduce the price. Even when buys don’t have much price impact, they create positive pressure on price, while even when sells don’t have much price impact, they create negative pressure on price.
Arbitrage and liquidity of an asset
Let’s take a brief detour into a topic related to liquidity: arbitrage. The concept of arbitrage is simple: if an asset is traded in multiple exchanges, then a trade on one exchange can change the price on that exchange. This creates an arbitrage opportunity, which means that the price on one exchange is different from the price on another exchange. This allows an arbitrageur to buy on the exchange with the lower price, sell on the exchange with the higher price, and keep the difference in the prices.
Arbitrageurs are an important part of price discovery for an asset, because they spread the liquidity of an asset across multiple exchanges. A small exchange with poor liquidity may not be able to provide accurate price discovery for an asset, because they don’t have adequate liquidity. However, if their price falls out of sync with other exchanges with better liquidity, this creates an arbitrage opportunity. Arbitrageurs trading on the exchange with lower liquidity changes the price on the exchange until synchronizes with the exchanges with better liquidity.
This means that if an asset has good liquidity over a lot of exchanges, the price can be discovered accurately even if individual exchanges all have poor liquidity. On the other hand, even if a single exchange has seemingly good liquidity, the price may not be accurate if the coin is only traded in one location.
This doesn’t mean you should trade on exchanges with poor liquidity. If you trade on exchanges with poor liquidity, you run the risk of creating price impact on that exchange, which affects the amount you receive in a trade. Arbitrageurs then come in and take advantage of this arbitrage opportunity. By trading on exchanges with lower liquidity you are giving money to arbitrageurs.
LiveCoinWatch gives detailed liquidity information on the liquidity of coins across multiple exchanges.
In most cases, arbitrage is done by bots, so it’s impossible to move quickly enough to do arbitrage by hand. But it’s important to keep track of liquidity when you trade so that you aren’t paying a tax to arbitrageurs.
Beware of illiquid assets
Remember the core thesis of this article: the price of an asset is determined by a buyer and a seller agreeing upon the price. Good liquidity means that there are lots of buyers and sellers, with lots of opportunities to connect a buyer and seller, allows for highly accurate price discovery.
If there are no buyers for your asset at a price, your asset is not worth that price.
Let’s look at two examples of this:
Before Merchant Token ($MTO) was released, they did a presale where they sold the token for an amount that increased by $0.01 daily. So one day they sold it for $0.75, the next day they sold it for $0.76, etc. This created the impression that the coin was going up in price every day. However, the coin wasn’t listed on any exchanges: in fact, it wasn’t even released. This created a situation where the Merchant Token team was the only seller, and anyone interested in Merchant Token could be a buyer: the sell pressure could never be greater than the buy pressure. But when the coin became available on actual exchanges with real liquidity, investors who had purchased the coin were in for a nasty surprise: the coin they had bought for as much as $1.20 was worth around $0.30 once exposed to real price discovery. Since then the coin’s value has fallen further to around $0.22.
A frequent scam performed by meme coins is to provide liquidity for their coin on a decentralized exchange, and then remove the liquidity once people have purchased the coin. This scam is colloquially known as a rug pull. I will cover how decentralized exchanges work in a future post, but a simplified version of how a rug pull works is as follows. 1) The scammer promises to provide both buy and sell liquidity for their coin. If people want to buy the coin, they’ll sell the coin to them, and if people want to sell the coin, they’ll sell the coin to them. 2) People buy the coin—that is, they give the scammer money—believing that they will be able to sell the coin at a later date. 3) The scammer removes the liquidity, so that the people who bought the coin can no longer sell the coins they purchased, and the scammer keeps the money.
Exercises
Use the following exercises to test your understanding. Answers are below the questions.
This week’s exercises use the following example order book for ChainLink.
Buys
15 LINK @ 16 USD
10 LINK @ 16 USD
40 LINK @ 19 USD
Sells
15 LINK @ 20 USD
50 LINK @ 21 USD
10 LINK @ 25 USD
The current price of LINK is 20 USD.
Exercises
What is the bid-ask spread of LINK on this exchange?
What is the -10% depth of LINK on this exchange?
What is the +10% depth of LINK on this exchange?
Execute a limit buy for 25 LINK @ 22 USD on this exchange. What does the new order book look like?
What is the new price?
What is the price impact of executing this trade?
What is the new bid-ask spread?
What is the new -10% depth?
What is the new +10% depth?
Did your trade increase or decrease liquidity on this exchange?
Answers to Exercises
The top bid (buy order) is 19 USD, and the bottom ask (sell order) is 20 USD. 20 - 19 = 1 USD, so the bid-ask spread is 1 USD.
The current price is 20 USD, so the -10% price is 18 USD. The -10% depth is the sum of LINK in the orders between the -10% price and the current price, so the -10% depth is 40 LINK.
The +10% price is 22 USD. The sells between the current price and the +10% price are for 15 LINK and 50 LINK, so the +10% depth is 15 + 50 = 65 LINK.
The order for 25 LINK @ 22 USD fills the order for 15 LINK @ 20 USD, and then partially fills the order for 50 LINK @ 21 USD, so the new order book looks like:
Buys15 LINK @ 16 USD
10 LINK @ 16 USD
40 LINK @ 19 USD
Sells
35 LINK @ 21 USD
10 LINK @ 25 USD
The last match between the maker and taker order occurred at the price of 21 USD, so that’s the price.
The price was previously 20 USD and the new price is 21 USD, so the price impact was +1 USD.
The new bid-ask spread is 21 USD - 19 USD = 2 USD.
The -10% price is now 18.9 USD so the -10% depth is still 40 LINK.
The +10% price is now 23.1 USD so the +10% depth is 35 LINK.
The bid-ask spread is larger, and the +10% depth is smaller, so our trade has decreased the liquidity on the exchange. Technically, we’ve increased the volume of trades on the exchange, but volume is more effective as a tool for comparing one exchange to another, rather than comparing the same exchange at two different times.
Automatic market makers (AMMs) do not follow this model. I’ll discuss automatic market makers in a later post.
It’s worth noting that bid-ask spread is only meaningful as a percentage of price. A bid-ask spread of $500 is concerning for Ethereum on our exchange because it is 14% of the $3500 bid price and 13% of the $4000 ask price. A $500 spread for Bitcoin on an exchange where the bid is $50,000 and the ask is $50,500 would be less concerning, because $500 is only 1% of the bid and 1% of the ask.