You could create a counter at the high and low end of the oscillation that when it reaches a certain value triggers an auto-tune. This is a band-aid fix though, as you shouldn't need to auto-tune frequently unless there is some inherent instability in the system process on it's own. You might want to try manually adjusting some of the PID values after you've auto-tuned to force a more stable system over time.
Couple of things that might help: Increase the P-value. Outside of the P range you're valve is either fully open, or fully closed. Increasing the P-Value range (100% is allowed) forces the PID function to always run it's calculations instead of going full open on the valve.
Increase the I-value. Larger I-values smooth out and tries to prevent overshooting of the process variable based on the error. It may take longer to stabilize, but it helps prevent overshoot. If fact if you just run a PI system with a larger I-value, you will never hit your process variable.
D-Value, I forget which way this one affects the system as I usually set it to 0 for most my applications, but this is your predictor variable. It tries adjust the response based on where it believes the system is going. Strong D values create strong responses to a change in system state and can lead to oscillation. Tweak this so that your system doesn't react as fast, but still catches some of the error.