improve rebalance algo to reduce frequency, add ann return