The 31-year-old, who made his debut against Ireland in 2011, has scored 2,919 runs, including three centuries, and taken 74 wickets in 104 ODIs.
Stokes, who became Test captain in April, will still play Twenty20 cricket as well as leading the red-ball side.
“Three formats are just unsustainable for me now,” said the all-rounder.
“This has been an incredibly tough decision to make. I have loved every minute of playing with my mates for England. We have had an incredible journey on the way.”
At one-day level, Stokes will best be remembered for his player-of-the-match performance in England’s 2019 World Cup final win over New Zealand at Lord’s, with the left-hander making 84 not out to force a super over, which Eoin Morgan’s side won on boundary countback.
He announced last week that he would miss this season’s Hundred competition to manage his workload, and was left out of England’s T20 squad for the upcoming games against South Africa.
Stokes added: “As hard as a decision as this was to come to, it’s not as hard dealing with the fact I can’t give my team-mates 100% of myself in this format any more. The England shirt deserves nothing less from anyone who wears it.
“Not only do I feel that my body is letting me down because of the schedule and what is expected of us, but I also feel that I am taking the place of another player who can give Jos [Buttler, England’s one-day captain] and the rest of the team their all. It’s time for someone else to progress as a cricketer and make incredible memories like I have over the past 11 years.
“I have loved all 104 games I have played so far, I’ve got one more, and it feels amazing to be playing my last game at my home ground in Durham.
“As always, the England fans have always been there for me and will continue to be there. You’re the best fans in the world.” (Courtesy BBC)