Skip to content

Freqtrade basics

This page provides you some basic concepts on how Freqtrade works and operates.

Freqtrade terminology

  • Trade: Open position.
  • Open Order: Order which is currently placed on the exchange, and is not yet complete.
  • Pair: Tradable pair, usually in the format of Quote/Base (e.g. XRP/USDT).
  • Timeframe: Candle length to use (e.g. "5m", "1h", ...).
  • Indicators: Technical indicators (SMA, EMA, RSI, ...).
  • Limit order: Limit orders which execute at the defined limit price or better.
  • Market order: Guaranteed to fill, may move price depending on the order size.

Fee handling

All profit calculations of Freqtrade include fees. For Backtesting / Hyperopt / Dry-run modes, the exchange default fee is used (lowest tier on the exchange). For live operations, fees are used as applied by the exchange (this includes BNB rebates etc.).

Bot execution logic

Starting freqtrade in dry-run or live mode (using freqtrade trade) will start the bot and start the bot iteration loop. By default, loop runs every few seconds (internals.process_throttle_secs) and does roughly the following in the following sequence:

  • Fetch open trades from persistence.
  • Calculate current list of tradable pairs.
  • Download ohlcv data for the pairlist including all informative pairs
    This step is only executed once per Candle to avoid unnecessary network traffic.
  • Call bot_loop_start() strategy callback.
  • Analyze strategy per pair.
    • Call populate_indicators()
    • Call populate_buy_trend()
    • Call populate_sell_trend()
  • Check timeouts for open orders.
    • Calls check_buy_timeout() strategy callback for open buy orders.
    • Calls check_sell_timeout() strategy callback for open sell orders.
  • Verifies existing positions and eventually places sell orders.
    • Considers stoploss, ROI and sell-signal.
    • Determine sell-price based on ask_strategy configuration setting.
    • Before a sell order is placed, confirm_trade_exit() strategy callback is called.
  • Check if trade-slots are still available (if max_open_trades is reached).
  • Verifies buy signal trying to enter new positions.
    • Determine buy-price based on bid_strategy configuration setting.
    • Before a buy order is placed, confirm_trade_entry() strategy callback is called.

This loop will be repeated again and again until the bot is stopped.

Backtesting / Hyperopt execution logic

backtesting or hyperopt do only part of the above logic, since most of the trading operations are fully simulated.

  • Load historic data for configured pairlist.
  • Calculate indicators (calls populate_indicators()).
  • Calls populate_buy_trend() and populate_sell_trend()
  • Loops per candle simulating entry and exit points.
  • Generate backtest report output


Both Backtesting and Hyperopt include exchange default Fees in the calculation. Custom fees can be passed to backtesting / hyperopt by specifying the --fee argument.