mirror of
https://github.com/freqtrade/freqtrade.git
synced 2025-11-29 08:33:07 +00:00
ccxt.pro - move get_klines to ws_exchange
This commit is contained in:
@@ -2228,15 +2228,6 @@ class Exchange:
|
||||
data = sorted(data, key=lambda x: x[0])
|
||||
return pair, timeframe, candle_type, data, self._ohlcv_partial_candle
|
||||
|
||||
async def _async_watch_ohlcv(
|
||||
self, pair: str, timeframe: str, candle_type: CandleType
|
||||
) -> Tuple[str, str, str, List]:
|
||||
candles = self._exchange_ws.ccxt_object.ohlcvs.get(pair, {}).get(timeframe)
|
||||
# Fake 1 candle - which is then removed again
|
||||
candles.append([int(datetime.now(timezone.utc).timestamp() * 1000), 0, 0, 0, 0, 0])
|
||||
logger.info(f"watch result for {pair}, {timeframe} with length {len(candles)}")
|
||||
return pair, timeframe, candle_type, candles
|
||||
|
||||
def _build_coroutine(
|
||||
self,
|
||||
pair: str,
|
||||
@@ -2264,7 +2255,7 @@ class Exchange:
|
||||
# Usable result ...
|
||||
logger.info(f"reuse watch result for {pair}, {timeframe}, {x}")
|
||||
|
||||
return self._async_watch_ohlcv(pair, timeframe, candle_type)
|
||||
return self._exchange_ws.get_ohlcv(pair, timeframe, candle_type)
|
||||
|
||||
# Check if 1 call can get us updated candles without hole in the data.
|
||||
if min_date < last_refresh:
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import asyncio
|
||||
import logging
|
||||
import time
|
||||
from datetime import datetime, timezone
|
||||
from threading import Thread
|
||||
from typing import Dict, List, Set, Tuple
|
||||
|
||||
@@ -17,12 +18,12 @@ class ExchangeWS():
|
||||
self.config = config
|
||||
self.ccxt_object = ccxt_object
|
||||
self._thread = Thread(name="ccxt_ws", target=self.start)
|
||||
self._background_tasks = set()
|
||||
self._background_tasks: Set[asyncio.Task] = set()
|
||||
|
||||
self._pairs_watching: Set[Tuple[str, str, CandleType]] = set()
|
||||
self._pairs_scheduled: Set[Tuple[str, str, CandleType]] = set()
|
||||
self.pairs_last_refresh: Dict[Tuple[str, str, CandleType], int] = {}
|
||||
self.pairs_last_request: Dict[Tuple[str, str, CandleType], int] = {}
|
||||
self.pairs_last_refresh: Dict[Tuple[str, str, CandleType], float] = {}
|
||||
self.pairs_last_request: Dict[Tuple[str, str, CandleType], float] = {}
|
||||
self._thread.start()
|
||||
|
||||
def start(self) -> None:
|
||||
@@ -68,7 +69,7 @@ class ExchangeWS():
|
||||
# self._pairs_scheduled.discard(pair, timeframe, candle_type)
|
||||
|
||||
async def continuously_async_watch_ohlcv(
|
||||
self, pair: str, timeframe: str, candle_type: CandleType) -> Tuple[str, str, str, List]:
|
||||
self, pair: str, timeframe: str, candle_type: CandleType) -> None:
|
||||
|
||||
while (pair, timeframe, candle_type) in self._pairs_watching:
|
||||
start = time.time()
|
||||
@@ -83,3 +84,14 @@ class ExchangeWS():
|
||||
# asyncio.run_coroutine_threadsafe(self.schedule_schedule(), loop=self._loop)
|
||||
asyncio.run_coroutine_threadsafe(self.schedule_while_true(), loop=self._loop)
|
||||
self.cleanup_expired()
|
||||
|
||||
async def get_ohlcv(
|
||||
self, pair: str, timeframe: str, candle_type: CandleType) -> Tuple[str, str, str, List]:
|
||||
"""
|
||||
Returns cached klines from ccxt's "watch" cache.
|
||||
"""
|
||||
candles = self.ccxt_object.ohlcvs.get(pair, {}).get(timeframe)
|
||||
# Fake 1 candle - which is then removed again
|
||||
candles.append([int(datetime.now(timezone.utc).timestamp() * 1000), 0, 0, 0, 0, 0])
|
||||
logger.info(f"watch result for {pair}, {timeframe} with length {len(candles)}")
|
||||
return pair, timeframe, candle_type, candles
|
||||
|
||||
Reference in New Issue
Block a user