Merge pull request #2643 from freqtrade/mins
Remove min (plural) from codebase
This commit is contained in:
commit
703924d6c4
@ -463,7 +463,7 @@ def get_timeframe(data: Dict[str, DataFrame]) -> Tuple[arrow.Arrow, arrow.Arrow]
|
|||||||
|
|
||||||
|
|
||||||
def validate_backtest_data(data: DataFrame, pair: str, min_date: datetime,
|
def validate_backtest_data(data: DataFrame, pair: str, min_date: datetime,
|
||||||
max_date: datetime, timeframe_mins: int) -> bool:
|
max_date: datetime, timeframe_min: int) -> bool:
|
||||||
"""
|
"""
|
||||||
Validates preprocessed backtesting data for missing values and shows warnings about it that.
|
Validates preprocessed backtesting data for missing values and shows warnings about it that.
|
||||||
|
|
||||||
@ -471,10 +471,10 @@ def validate_backtest_data(data: DataFrame, pair: str, min_date: datetime,
|
|||||||
:param pair: pair used for log output.
|
:param pair: pair used for log output.
|
||||||
:param min_date: start-date of the data
|
:param min_date: start-date of the data
|
||||||
:param max_date: end-date of the data
|
:param max_date: end-date of the data
|
||||||
:param timeframe_mins: ticker Timeframe in minutes
|
:param timeframe_min: ticker Timeframe in minutes
|
||||||
"""
|
"""
|
||||||
# total difference in minutes / timeframe-minutes
|
# total difference in minutes / timeframe-minutes
|
||||||
expected_frames = int((max_date - min_date).total_seconds() // 60 // timeframe_mins)
|
expected_frames = int((max_date - min_date).total_seconds() // 60 // timeframe_min)
|
||||||
found_missing = False
|
found_missing = False
|
||||||
dflen = len(data)
|
dflen = len(data)
|
||||||
if dflen < expected_frames:
|
if dflen < expected_frames:
|
||||||
|
@ -87,7 +87,7 @@ class Backtesting:
|
|||||||
raise OperationalException("Ticker-interval needs to be set in either configuration "
|
raise OperationalException("Ticker-interval needs to be set in either configuration "
|
||||||
"or as cli argument `--ticker-interval 5m`")
|
"or as cli argument `--ticker-interval 5m`")
|
||||||
self.timeframe = str(self.config.get('ticker_interval'))
|
self.timeframe = str(self.config.get('ticker_interval'))
|
||||||
self.timeframe_mins = timeframe_to_minutes(self.timeframe)
|
self.timeframe_min = timeframe_to_minutes(self.timeframe)
|
||||||
|
|
||||||
# Get maximum required startup period
|
# Get maximum required startup period
|
||||||
self.required_startup = max([strat.startup_candle_count for strat in self.strategylist])
|
self.required_startup = max([strat.startup_candle_count for strat in self.strategylist])
|
||||||
@ -378,7 +378,7 @@ class Backtesting:
|
|||||||
lock_pair_until: Dict = {}
|
lock_pair_until: Dict = {}
|
||||||
# Indexes per pair, so some pairs are allowed to have a missing start.
|
# Indexes per pair, so some pairs are allowed to have a missing start.
|
||||||
indexes: Dict = {}
|
indexes: Dict = {}
|
||||||
tmp = start_date + timedelta(minutes=self.timeframe_mins)
|
tmp = start_date + timedelta(minutes=self.timeframe_min)
|
||||||
|
|
||||||
# Loop timerange and get candle for each pair at that point in time
|
# Loop timerange and get candle for each pair at that point in time
|
||||||
while tmp < end_date:
|
while tmp < end_date:
|
||||||
@ -430,7 +430,7 @@ class Backtesting:
|
|||||||
lock_pair_until[pair] = end_date.datetime
|
lock_pair_until[pair] = end_date.datetime
|
||||||
|
|
||||||
# Move time one configured time_interval ahead.
|
# Move time one configured time_interval ahead.
|
||||||
tmp += timedelta(minutes=self.timeframe_mins)
|
tmp += timedelta(minutes=self.timeframe_min)
|
||||||
return DataFrame.from_records(trades, columns=BacktestResult._fields)
|
return DataFrame.from_records(trades, columns=BacktestResult._fields)
|
||||||
|
|
||||||
def start(self) -> None:
|
def start(self) -> None:
|
||||||
|
@ -426,7 +426,7 @@ class Hyperopt:
|
|||||||
f"Avg profit {results_metrics['avg_profit']: 6.2f}%. "
|
f"Avg profit {results_metrics['avg_profit']: 6.2f}%. "
|
||||||
f"Total profit {results_metrics['total_profit']: 11.8f} {stake_cur} "
|
f"Total profit {results_metrics['total_profit']: 11.8f} {stake_cur} "
|
||||||
f"({results_metrics['profit']: 7.2f}\N{GREEK CAPITAL LETTER SIGMA}%). "
|
f"({results_metrics['profit']: 7.2f}\N{GREEK CAPITAL LETTER SIGMA}%). "
|
||||||
f"Avg duration {results_metrics['duration']:5.1f} mins."
|
f"Avg duration {results_metrics['duration']:5.1f} min."
|
||||||
).encode(locale.getpreferredencoding(), 'replace').decode('utf-8')
|
).encode(locale.getpreferredencoding(), 'replace').decode('utf-8')
|
||||||
|
|
||||||
def get_optimizer(self, dimensions: List[Dimension], cpu_count) -> Optimizer:
|
def get_optimizer(self, dimensions: List[Dimension], cpu_count) -> Optimizer:
|
||||||
|
@ -106,7 +106,7 @@ class IHyperOpt(ABC):
|
|||||||
roi_t_alpha = 1.0
|
roi_t_alpha = 1.0
|
||||||
roi_p_alpha = 1.0
|
roi_p_alpha = 1.0
|
||||||
|
|
||||||
timeframe_mins = timeframe_to_minutes(IHyperOpt.ticker_interval)
|
timeframe_min = timeframe_to_minutes(IHyperOpt.ticker_interval)
|
||||||
|
|
||||||
# We define here limits for the ROI space parameters automagically adapted to the
|
# We define here limits for the ROI space parameters automagically adapted to the
|
||||||
# timeframe used by the bot:
|
# timeframe used by the bot:
|
||||||
@ -117,8 +117,8 @@ class IHyperOpt(ABC):
|
|||||||
#
|
#
|
||||||
# The scaling is designed so that it maps exactly to the legacy Freqtrade roi_space()
|
# The scaling is designed so that it maps exactly to the legacy Freqtrade roi_space()
|
||||||
# method for the 5m ticker interval.
|
# method for the 5m ticker interval.
|
||||||
roi_t_scale = timeframe_mins / 5
|
roi_t_scale = timeframe_min / 5
|
||||||
roi_p_scale = math.log1p(timeframe_mins) / math.log1p(5)
|
roi_p_scale = math.log1p(timeframe_min) / math.log1p(5)
|
||||||
roi_limits = {
|
roi_limits = {
|
||||||
'roi_t1_min': int(10 * roi_t_scale * roi_t_alpha),
|
'roi_t1_min': int(10 * roi_t_scale * roi_t_alpha),
|
||||||
'roi_t1_max': int(120 * roi_t_scale * roi_t_alpha),
|
'roi_t1_max': int(120 * roi_t_scale * roi_t_alpha),
|
||||||
|
@ -121,7 +121,7 @@ def plot_trades(fig, trades: pd.DataFrame) -> make_subplots:
|
|||||||
)
|
)
|
||||||
# Create description for sell summarizing the trade
|
# Create description for sell summarizing the trade
|
||||||
desc = trades.apply(lambda row: f"{round(row['profitperc'], 3)}%, {row['sell_reason']}, "
|
desc = trades.apply(lambda row: f"{round(row['profitperc'], 3)}%, {row['sell_reason']}, "
|
||||||
f"{row['duration']}min",
|
f"{row['duration']} min",
|
||||||
axis=1)
|
axis=1)
|
||||||
trade_sells = go.Scatter(
|
trade_sells = go.Scatter(
|
||||||
x=trades["close_time"],
|
x=trades["close_time"],
|
||||||
|
File diff suppressed because one or more lines are too long
@ -250,7 +250,7 @@ tc15 = BTContainer(data=[
|
|||||||
BTrade(sell_reason=SellType.STOP_LOSS, open_tick=2, close_tick=2)]
|
BTrade(sell_reason=SellType.STOP_LOSS, open_tick=2, close_tick=2)]
|
||||||
)
|
)
|
||||||
|
|
||||||
# Test 16: Buy, hold for 65 mins, then forcesell using roi=-1
|
# Test 16: Buy, hold for 65 min, then forcesell using roi=-1
|
||||||
# Causes negative profit even though sell-reason is ROI.
|
# Causes negative profit even though sell-reason is ROI.
|
||||||
# stop-loss: 10%, ROI: 10% (should not apply), -100% after 65 minutes (limits trade duration)
|
# stop-loss: 10%, ROI: 10% (should not apply), -100% after 65 minutes (limits trade duration)
|
||||||
tc16 = BTContainer(data=[
|
tc16 = BTContainer(data=[
|
||||||
|
@ -642,7 +642,7 @@ def test_generate_optimizer(mocker, default_conf) -> None:
|
|||||||
response_expected = {
|
response_expected = {
|
||||||
'loss': 1.9840569076926293,
|
'loss': 1.9840569076926293,
|
||||||
'results_explanation': (' 1 trades. Avg profit 2.31%. Total profit 0.00023300 BTC '
|
'results_explanation': (' 1 trades. Avg profit 2.31%. Total profit 0.00023300 BTC '
|
||||||
'( 2.31\N{GREEK CAPITAL LETTER SIGMA}%). Avg duration 100.0 mins.'
|
'( 2.31\N{GREEK CAPITAL LETTER SIGMA}%). Avg duration 100.0 min.'
|
||||||
).encode(locale.getpreferredencoding(), 'replace').decode('utf-8'),
|
).encode(locale.getpreferredencoding(), 'replace').decode('utf-8'),
|
||||||
'params_details': {'buy': {'adx-enabled': False,
|
'params_details': {'buy': {'adx-enabled': False,
|
||||||
'adx-value': 0,
|
'adx-value': 0,
|
||||||
|
Loading…
Reference in New Issue
Block a user