Why volume matters

The usual mistake new users make is using a big volume pairlist. “More pairs, more trades” they said. Sure, you might get more trades. But more trades isn’t guaranteed more profit. I would advice against trading low volume pairs. The simple explanation is you can’t do a trade if no one else willing to do it. A trade needs 2 parties. It would be good if your entry order on low volume pairs got canceled because no one is willing to trade with you. You are in no risk of losing anything. It would be bad if you entered the trade but you can’t exit. You are in danger on holding it for an unknown period of time. It can be hours if you are lucky. It can be days or weeks. Those low volume coins usually are pump-and-dump coins. The only activities they gonna have comes from p&d activities, or them being delisted or rugpulled.

There was one case of someone trade a low volume coin on spot market. The entry filled within 1 minute. The exit is another story. The price barely moved for 6 hours. And when it finally had some volumes and went up, exit order was posted but only partially filled (21 out of 7600 coins). On next candle, the price went down significantly and the rest of the coin was sold there. Overall trade result was a loss. If you backtest that same trade, the backtest would tell you that you have a big win.

There is no real benefit of trading low volume coins. Even if backtest showed that your strategy works best on them, remember that in backtest, there is no competitors and orderbook check. It assumes your trades to always be filled with no slippage (unless you are using custom price functions, but even so, no orderbook volume checked). In live situation, you will compete with other bots to get those thin volumes.

The next question would be, how to avoid them?

First, only use top x volume pairs. Usually, the safe number of x is around 40 to 50. Using only top 40/50 will at least ensure you that you are getting coins that are actively traded at the time the pairlist being refreshed. Note that the pairlist might include currently pump-and-dumped coin, but that will be for another post on how to avoid them.

Second method, if you want to use static list (but this method can be used in addition with volume pairlist as well), use in-strat volume check. The check I like to use is to make sure the pairs has no 0 volume candles in the past 72 candles.

dataframe['live_data_ok'] = (dataframe['volume'].rolling(window=72, min_periods=72).min() > 0)

There is no real science in me choosing the number 72. You can change it to suit your preference. Longer is better.


Leave a Reply

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