There are several possible reasons why the difference occurs. Some of them are
Lookahead and/or recursive loop issue
They are both two separate issues but with one common cause, which is because you get the whole data in backtest. While having loads of data itself is harmless, how you use it is another story. But the end result would be similar, you will most likely get different trade entries and exits compared to dry/live run. Usually, what would happen is you have good performance on backtest, but you have bad performance once you put it on dry/live run.
You are using volume pairlist on dry/live run
Read the linked article for more explanation. The fix for this issue is quite simple. Create a good static list and use in-strat filters instead of using pairlist filters. Different pairlists will give different results, so your aim to make sure the bot use similar pairlists for both backtest and dry/live run.
Different exit timings due to reliance on current_profit
Read trailing stop trap, custom exit trap and roi trap articles for more explanation. Different exit timings can affect future entries, especially if the re-entry is just few candles away from the last exit.
[…] Backtest result is different that dry/live run at same timerange […]