Right.
First of all, if you use SetSpritePhysicsVelocity every loop you will actually set the direction of the ball yourself, so in effect you are not using the physics system as I think you want to.
If you want to do it that way you can, but you might as well not use box2d for that.
Using box 2d your would either SetSpritePhysicsVelocity or SetSpritePhysicsImpulse once to initiate your ball to move then let box2d move the ball in the right angle when it hits a surface.
By default gravity is on, you can change that with
SetPhysicsGravity and/or SetPhysicsScale. Read help about those to learn more.
Your ball will behave in accordance to its set characteristics, which are at a default value to start with.
These include but are not limited to:
SetSpritePhysicsDamping - Set this to higher than nil if your want your ball to have an effect of moving against wind or travelling through water. Make it sluggish so to speak.
SetSpritePhysicsFriction - Does what it says on the tin. The friction set on the surface the ball hits also makes a difference.
SetSpritePhysicsRestitution - Sets the "bounciness" of your object. So if your ball is supposed to be bouncy play around with this setting. A setting of > 0.9999 will make your ball increase velocity after hitting a surface as opposed to slowing down.
I think those three are a good start.
If you need sample code of all this let me know.
My hovercraft is full of eels