I had to modify the script again, so that on the first price (when ovshares is 0) we calculate shares based on control (not vcontrol). So here is the correct script: BEGIN { control = 2000 vcontrol = 2 * control cash = control orig = control } { price = $1 value = shares * price + cash ovshares = vshares oshares = shares vshares = int(vcontrol / price) if (ovshares == 0) shares = int(control / price) else if (vshares > ovshares) shares = oshares + (vshares - ovshares) else shares = oshares - (ovshares - vshares) if (shares < 0) shares = 0 cash = value - shares * price if (cash < 0) { value += -1*cash orig += -1*cash cash = 0 } print price" "shares" "cash" "value" "orig }