I would say that 18 to 21 is generally considered "young". However, if I started training a player when he was 18, and he had good stats when he was 21, I would probably continue training him until he was 23 or 24 to make a great player.
23 year olds will train slower than 20 year olds.
For buying new trainees I would try and get them at 19 and under (I mean players with decent stats but nothing great).
But feel free to buy a 20 to 22 year old with pretty good current stats that you can continue to train (this will cost a lot more to buy though).