MIAMI -- The only thing Aaron Cook did wrong was run the bases.
Cook limited Florida to five hits and won his third start in a row.
"He's just in a good zone now," manager Clint Hurdle said. "There's less effort, more power, more sink, more crispness to his slider."
Garrett Atkins doubled home three runs for the Rockies, who won their third consecutive game. They're 54-51, matching the franchise's second-best record after 105 games.
Miguel Olivo hit his 10th homer for the Marlins, but they lost for the seventh time in eight games.
Cook (8-6) was coming off a seven-hit complete game against San Diego, and he allowed Florida only three runs, two earned.
"You've got to tip your hat to Cook," Marlins manager Fredi Gonzalez said. "He has a good sinker, he was pitching ahead in the count, and we kept beating the ball into the ground."
Only two of Florida's outs came on flyballs.
"I was able to get my sinker over," Cook said. "Guys were being aggressive, so I just took advantage of it."
Cook gave up three runs in the third after spending the top of the inning running the bases. Olivo led off with a homer, and following an error by shortstop Troy Tulowitzki and a walk, Dan Uggla and Miguel Cabrera hit run-scoring singles.
"I just got a couple of pitches up," Cook said. "I might have been a little tired."
Hurdle agreed that running the bases might have fazed Cook.
"It's hot and humid out there, so I don't think it helps him any," Hurdle said. "The one inning got away from us. But after that, Cook put his foot down."
He allowed only one other baserunner until the eighth. Manuel Corpas pitched a perfect ninth for his seventh save in as many chances since closer Brian Fuentes went on the disabled list.
Few witnessed the Rockies' five-hitter. The announced crowd was 11,534, but actual attendance was likely less than 3,000.
Matt Holliday had three hits and scored twice for Colorado.
Florida's Scott Olsen (8-9) allowed seven hits and six runs in five innings. In two starts since his early-morning arrest after he allegedly fought with police, he has lost twice and allowed 13 runs in 10 innings.
"I threw good pitches. They hit them," Olsen said. "It was another one of those days."
The Rockies came into the game with a streak of 20 consecutive scoreless innings on the road, but they scored in the first with help from Florida's woeful defense. Willy Taveras led off with a liner and wound up with a triple when right fielder Jeremy Hermida tried to short-hop the ball and let it bounce past.
Jamey Carroll's sacrifice fly scored Taveras.
Colorado added four runs in the third. Carroll led off with a walk, and Taveras reached on a bunt single, his 45th infield hit this year. Following a sacrifice, Holliday was intentionally walked, and all three runners came home when Atkins lined a 3-2 pitched into the corner.
Holliday eluded a tag at the plate with a nifty slide. Tulowitzki's RBI single made the score 5-0.
A sacrifice fly by Ryan Spilborghs in the fifth put the Rockies ahead 6-3.