J, 40 29 19 18 15 14 1413 bytes
|.~1+0{[:\&\:+/\
-11 after applying HyperNeutrino's scan sum idea
-10 after reading Leo's comment to HyperNeutrino: while(any of the cumulative sum is negative)(rotate by 1)
-3 thanks to a clever observation by Bubbler
Takes input as a list of integers, where [ = _1
and ] = 1
-- reversing the more natural order saves 1 byte.
how
|.~
Rotate by...1+
1 plus...0{
the first element of...\:
the grade down of...+/\
the scan sum.
That is, take the index of the max element of the scan sum, add one to it, and rotate by that amount.