You've got a problem with your animation's timing.
You're trying to represent an undulation. That's a move that can be studied with a sinusoid (a relatively simple mathematical function that gives standard waves). If t = time, x = current height and y = average height and z = wave amplitude, x = y + z*sin(t)
You don't need the precise mathematical knowledge though - try and apply what you probably already know from real life. In the case of undulations (what a wave is), movement tends to be quicker when you're nearer to the average height, and slower when you approach maximal or minimal height. That's because of a bunch of inertia/equilibrium effects (basically, you could analyze the wave as a long array of springs where each spring is oscillating with a slight offset to the previous one). When a spring is contracted, it exerts a strength to relax and that strength gets stronger the more it's contracted. Once that strength becomes strong enough to cancel the downward movement (cause by previous inertia), the spring starts relaxing and it passes its equilibrium point (the average height), triggering a reverse phenomenon (the spring now wants to contract because it is too relaxed).
Translated into animation concepts, you need to have more keyframes when the wave reaches maximal or minimal height, and less keyframes near the average height.
I'm not sure whether the animation sticks at the end but that's probably because you have the same keyframe at the beginning and at the end of the animation.