freqtrade/freqtrade · error · ConfigurationError
The Edge module has been deprecated in 2023.9 and removed in
Error message
The Edge module has been deprecated in 2023.9 and removed in 2025.6. All functionalities of edge have been removed.
What it means
Fifth check of _force_entry_validations: the pair's quote currency must equal the configured stake_currency (e.g. stake USDT but pair ETH/BTC) — otherwise the entry cannot be funded from the stake wallet. The error interpolates the allowed stake currency: "Wrong pair selected. Only pairs with stake-currency {stake_currency} allowed."
Source
Thrown at freqtrade/commands/optimize_commands.py:132
logger.info("Another running instance of freqtrade Hyperopt detected.")
logger.info(
"Simultaneous execution of multiple Hyperopt commands is not supported. "
"Hyperopt module is resource hungry. Please run your Hyperopt sequentially "
"or on separate machines."
)
logger.info("Quitting now.")
# TODO: return False here in order to help freqtrade to exit
# with non-zero exit code...
# Same in Edge and Backtesting start() functions.
def start_edge(args: dict[str, Any]) -> None:
"""
Start Edge script
:param args: Cli args from Arguments()
:return: None
"""
raise ConfigurationError(
"The Edge module has been deprecated in 2023.9 and removed in 2025.6. "
"All functionalities of edge have been removed."
)
def start_lookahead_analysis(args: dict[str, Any]) -> None:
"""
Start the backtest bias tester script
:param args: Cli args from Arguments()
:return: None
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.optimize.analysis.lookahead_helpers import LookaheadAnalysisSubFunctions
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
LookaheadAnalysisSubFunctions.start(config)
View on GitHub (pinned to 1c8edfe4d1)
Solutions
- Enter only pairs quoted in your stake currency: for USDT stake use */USDT pairs.
- Or change stake_currency in config to the desired quote (and fund that wallet).
- Verify with exchange.get_pair_quote_currency(pair) == config['stake_currency'] before calling.
Example fix
# before: stake_currency = USDT
client.post('/api/v1/forceenter', json={'pair': 'ETH/BTC'}) # wrong quote
# after
client.post('/api/v1/forceenter', json={'pair': 'ETH/USDT'}) Defensive patterns
Strategy: validation
Validate before calling
stake = config['stake_currency']
quote = exchange.get_pair_quote_currency(pair)
if quote != stake:
raise ValueError(f'{pair} quoted in {quote}; need */{stake} pair') Type guard
def pair_matches_stake(pair: str, stake_currency: str) -> bool:
return pair.split('/')[-1] == stake_currency if '/' in pair else False Try / catch
from freqtrade.rpc import RPCException
try:
rpc._rpc_force_entry(pair, None)
except RPCException as e:
if 'Wrong pair selected' in str(e):
pair = pair.split('/')[0] + '/' + config['stake_currency']
rpc._rpc_force_entry(pair, None)
else:
raise Prevention
- Mentor the BASE/QUOTE convention: quote side must equal stake_currency.
- Filter candidate pairs by suffix match with stake_currency before offering them in UIs.
- Double-check stake_currency spelling/case when migrating configs.
When it happens
Trigger: Config stake_currency=USDT, forceenter ETH/BTC; stake_currency=BTC and pair X/USDT; misreading which side is quote (BASE/QUOTE convention).
Common situations: Operators seeing a good signal on a BTC-quoted pair while running USDT stakes; configs migrated between exchanges with different dominant quotes (USD vs USDT); typo in stake_currency itself ('usdt' case must match exactly).
Related errors
- Cannot get markets. Reason: {e}
- {e}. Please ensure that the hyperopt dependencies are instal
- `max_open_trades` and `stake_amount` cannot both be unlimite
- --db-url is required for this command.
- Starting balance ({wallet}) is smaller than stake_amount {st
AI-assisted analysis of freqtrade/freqtrade@1c8edfe4d1 (2026-08-15).
Data as JSON: /api/errors/3a3509fd529301ba.
Report an issue: GitHub.