Skip to content

Commit bdd60ec

Browse files
committed
fix: Set use_db for historic analysis
closes freqtrade#12390
1 parent 4cf7369 commit bdd60ec

File tree

1 file changed

+59
-52
lines changed

1 file changed

+59
-52
lines changed

freqtrade/rpc/rpc.py

Lines changed: 59 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1557,69 +1557,76 @@ def _rpc_analysed_history_full(
15571557
selected_cols: list[str] | None,
15581558
live: bool,
15591559
) -> dict[str, Any]:
1560+
"""
1561+
Analyzed dataframe in Dict form, with full history loading and strategy analysis.
1562+
Loads the full history from disk or exchange, and runs the strategy analysis on it.
1563+
Should only be used in webserver mode, as it can interfere with a running bot.
1564+
"""
15601565
timerange_parsed = TimeRange.parse_timerange(config.get("timerange"))
15611566

15621567
from freqtrade.data.converter import trim_dataframe
15631568
from freqtrade.data.dataprovider import DataProvider
1569+
from freqtrade.persistence.usedb_context import FtNoDBContext
15641570
from freqtrade.resolvers.strategy_resolver import StrategyResolver
15651571

1566-
strategy_name = ""
1567-
startup_candles = 0
1568-
if config.get("strategy"):
1569-
strategy = StrategyResolver.load_strategy(config)
1570-
startup_candles = strategy.startup_candle_count
1571-
strategy_name = strategy.get_strategy_name()
1572-
1573-
if live:
1574-
data = exchange.get_historic_ohlcv(
1575-
pair=pair,
1576-
timeframe=timeframe,
1577-
since_ms=timerange_parsed.startts * 1000
1578-
if timerange_parsed.startts
1579-
else dt_ts(dt_now() - timedelta(days=30)),
1580-
is_new_pair=True, # history is never available - so always treat as new pair
1581-
candle_type=config.get("candle_type_def", CandleType.SPOT),
1582-
until_ms=timerange_parsed.stopts,
1583-
)
1584-
else:
1585-
_data = load_data(
1586-
datadir=config["datadir"],
1587-
pairs=[pair],
1588-
timeframe=timeframe,
1589-
timerange=timerange_parsed,
1590-
data_format=config["dataformat_ohlcv"],
1591-
candle_type=config.get("candle_type_def", CandleType.SPOT),
1592-
startup_candles=startup_candles,
1593-
)
1594-
if pair not in _data:
1595-
raise RPCException(
1596-
f"No data for {pair}, {timeframe} in {config.get('timerange')} found."
1572+
with FtNoDBContext():
1573+
strategy_name = ""
1574+
startup_candles = 0
1575+
if config.get("strategy"):
1576+
strategy = StrategyResolver.load_strategy(config)
1577+
startup_candles = strategy.startup_candle_count
1578+
strategy_name = strategy.get_strategy_name()
1579+
1580+
if live:
1581+
data = exchange.get_historic_ohlcv(
1582+
pair=pair,
1583+
timeframe=timeframe,
1584+
since_ms=timerange_parsed.startts * 1000
1585+
if timerange_parsed.startts
1586+
else dt_ts(dt_now() - timedelta(days=30)),
1587+
is_new_pair=True, # history is never available - so always treat as new pair
1588+
candle_type=config.get("candle_type_def", CandleType.SPOT),
1589+
until_ms=timerange_parsed.stopts,
15971590
)
1598-
data = _data[pair]
1591+
else:
1592+
_data = load_data(
1593+
datadir=config["datadir"],
1594+
pairs=[pair],
1595+
timeframe=timeframe,
1596+
timerange=timerange_parsed,
1597+
data_format=config["dataformat_ohlcv"],
1598+
candle_type=config.get("candle_type_def", CandleType.SPOT),
1599+
startup_candles=startup_candles,
1600+
)
1601+
if pair not in _data:
1602+
raise RPCException(
1603+
f"No data for {pair}, {timeframe} in {config.get('timerange')} found."
1604+
)
1605+
data = _data[pair]
15991606

1600-
annotations = []
1601-
if config.get("strategy"):
1602-
strategy.dp = DataProvider(config, exchange=exchange, pairlists=None)
1603-
strategy.ft_bot_start()
1607+
annotations = []
1608+
if config.get("strategy"):
1609+
strategy.dp = DataProvider(config, exchange=exchange, pairlists=None)
1610+
strategy.ft_bot_start()
16041611

1605-
df_analyzed = strategy.analyze_ticker(data, {"pair": pair})
1606-
df_analyzed = trim_dataframe(
1607-
df_analyzed, timerange_parsed, startup_candles=startup_candles
1608-
)
1609-
annotations = strategy.ft_plot_annotations(pair=pair, dataframe=df_analyzed)
1612+
df_analyzed = strategy.analyze_ticker(data, {"pair": pair})
1613+
df_analyzed = trim_dataframe(
1614+
df_analyzed, timerange_parsed, startup_candles=startup_candles
1615+
)
1616+
annotations = strategy.ft_plot_annotations(pair=pair, dataframe=df_analyzed)
16101617

1611-
else:
1612-
df_analyzed = data
1618+
else:
1619+
df_analyzed = data
16131620

1614-
return RPC._convert_dataframe_to_dict(
1615-
strategy_name,
1616-
pair,
1617-
timeframe,
1618-
df_analyzed.copy(),
1619-
dt_now(),
1620-
selected_cols,
1621-
annotations,
1622-
)
1621+
return RPC._convert_dataframe_to_dict(
1622+
strategy_name,
1623+
pair,
1624+
timeframe,
1625+
df_analyzed.copy(),
1626+
dt_now(),
1627+
selected_cols,
1628+
annotations,
1629+
)
16231630

16241631
def _rpc_plot_config(self) -> dict[str, Any]:
16251632
if (

0 commit comments

Comments
 (0)