Oil has best run in three years; JPM earnings boost stocks