ought是buy的过去分词,因为“买”是个即时动词,只发生在那一刻,所以后面不应该接一段时间for more than three years.
这句应该改为:My uncle has had the violin ...