How to set stake amount

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

tradable_balance_ratio

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.

available_capital

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.

Examples

Example 1

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.

Example 2

"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.

Example 3

"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.

2 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *