Skip to main content

Why is my Portfolio Bot not balancing positions correctly?

Troubleshoot Portfolio Bot balancing issues: unsynced positions, incorrect USDT settings, and rebalancing problems with solutions

Bryan avatar
Written by Bryan
Updated yesterday

This guide addresses common issues where the Portfolio Bot fails to properly balance positions according to the configured allocation percentages. Users may notice that some positions remain significantly above or below their target percentages without being rebalanced.

Common Symptoms

  • Positions consistently remain above their allocated percentage (e.g., 330 EUR when target is 300 EUR)

  • Some positions never get rebalanced despite being clearly over/under the target

  • Bot trades some currencies frequently while completely ignoring others

  • Uneven rebalancing behavior across different positions

Root Causes and Solutions

1. Unsynced Positions

Problem: The bot owns more of a particular cryptocurrency than allowed based on the configured percentage rule, but these positions are not synced with Cryptohopper.

Impact: When positions aren't synced, they're not taken into account during rebalancing calculations, causing the bot to miscalculate available funds and target allocations.

Solution:

  • Go to your Dashboard and check for unsynced positions under "Current Assets"

  • Ensure all positions are properly synced before running the Portfolio Bot or consider converting all funds to your quote currency, for example USDT and then rebalance.

2. Incorrect Maximum Allocated USDT Amount

Problem: The Maximum Allocated USDT amount is set higher than the actual account balance.

Impact: This causes the bot to think it has insufficient funds for rebalancing, preventing the "Only buy/sell the difference" feature from working correctly.

Solution:

  • Set the Maximum Allocated USDT to slightly below your actual available balance

  • For example, if you have 3000 EUR, set it to 2900 EUR to ensure funds are always available

  • This ensures the bot can always execute necessary trades for rebalancing

3. "Only Buy/Sell the Difference" Not Working Properly

Problem: When unsynced positions exist or Maximum USDT is set incorrectly, the difference-based rebalancing doesn't function as intended.

How it Should Work:

  • With 3000 EUR and 10 currencies at 10% each, target per position = 300 EUR

  • Position above 330 EUR should sell excess (only 30 EUR worth)

  • Position below 270 EUR should buy more (only 30 EUR worth)

  • This minimizes trading fees compared to selling entire positions

Solution:

  1. Fix unsynced positions (see point 1)

  2. Correct Maximum Allocated USDT (see point 2)

  3. Ensure minimum buy amount requirements are met for your exchange

4. Minimum Buy Amount Requirements

Problem: The bot can only buy/sell the difference if the minimum buy amount of the exchange is met.

Solution:

  • Check your exchange's minimum order requirements

  • Ensure your rebalancing differences meet these minimums

  • Consider adjusting your total portfolio size or allocation percentages if needed

Step-by-Step Resolution Process

Step 1: Clean Up Your Portfolio

  1. Convert all cryptocurrencies to USDT

  2. Ensure there are no unsynced positions in "Current Assets"

  3. Set appropriate Maximum Allocated USDT amount (slightly below total balance)

Step 2: Reconfigure Allocation

  1. Adjust allocation percentages if needed (e.g., give BTC a higher percentage if you want to maintain a larger position)

  2. Ensure total allocations equal 100%

Step 3: Restart Portfolio Bot

  1. Click "Rebalance" to perform initial allocation

  2. Let the bot run and monitor its behavior

  3. Check that "Only buy/sell the difference" is now working correctly

Prevention Tips

  • Regularly check for unsynced positions, especially after manual trades

  • Keep Maximum Allocated USDT updated when your account balance changes significantly

  • Monitor the bot's trading logs to ensure even rebalancing across all positions

  • Avoid manual trading while the Portfolio Bot is active to prevent sync issues

Did this answer your question?