I find that white, lean fish work best for ceviche. I've made it with bluefish and salmon before but I don't like it so much; you might have a different opinion. My standard ceviche fish is Pacific rockfish or lingcod that's been pre-frozen. Any sort of snapper, grouper, black seabass, porgy, sea trout, white seabass or yellowtail will work, as will pre-frozen freshwater fish like walleye or perch.
Marinating times make a difference when you are making ceviche. Depending on the size of the fish pieces, you will need at least 30 minutes and normally an hour for the citrus to "cook" the fish. Two hours is fine, but beyond that the ceviche, while still good, becomes more of a pickled fish thing. It's a subtle difference, but you can taste it. Citrus matters, too. You always want the dominant citrus in the marinade to be either limes or lemons, which are far more acidic than oranges, grapefruits or tangerines. Add these fruits as an accent to the ceviche; I am especially fond of a little grapefruit in the mix.