The [Marketmaking Introduction](MarketmakingIntroduction.md) talks a bit about marketmaking generally but here we're going to focus specifically on oracles fetching prices.
Marketmakers usually want some external pricing information to derive the prices they use for bids and asks. This external price information is fetched and passed to the marketmaker by 'oracles'. An oracle is really just an external source of price information as far as the marketmaker is concerned.
There's one more wrinkle. Most of the time you want the marketmaker to use the oracle for the *current* market, but that's not necessarily always the case. Where normally you could specify:
everything would work as you expect, and it would use the Pyth oracle to fetch prices for ETH/USD.
But you might feel you have an advantage if you use Serum's BTC/USDC market for your prices on BTC-PERP. The way you could achieve that is by using the `--oracle-market` parameter. This defaults to the current market but if you specify this parameter you override this and can use a different market for pricing. For example:
The FTX oracle queries FTX for the current price on the FTX market.
## Market
The Market oracle looks at a market that `mango-explorer` knows about. It can handle 3 types of market:
- Serum
- Spot
- Perp
**Note** The spot price will always be the same as the serum price, because spot markets use the underlying serum market for trades. The same is not true in reverse, because there are many more serum markets than spot markets.
## Pyth
The Pyth oracle fetches price data from Pyth's on-chain oracle system.
## Stub
The 'stub' oracle is the minimal oracle Mango uses when no other oracle data is readily available.