feat: allow pair-history from "live" candles

This commit is contained in:
Matthias
2025-02-01 15:47:10 +01:00
parent 6b3fff6b7e
commit e1cc7dcfdf
2 changed files with 33 additions and 17 deletions

View File

@@ -35,7 +35,7 @@ def pair_history(
}
)
try:
return RPC._rpc_analysed_history_full(config, pair, timeframe, exchange, None)
return RPC._rpc_analysed_history_full(config, pair, timeframe, exchange, None, False)
except Exception as e:
raise HTTPException(status_code=502, detail=str(e))
@@ -59,7 +59,7 @@ def pair_history_filtered(
)
try:
return RPC._rpc_analysed_history_full(
config, payload.pair, payload.timeframe, exchange, payload.columns
config, payload.pair, payload.timeframe, exchange, payload.columns, False
)
except Exception as e:
raise HTTPException(status_code=502, detail=str(e))

View File

@@ -31,7 +31,7 @@ from freqtrade.enums import (
TradingMode,
)
from freqtrade.exceptions import ExchangeError, PricingError
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_msecs
from freqtrade.exchange import Exchange, timeframe_to_minutes, timeframe_to_msecs
from freqtrade.exchange.exchange_utils import price_to_precision
from freqtrade.loggers import bufferHandler
from freqtrade.persistence import KeyStoreKeys, KeyValueStore, PairLocks, Trade
@@ -1436,7 +1436,12 @@ class RPC:
@staticmethod
def _rpc_analysed_history_full(
config: Config, pair: str, timeframe: str, exchange, selected_cols: list[str] | None
config: Config,
pair: str,
timeframe: str,
exchange: Exchange,
selected_cols: list[str] | None,
live: bool,
) -> dict[str, Any]:
timerange_parsed = TimeRange.parse_timerange(config.get("timerange"))
@@ -1447,6 +1452,16 @@ class RPC:
strategy = StrategyResolver.load_strategy(config)
startup_candles = strategy.startup_candle_count
if live:
data = exchange.get_historic_ohlcv(
pair=pair,
timeframe=timeframe,
since_ms=timerange_parsed.startts * 1000 if timerange_parsed.startts else None,
is_new_pair=True, # history is never available - so always treat as new pair
candle_type=config.get("candle_type_def", CandleType.SPOT),
until_ms=timerange_parsed.stopts,
)
else:
_data = load_data(
datadir=config["datadir"],
pairs=[pair],
@@ -1460,11 +1475,12 @@ class RPC:
raise RPCException(
f"No data for {pair}, {timeframe} in {config.get('timerange')} found."
)
data = _data[pair]
strategy.dp = DataProvider(config, exchange=exchange, pairlists=None)
strategy.ft_bot_start()
df_analyzed = strategy.analyze_ticker(_data[pair], {"pair": pair})
df_analyzed = strategy.analyze_ticker(data, {"pair": pair})
df_analyzed = trim_dataframe(df_analyzed, timerange_parsed, startup_candles=startup_candles)
return RPC._convert_dataframe_to_dict(