Stake amount can be seen as a simple thing to be set, but some new users have trouble when they were dry/live running their bot for the first time because they set it wrongly.
Minimum stake allowed by the exchange
The common mistake new users have is having a very low stake amount. You need to know what is the mininum stake amount per order allowed by your exchange. For example, on Kucoin, they accept minimum of 1 USDT order. On Binance, in general they only accept minimum of 15 USDT. Each exchanges gonna have their own limit. So check with your exchange, or do some dry-run and play around with stake amount to see how low you can go. If you get this message in your log, you know you have go below the allowed limit
freqtrade.wallets – INFO – Adjusted stake amount for pair abc is more than 30% bigger than the desired stake amount of (xxx * 1.3 = yyy) < zzz), ignoring trade.
Another thing to have in mind, if you are using leverage, the minimum stake might not be as simple as (minimum stake at 1x leverage) / current leverage. For example, Binance has minimum stake order of 15 USDT. When you want to use 3x leverage, that doesn’t mean the minimum stake amount is reduced to 5 USDT. Based on my experience, the minimum stake is 7 USDT. So same advice as above, either check with the exchange, or do some dry run to test how low can you go.
Now, if you already know what is the minimum stake allowed (for this article, let’s say the limit is 15 USDT), then we can proceed on ways to set stake amount.
Static stake amount
This is the easiest way of setting stake amount. Set this inside your config.
"stake_amount" : 15,
What this gonna do is all your trades gonna be opened with amount worth of (approximately) 15 USDT. The issue with this approach is you don’t compound your profit. Some people would have different risk management approach, so if you are the type that prefer no compounding, then this is the way for you.
Dynamic stake amount
This approach means your stake amount gonna be changing based on how much profit (or loss) your bot have. To have this, set this inside your config
"stake_amount" : "unlimited",
The formula to know how much is the stake amount per trade is actually quite simple
stake amount = available money / max open trades
So let’s say you put 80 USDT into your exchange’s wallet and you set max_open_trades to 4. That means the stake amount per trade will be 20 USDT. Seems simple right? The not-so-simple part is usually in determining the available money. There are two ways of assigning the available money for live trading
Use this only when you have just one bot using that wallet. The formula is very simple
available money = amount in wallet * tradable_balance_ratio
So for example, if you have 100 USDT in the wallet, and you set tradable_balance_ratio to 0.8, that means available money that the bot can use is 80 USDT.
Use this when you have multiple bots using the same wallet. This should be very straightforward, set it to the amount you want to give to that bot. No matter what happen to the wallet (the amount increased or decreased due to withdrawals or deposits), the bot will only see the given available_capital.
You have this setting
"max_open_trades": 4, "stake_currency": "USDT", "stake_amount" : 15, "tradable_balance_ratio": 0.99, "dry_run_wallet": 15,
If you do any backtest or dry run with this, you will have zero trade opened. Why? The real amount that the bot can use is (0.99 x 15) which is 14.85 USDT, which is less than the set stake amount (15 USDT). The bot will never be able to open any trade.
"max_open_trades": 4, "stake_currency": "USDT", "stake_amount" : 15, "tradable_balance_ratio": 0.99, "dry_run_wallet": 16,
When you do backtest on this, the bot will only open 1 (losing) trade (of -1 USDT loss) and then no more additional trade. Why? The real amount of money the bot have is (0.99 * 16) which is 15.84 USDT, which is enough to open the first trade. But then, the first trade ended up as -1 USDT loss, which means your real balance now is 14.84 USDT, which is lower than the set stake amount.
"max_open_trades": 4, "stake_currency": "USDT", "stake_amount" : 15, "tradable_balance_ratio": 0.2, "dry_run_wallet": 100,
You are confused why the dry run would only open 1 trade at a time, and never have more than one open trade at the same time. Your real available balance is (0.2 * 100) which is 20 USDT, which means the bot can only open 1 trade, because when the bot want to open another trade, the leftover is only 5 USDT.