Do not refresh candles on "process_throttle_secs" but on intervals
This commit is contained in:
parent
3987a8aeb8
commit
af93b18475
@ -6,10 +6,11 @@ from typing import List, Dict, Tuple, Any, Optional
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from math import floor, ceil
|
from math import floor, ceil
|
||||||
|
|
||||||
|
import asyncio
|
||||||
import ccxt
|
import ccxt
|
||||||
import ccxt.async_support as ccxt_async
|
import ccxt.async_support as ccxt_async
|
||||||
import arrow
|
import arrow
|
||||||
import asyncio
|
|
||||||
|
|
||||||
from freqtrade import constants, OperationalException, DependencyException, TemporaryError
|
from freqtrade import constants, OperationalException, DependencyException, TemporaryError
|
||||||
|
|
||||||
@ -362,18 +363,6 @@ class Exchange(object):
|
|||||||
except ccxt.BaseError as e:
|
except ccxt.BaseError as e:
|
||||||
raise OperationalException(f'Could not fetch ticker data. Msg: {e}')
|
raise OperationalException(f'Could not fetch ticker data. Msg: {e}')
|
||||||
|
|
||||||
def refresh_tickers(self, pair_list: List[str], ticker_interval: str) -> Dict:
|
|
||||||
"""
|
|
||||||
Refresh tickers asyncronously and return the result.
|
|
||||||
"""
|
|
||||||
# TODO: maybe add since_ms to use async in the download-script?
|
|
||||||
# TODO: only refresh once per interval ? *may require this to move to freqtradebot.py
|
|
||||||
# TODO: Add tests for this and the async stuff above
|
|
||||||
logger.debug("Refreshing klines for %d pairs", len(pair_list))
|
|
||||||
datatups = asyncio.get_event_loop().run_until_complete(
|
|
||||||
self.async_get_candles_history(pair_list, ticker_interval))
|
|
||||||
return {pair: data for (pair, data) in datatups}
|
|
||||||
|
|
||||||
@retrier
|
@retrier
|
||||||
def get_candle_history(self, pair: str, tick_interval: str,
|
def get_candle_history(self, pair: str, tick_interval: str,
|
||||||
since_ms: Optional[int] = None) -> List[Dict]:
|
since_ms: Optional[int] = None) -> List[Dict]:
|
||||||
|
@ -9,6 +9,7 @@ import traceback
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Any, Callable, Dict, List, Optional
|
from typing import Any, Callable, Dict, List, Optional
|
||||||
|
|
||||||
|
import asyncio
|
||||||
import arrow
|
import arrow
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
@ -56,6 +57,7 @@ class FreqtradeBot(object):
|
|||||||
self.exchange = Exchange(self.config)
|
self.exchange = Exchange(self.config)
|
||||||
self._init_modules()
|
self._init_modules()
|
||||||
self._klines: Dict[str, List[Dict]] = {}
|
self._klines: Dict[str, List[Dict]] = {}
|
||||||
|
self._klines_last_fetched_time = 0
|
||||||
|
|
||||||
def _init_modules(self) -> None:
|
def _init_modules(self) -> None:
|
||||||
"""
|
"""
|
||||||
@ -129,6 +131,34 @@ class FreqtradeBot(object):
|
|||||||
time.sleep(duration)
|
time.sleep(duration)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def refresh_tickers(self, pair_list: List[str]) -> Dict:
|
||||||
|
"""
|
||||||
|
Refresh tickers asyncronously and return the result.
|
||||||
|
"""
|
||||||
|
# TODO: maybe add since_ms to use async in the download-script?
|
||||||
|
# TODO: only refresh once per interval ? *may require this to move to freqtradebot.py
|
||||||
|
# TODO: Add tests for this and the async stuff above
|
||||||
|
|
||||||
|
ticker_interval = self.strategy.ticker_interval
|
||||||
|
interval_in_seconds = int(ticker_interval[:-1]) * 60
|
||||||
|
|
||||||
|
should_not_update = ((self._klines_last_fetched_time + interval_in_seconds +1) > round(time.time()))
|
||||||
|
|
||||||
|
if should_not_update:
|
||||||
|
return False
|
||||||
|
|
||||||
|
logger.debug("Refreshing klines for %d pairs", len(pair_list))
|
||||||
|
datatups = asyncio.get_event_loop().run_until_complete(
|
||||||
|
self.exchange.async_get_candles_history(pair_list, ticker_interval))
|
||||||
|
|
||||||
|
# fetching the timestamp of last candle
|
||||||
|
self._klines_last_fetched_time = datatups[0][1][-1][0] / 1000
|
||||||
|
|
||||||
|
# updating klines
|
||||||
|
self._klines = {pair: data for (pair, data) in datatups}
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
def _process(self, nb_assets: Optional[int] = 0) -> bool:
|
def _process(self, nb_assets: Optional[int] = 0) -> bool:
|
||||||
"""
|
"""
|
||||||
Queries the persistence layer for open trades and handles them,
|
Queries the persistence layer for open trades and handles them,
|
||||||
@ -149,7 +179,8 @@ class FreqtradeBot(object):
|
|||||||
final_list = sanitized_list[:nb_assets] if nb_assets else sanitized_list
|
final_list = sanitized_list[:nb_assets] if nb_assets else sanitized_list
|
||||||
self.config['exchange']['pair_whitelist'] = final_list
|
self.config['exchange']['pair_whitelist'] = final_list
|
||||||
|
|
||||||
self._klines = self.exchange.refresh_tickers(final_list, self.strategy.ticker_interval)
|
# Refreshing candles
|
||||||
|
self.refresh_tickers(final_list)
|
||||||
|
|
||||||
# Query trades from persistence layer
|
# Query trades from persistence layer
|
||||||
trades = Trade.query.filter(Trade.is_open.is_(True)).all()
|
trades = Trade.query.filter(Trade.is_open.is_(True)).all()
|
||||||
|
Loading…
Reference in New Issue
Block a user