I use optical switches on my Bridgeport retro, they are housed in Alu boxes and a rod protrudes from either side and is held central by a spring either side. The rod has a flag on it which blocks the LED until the rod comes against the stop. I did tests on these with glass scales accurate to 0.005mm and out of 100 runs I only had 1 (possibly 2, it was a long time ago) where the DRO did not register 0.000mm and the 1 time it read 0.005mm, so its safe to say they are accurate. Oh and another thing was this was on my first retrofit and it was a well worn Bridgeport so the 1 time it was off could well have been due to the saddle pivoting.
Another option you have if you have encoders is the board from CNC Building blocks, it looks for the index pulse then counts the preset amount of encoder lines (set by dip switches) then tells Mach it is homed. I have this setup on my Lathe and it too is deadly accurate, probably more so than the optical switches.
The opticals are the cheapest option, about £10 for the 3 if I remember correctly but obviously you need to account for your time in making up suitable waterproof housings.
Below is a pic of the one I made for the Z Axis so you get the idea of what my ramblings are about
Hood