Marinating the fish. In a 1 ½-quart glass or stainless steel bowl, combine the fish, lime juice and onion. You’ll need enough juice to cover the fish and allow it to float somewhat freely; too little juice means unevenly “cooked” fish. Cover and refrigerate for about 20 minutes, until a cube of fish no longer looks raw when broken open. Pour into a colander and drain off the lime juice (reserving it for a Fishy Michelada Cocktail if you're so inclined).
The flavorings. In a large bowl, mix together the tomatoes, green chiles, cilantro, olives and optional olive oil. Stir in the fish, then taste and season with salt, usually about ¾ teaspoon, and orange juice or sugar (the sweetness of the orange juice or sugar helps balance some of the typical tanginess of the ceviche). Cover and refrigerate if not serving immediately.
Serving the ceviche. Just before serving, stir in the diced avocado, being careful not to break up the pieces. For serving, you have several options: set out your ceviche in a large bowl and let people spoon it onto individual plates to eat with chips or saltines; serve small bowls of ceviche (I like to lay a bed of frisée lettuce in each bowl before spooning in the ceviche) and serve tostadas, chips or saltines alongside; or pile the ceviche onto chips or tostadas and pass around for guests to consume on these edible little plates. Whichever direction you choose, garnish the ceviche with leaves of cilantro before setting it center stage.
Working ahead: The fish may be marinated a day in advance; after about 4 hours, when the fish is “cooked,” drain it so that it won’t become too limey. For the freshest flavor, add the flavorings to the fish no more than a couple of hours before serving.