Hyperoptable parameters can be instance attributes
This commit is contained in:
parent
386d3e0353
commit
eaa656f859
@ -187,9 +187,7 @@ class Backtesting:
|
|||||||
# since a "perfect" stoploss-exit is assumed anyway
|
# since a "perfect" stoploss-exit is assumed anyway
|
||||||
# And the regular "stoploss" function would not apply to that case
|
# And the regular "stoploss" function would not apply to that case
|
||||||
self.strategy.order_types['stoploss_on_exchange'] = False
|
self.strategy.order_types['stoploss_on_exchange'] = False
|
||||||
if self.dataprovider.runmode == RunMode.BACKTEST:
|
|
||||||
# in hyperopt mode - don't re-init params
|
|
||||||
self.strategy.ft_load_hyper_params(False)
|
|
||||||
self.strategy.ft_bot_start()
|
self.strategy.ft_bot_start()
|
||||||
|
|
||||||
def _load_protections(self, strategy: IStrategy):
|
def _load_protections(self, strategy: IStrategy):
|
||||||
|
@ -6,7 +6,6 @@ import logging
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Iterator, List, Tuple
|
from typing import Any, Dict, Iterator, List, Tuple
|
||||||
|
|
||||||
from freqtrade.enums import RunMode
|
|
||||||
from freqtrade.exceptions import OperationalException
|
from freqtrade.exceptions import OperationalException
|
||||||
from freqtrade.misc import deep_merge_dicts, json_load
|
from freqtrade.misc import deep_merge_dicts, json_load
|
||||||
from freqtrade.optimize.hyperopt_tools import HyperoptTools
|
from freqtrade.optimize.hyperopt_tools import HyperoptTools
|
||||||
@ -34,9 +33,7 @@ class HyperStrategyMixin:
|
|||||||
params = self.load_params_from_file()
|
params = self.load_params_from_file()
|
||||||
params = params.get('params', {})
|
params = params.get('params', {})
|
||||||
self._ft_params_from_file = params
|
self._ft_params_from_file = params
|
||||||
|
# Init/loading of parameters is done as part of ft_bot_start().
|
||||||
if config.get('runmode') != RunMode.BACKTEST:
|
|
||||||
self.ft_load_hyper_params(config.get('runmode') == RunMode.HYPEROPT)
|
|
||||||
|
|
||||||
def enumerate_parameters(self, category: str = None) -> Iterator[Tuple[str, BaseParameter]]:
|
def enumerate_parameters(self, category: str = None) -> Iterator[Tuple[str, BaseParameter]]:
|
||||||
"""
|
"""
|
||||||
@ -56,12 +53,11 @@ class HyperStrategyMixin:
|
|||||||
for par in params:
|
for par in params:
|
||||||
yield par.name, par
|
yield par.name, par
|
||||||
|
|
||||||
@classmethod
|
def detect_parameters(self, category: str) -> Iterator[Tuple[str, BaseParameter]]:
|
||||||
def detect_parameters(cls, category: str) -> Iterator[Tuple[str, BaseParameter]]:
|
|
||||||
""" Detect all parameters for 'category' """
|
""" Detect all parameters for 'category' """
|
||||||
for attr_name in dir(cls):
|
for attr_name in dir(self):
|
||||||
if not attr_name.startswith('__'): # Ignore internals, not strictly necessary.
|
if not attr_name.startswith('__'): # Ignore internals, not strictly necessary.
|
||||||
attr = getattr(cls, attr_name)
|
attr = getattr(self, attr_name)
|
||||||
if issubclass(attr.__class__, BaseParameter):
|
if issubclass(attr.__class__, BaseParameter):
|
||||||
if (attr_name.startswith(category + '_')
|
if (attr_name.startswith(category + '_')
|
||||||
and attr.category is not None and attr.category != category):
|
and attr.category is not None and attr.category != category):
|
||||||
|
@ -14,6 +14,7 @@ from freqtrade.constants import ListPairsWithTimeframes
|
|||||||
from freqtrade.data.dataprovider import DataProvider
|
from freqtrade.data.dataprovider import DataProvider
|
||||||
from freqtrade.enums import (CandleType, ExitCheckTuple, ExitType, SignalDirection, SignalTagType,
|
from freqtrade.enums import (CandleType, ExitCheckTuple, ExitType, SignalDirection, SignalTagType,
|
||||||
SignalType, TradingMode)
|
SignalType, TradingMode)
|
||||||
|
from freqtrade.enums.runmode import RunMode
|
||||||
from freqtrade.exceptions import OperationalException, StrategyError
|
from freqtrade.exceptions import OperationalException, StrategyError
|
||||||
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_next_date, timeframe_to_seconds
|
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_next_date, timeframe_to_seconds
|
||||||
from freqtrade.persistence import Order, PairLocks, Trade
|
from freqtrade.persistence import Order, PairLocks, Trade
|
||||||
@ -151,6 +152,8 @@ class IStrategy(ABC, HyperStrategyMixin):
|
|||||||
"""
|
"""
|
||||||
strategy_safe_wrapper(self.bot_start)()
|
strategy_safe_wrapper(self.bot_start)()
|
||||||
|
|
||||||
|
self.ft_load_hyper_params(self.config.get('runmode') == RunMode.HYPEROPT)
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user