- loosing power will start a new initialization process and i make sure to not lose any steps from the motors.
Something you're assuming is that:
1) When you tell the motor to step, that it will step (rotate a fraction)
2) That it will always step, whether or not it is under load
3) That when you tell it to stop (not step), the load on it won't cause the motor to rotate any further due to inertia
Now - maybe your motors are high-quality, very strong, and your load is lightweight (thus low inertia); if that is the case, then maybe you can run this whole thing "open loop" - but that still makes the assumption that the mass of the rotor won't cause the motor to mis-step, over-step, or under-step (there do exist so-called "coreless" stepper motors, which have very lightweight cores - but they aren't cheap).
This is the point of an encoder - so you can tell, with a certain level of precision, where exactly your motor shaft (or linear travel) is at any given point. What you need to think about is how you can build your own form of encoder that isn't as expensive as a "common" commercial unit. One possibility (it won't be super-accurate, but it might work well enough for your purposes) is to use a precision multi-turn potentiometer (5-10 turns), coupled to the system using a geared-down system (however you want to achieve this is up to you, but it would be prudent to use something fairly anti-backlash), so that the motion of the linear element corresponds to only a fraction of the total number of turns the potentiometer can resolve. Then just read the value using the ADC. That kind of a system would probably be the cheapest method (that, or something similar - for instance, you could substitute in a variable capacitor instead).