I've worked a lot with func_tracktrains, enough to have dealt with just about every problem they present. I've had plenty of restless nights because of them. Anyhow, here's what I think you may not be doing right:
First make sure that you go under "flags" in the func_tracktrain's properties and check "fixed orientation" and "No User Control." Now under its "keyvalues" the main thing here is to make sure that its "Initial Speed" keyvalue is set to zero, that is if this train needs to start motionless, it will refer back to this "default" speed you gave it. With that in mind, also set the "Max Speed" to something that you obviously think the train will not go past in velocity.
Now with that clarified (you may have already had those set), I can tell you what I think the problem is. On your button, there needs to be two different outputs there that tell the func_tracktrain to go; they are: the "startForward" target input value, and the "SetSpeed" value. Just by telling the func_tracktrain to go forward only specifies its direction, not its speed, that's why the "SetSpeed" value is necessary, and why your train isn't moving. (of course you would need to enter some integers in the "parameters" box for it to have any effect)
Something else you should know: If you have a value set on each of the path_tracks under "New Train Speed" that will have the same effect. But it is important that you set the speed FIRST from that button you're using. Putting 0 in the "New Train Speed" keyvalue will deliberately not change the func_tracktrain's speed (it'll keep it the same). You will need another input onto the func_tracktrain that tells it to stop, (another "SetSpeed" that says 0).
Anyhow, there could be some other issues, but by the sound of it, I'm pretty sure that may be it. Let me know otherwise, I have a few more tricks up my sleeve