The VECTOR function is behaving as expected in this instance. Check out the DATA_LOCATION property of the VECTOR function. This defaults to 1, which centers the vector about your specified location. If you want the tail of the vector to begin at your location, set DATA_LOCATION to 0.
v = vector(dx,dy,XRANGE=[0,4],YRANGE=[0,4],/OVERPLOT,DATA_LOCATION=0)
Note: The units for the U and V components are arbitrary, and are not related to the units of the X and Y coordinates. The VECTOR function will compute a default length scale and head size based upon the overall number of vectors and the average magnitude of the vectors. The LENGTH_SCALE and HEAD_SCALE properties may be used to change the default size.
If you need the vectors to have representative length, try the ARROW function -->
http://www.harrisgeospatial.com/docs/ARROW.html