Unlike meat stock, fish stock requires only a very short cooking time (if cooked too long, it becomes bitter). Have your fishmonger clean the fish trimmings for you.
Heat oil in a large pot. Add carrot, onion, celery, and fennel, and cook until slightly soft, about 5 minutes. Add fish heads and bones, and cook until they turn white and opaque, about 5 minutes.
Add remaining ingredients and bring to a boil. Lower heat to medium and cook for 20 minutes. Skim off any foam that rises to the top.
Strain through a fine mesh strainer lined with cheesecloth. To store, let cool, then freeze in small containers for future use.