I was going to answer this earlier today, but my server went down.
You must be sure, when you start, that your machine is properly zeroed. This means the machine co-ordinates, and the program co-ordinates. If you do not, any offsets introduced will not necessarily result in the right position.
The machine keeps position by using machine co-ordinates - displayed on the DROs when the Machine Co-ordinates button is pressed and the surround is illuminted. If you have home switches fitted, then the only way to alter these is to "home" the machine. If you do not have them fitted, or have them disabled, then pressing "RefAllHome" with zero the DROs.
So - the way to start (if you have no home switches) is to jog to the X0Y0Z0 position of the program. Press the Machine Co-ords button, and the "RefAllHome" the DRO's will all zero. If you then press the Machine Co-ords button so the led surround goes out, you can now zero the DRO's (if they are not zero) by pressing the zeroX zeroY and zeroZ buttons. This zeros the program co-ordinates. If you check the Config/Fixtures table you will see that G54 (the default offset) is now zero.
If G54 is not zero, then some other offset is selected, and you should select G54 and repeat the procedure. Unless you use offsets, all the table should be zero, and you can clear any figures that show in there.
Your machine-co-ords and your program co-ords now coincide with each other, and you can run your program, without any stray offsets value interfering. The problem is that Mach3 alters its Machine-Co-ordinates to reflect the actual machine position, with all the offset values added to it, whereas the program co-ords reflect the value of X,Y and Z in the program. The two are often miles apart.