prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Hyperopt confusing warning message
  ## Step 1: Describe your environment
  
    * Operating system: Windows 10
    * Python Version: 3.7.5 (`python -V`)
    * Branch: freqtrade develop-1aa1fada
    
  ## Step 2: Describe the problem:
  
  When hyperopting with the following command: `freqtrade hyperopt -c test_config.json --hyperopt strategy_hyperopt -e 750--spaces buy sell stoploss trailing -–min-trades=20 –-timerange=20200111-20200510 –j 2 --no-color` 
  
  I get the following warning messages:
  ![image](https://user-images.githubusercontent.com/24569139/82764678-db0dc700-9e10-11ea-9679-a9efc64f6207.png)
  
  I didn't include the 'normal' buy/sell trends in the hyperopt file, but since I am using the buy/sell trends generated by the hyperopt file, these messages can be confusing. It's taking the 'normal' buy/sell trends from the original strategy file, but it doesn't use it anyway.
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `freqtrade/resolvers/hyperopt_resolver.py`
  Content:
  ```
  1 # pragma pylint: disable=attribute-defined-outside-init
  2 
  3 """
  4 This module load custom hyperopt
  5 """
  6 import logging
  7 from pathlib import Path
  8 from typing import Dict
  9 
  10 from freqtrade.constants import DEFAULT_HYPEROPT_LOSS, USERPATH_HYPEROPTS
  11 from freqtrade.exceptions import OperationalException
  12 from freqtrade.optimize.hyperopt_interface import IHyperOpt
  13 from freqtrade.optimize.hyperopt_loss_interface import IHyperOptLoss
  14 from freqtrade.resolvers import IResolver
  15 
  16 logger = logging.getLogger(__name__)
  17 
  18 
  19 class HyperOptResolver(IResolver):
  20     """
  21     This class contains all the logic to load custom hyperopt class
  22     """
  23     object_type = IHyperOpt
  24     object_type_str = "Hyperopt"
  25     user_subdir = USERPATH_HYPEROPTS
  26     initial_search_path = Path(__file__).parent.parent.joinpath('optimize').resolve()
  27 
  28     @staticmethod
  29     def load_hyperopt(config: Dict) -> IHyperOpt:
  30         """
  31         Load the custom hyperopt class from config parameter
  32         :param config: configuration dictionary
  33         """
  34         if not config.get('hyperopt'):
  35             raise OperationalException("No Hyperopt set. Please use `--hyperopt` to specify "
  36                                        "the Hyperopt class to use.")
  37 
  38         hyperopt_name = config['hyperopt']
  39 
  40         hyperopt = HyperOptResolver.load_object(hyperopt_name, config,
  41                                                 kwargs={'config': config},
  42                                                 extra_dir=config.get('hyperopt_path'))
  43 
  44         if not hasattr(hyperopt, 'populate_indicators'):
  45             logger.warning("Hyperopt class does not provide populate_indicators() method. "
  46                            "Using populate_indicators from the strategy.")
  47         if not hasattr(hyperopt, 'populate_buy_trend'):
  48             logger.warning("Hyperopt class does not provide populate_buy_trend() method. "
  49                            "Using populate_buy_trend from the strategy.")
  50         if not hasattr(hyperopt, 'populate_sell_trend'):
  51             logger.warning("Hyperopt class does not provide populate_sell_trend() method. "
  52                            "Using populate_sell_trend from the strategy.")
  53         return hyperopt
  54 
  55 
  56 class HyperOptLossResolver(IResolver):
  57     """
  58     This class contains all the logic to load custom hyperopt loss class
  59     """
  60     object_type = IHyperOptLoss
  61     object_type_str = "HyperoptLoss"
  62     user_subdir = USERPATH_HYPEROPTS
  63     initial_search_path = Path(__file__).parent.parent.joinpath('optimize').resolve()
  64 
  65     @staticmethod
  66     def load_hyperoptloss(config: Dict) -> IHyperOptLoss:
  67         """
  68         Load the custom class from config parameter
  69         :param config: configuration dictionary
  70         """
  71 
  72         # Verify the hyperopt_loss is in the configuration, otherwise fallback to the
  73         # default hyperopt loss
  74         hyperoptloss_name = config.get('hyperopt_loss') or DEFAULT_HYPEROPT_LOSS
  75 
  76         hyperoptloss = HyperOptLossResolver.load_object(hyperoptloss_name,
  77                                                         config, kwargs={},
  78                                                         extra_dir=config.get('hyperopt_path'))
  79 
  80         # Assign timeframe to be used in hyperopt
  81         hyperoptloss.__class__.ticker_interval = str(config['timeframe'])
  82         hyperoptloss.__class__.timeframe = str(config['timeframe'])
  83 
  84         if not hasattr(hyperoptloss, 'hyperopt_loss_function'):
  85             raise OperationalException(
  86                 f"Found HyperoptLoss class {hyperoptloss_name} does not "
  87                 "implement `hyperopt_loss_function`.")
  88         return hyperoptloss
  89
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/freqtrade/resolvers/hyperopt_resolver.py b/freqtrade/resolvers/hyperopt_resolver.py
  --- a/freqtrade/resolvers/hyperopt_resolver.py
  +++ b/freqtrade/resolvers/hyperopt_resolver.py
  @@ -42,14 +42,14 @@
                                                   extra_dir=config.get('hyperopt_path'))
   
           if not hasattr(hyperopt, 'populate_indicators'):
  -            logger.warning("Hyperopt class does not provide populate_indicators() method. "
  -                           "Using populate_indicators from the strategy.")
  +            logger.info("Hyperopt class does not provide populate_indicators() method. "
  +                        "Using populate_indicators from the strategy.")
           if not hasattr(hyperopt, 'populate_buy_trend'):
  -            logger.warning("Hyperopt class does not provide populate_buy_trend() method. "
  -                           "Using populate_buy_trend from the strategy.")
  +            logger.info("Hyperopt class does not provide populate_buy_trend() method. "
  +                        "Using populate_buy_trend from the strategy.")
           if not hasattr(hyperopt, 'populate_sell_trend'):
  -            logger.warning("Hyperopt class does not provide populate_sell_trend() method. "
  -                           "Using populate_sell_trend from the strategy.")
  +            logger.info("Hyperopt class does not provide populate_sell_trend() method. "
  +                        "Using populate_sell_trend from the strategy.")
           return hyperopt
  
verification_info: {"golden_diff": "diff --git a/freqtrade/resolvers/hyperopt_resolver.py b/freqtrade/resolvers/hyperopt_resolver.py\n--- a/freqtrade/resolvers/hyperopt_resolver.py\n+++ b/freqtrade/resolvers/hyperopt_resolver.py\n@@ -42,14 +42,14 @@\n                                                 extra_dir=config.get('hyperopt_path'))\n \n         if not hasattr(hyperopt, 'populate_indicators'):\n-            logger.warning(\"Hyperopt class does not provide populate_indicators() method. \"\n-                           \"Using populate_indicators from the strategy.\")\n+            logger.info(\"Hyperopt class does not provide populate_indicators() method. \"\n+                        \"Using populate_indicators from the strategy.\")\n         if not hasattr(hyperopt, 'populate_buy_trend'):\n-            logger.warning(\"Hyperopt class does not provide populate_buy_trend() method. \"\n-                           \"Using populate_buy_trend from the strategy.\")\n+            logger.info(\"Hyperopt class does not provide populate_buy_trend() method. \"\n+                        \"Using populate_buy_trend from the strategy.\")\n         if not hasattr(hyperopt, 'populate_sell_trend'):\n-            logger.warning(\"Hyperopt class does not provide populate_sell_trend() method. \"\n-                           \"Using populate_sell_trend from the strategy.\")\n+            logger.info(\"Hyperopt class does not provide populate_sell_trend() method. \"\n+                        \"Using populate_sell_trend from the strategy.\")\n         return hyperopt\n", "issue": "Hyperopt confusing warning message\n## Step 1: Describe your environment\r\n\r\n  * Operating system: Windows 10\r\n  * Python Version: 3.7.5 (`python -V`)\r\n  * Branch: freqtrade develop-1aa1fada\r\n  \r\n## Step 2: Describe the problem:\r\n\r\nWhen hyperopting with the following command: `freqtrade hyperopt -c test_config.json --hyperopt strategy_hyperopt -e 750--spaces buy sell stoploss trailing -\u2013min-trades=20 \u2013-timerange=20200111-20200510 \u2013j 2 --no-color` \r\n\r\nI get the following warning messages:\r\n![image](https://user-images.githubusercontent.com/24569139/82764678-db0dc700-9e10-11ea-9679-a9efc64f6207.png)\r\n\r\nI didn't include the 'normal' buy/sell trends in the hyperopt file, but since I am using the buy/sell trends generated by the hyperopt file, these messages can be confusing. It's taking the 'normal' buy/sell trends from the original strategy file, but it doesn't use it anyway.\r\n\n", "before_files": [{"content": "# pragma pylint: disable=attribute-defined-outside-init\n\n\"\"\"\nThis module load custom hyperopt\n\"\"\"\nimport logging\nfrom pathlib import Path\nfrom typing import Dict\n\nfrom freqtrade.constants import DEFAULT_HYPEROPT_LOSS, USERPATH_HYPEROPTS\nfrom freqtrade.exceptions import OperationalException\nfrom freqtrade.optimize.hyperopt_interface import IHyperOpt\nfrom freqtrade.optimize.hyperopt_loss_interface import IHyperOptLoss\nfrom freqtrade.resolvers import IResolver\n\nlogger = logging.getLogger(__name__)\n\n\nclass HyperOptResolver(IResolver):\n    \"\"\"\n    This class contains all the logic to load custom hyperopt class\n    \"\"\"\n    object_type = IHyperOpt\n    object_type_str = \"Hyperopt\"\n    user_subdir = USERPATH_HYPEROPTS\n    initial_search_path = Path(__file__).parent.parent.joinpath('optimize').resolve()\n\n    @staticmethod\n    def load_hyperopt(config: Dict) -> IHyperOpt:\n        \"\"\"\n        Load the custom hyperopt class from config parameter\n        :param config: configuration dictionary\n        \"\"\"\n        if not config.get('hyperopt'):\n            raise OperationalException(\"No Hyperopt set. Please use `--hyperopt` to specify \"\n                                       \"the Hyperopt class to use.\")\n\n        hyperopt_name = config['hyperopt']\n\n        hyperopt = HyperOptResolver.load_object(hyperopt_name, config,\n                                                kwargs={'config': config},\n                                                extra_dir=config.get('hyperopt_path'))\n\n        if not hasattr(hyperopt, 'populate_indicators'):\n            logger.warning(\"Hyperopt class does not provide populate_indicators() method. \"\n                           \"Using populate_indicators from the strategy.\")\n        if not hasattr(hyperopt, 'populate_buy_trend'):\n            logger.warning(\"Hyperopt class does not provide populate_buy_trend() method. \"\n                           \"Using populate_buy_trend from the strategy.\")\n        if not hasattr(hyperopt, 'populate_sell_trend'):\n            logger.warning(\"Hyperopt class does not provide populate_sell_trend() method. \"\n                           \"Using populate_sell_trend from the strategy.\")\n        return hyperopt\n\n\nclass HyperOptLossResolver(IResolver):\n    \"\"\"\n    This class contains all the logic to load custom hyperopt loss class\n    \"\"\"\n    object_type = IHyperOptLoss\n    object_type_str = \"HyperoptLoss\"\n    user_subdir = USERPATH_HYPEROPTS\n    initial_search_path = Path(__file__).parent.parent.joinpath('optimize').resolve()\n\n    @staticmethod\n    def load_hyperoptloss(config: Dict) -> IHyperOptLoss:\n        \"\"\"\n        Load the custom class from config parameter\n        :param config: configuration dictionary\n        \"\"\"\n\n        # Verify the hyperopt_loss is in the configuration, otherwise fallback to the\n        # default hyperopt loss\n        hyperoptloss_name = config.get('hyperopt_loss') or DEFAULT_HYPEROPT_LOSS\n\n        hyperoptloss = HyperOptLossResolver.load_object(hyperoptloss_name,\n                                                        config, kwargs={},\n                                                        extra_dir=config.get('hyperopt_path'))\n\n        # Assign timeframe to be used in hyperopt\n        hyperoptloss.__class__.ticker_interval = str(config['timeframe'])\n        hyperoptloss.__class__.timeframe = str(config['timeframe'])\n\n        if not hasattr(hyperoptloss, 'hyperopt_loss_function'):\n            raise OperationalException(\n                f\"Found HyperoptLoss class {hyperoptloss_name} does not \"\n                \"implement `hyperopt_loss_function`.\")\n        return hyperoptloss\n", "path": "freqtrade/resolvers/hyperopt_resolver.py"}], "after_files": [{"content": "# pragma pylint: disable=attribute-defined-outside-init\n\n\"\"\"\nThis module load custom hyperopt\n\"\"\"\nimport logging\nfrom pathlib import Path\nfrom typing import Dict\n\nfrom freqtrade.constants import DEFAULT_HYPEROPT_LOSS, USERPATH_HYPEROPTS\nfrom freqtrade.exceptions import OperationalException\nfrom freqtrade.optimize.hyperopt_interface import IHyperOpt\nfrom freqtrade.optimize.hyperopt_loss_interface import IHyperOptLoss\nfrom freqtrade.resolvers import IResolver\n\nlogger = logging.getLogger(__name__)\n\n\nclass HyperOptResolver(IResolver):\n    \"\"\"\n    This class contains all the logic to load custom hyperopt class\n    \"\"\"\n    object_type = IHyperOpt\n    object_type_str = \"Hyperopt\"\n    user_subdir = USERPATH_HYPEROPTS\n    initial_search_path = Path(__file__).parent.parent.joinpath('optimize').resolve()\n\n    @staticmethod\n    def load_hyperopt(config: Dict) -> IHyperOpt:\n        \"\"\"\n        Load the custom hyperopt class from config parameter\n        :param config: configuration dictionary\n        \"\"\"\n        if not config.get('hyperopt'):\n            raise OperationalException(\"No Hyperopt set. Please use `--hyperopt` to specify \"\n                                       \"the Hyperopt class to use.\")\n\n        hyperopt_name = config['hyperopt']\n\n        hyperopt = HyperOptResolver.load_object(hyperopt_name, config,\n                                                kwargs={'config': config},\n                                                extra_dir=config.get('hyperopt_path'))\n\n        if not hasattr(hyperopt, 'populate_indicators'):\n            logger.info(\"Hyperopt class does not provide populate_indicators() method. \"\n                        \"Using populate_indicators from the strategy.\")\n        if not hasattr(hyperopt, 'populate_buy_trend'):\n            logger.info(\"Hyperopt class does not provide populate_buy_trend() method. \"\n                        \"Using populate_buy_trend from the strategy.\")\n        if not hasattr(hyperopt, 'populate_sell_trend'):\n            logger.info(\"Hyperopt class does not provide populate_sell_trend() method. \"\n                        \"Using populate_sell_trend from the strategy.\")\n        return hyperopt\n\n\nclass HyperOptLossResolver(IResolver):\n    \"\"\"\n    This class contains all the logic to load custom hyperopt loss class\n    \"\"\"\n    object_type = IHyperOptLoss\n    object_type_str = \"HyperoptLoss\"\n    user_subdir = USERPATH_HYPEROPTS\n    initial_search_path = Path(__file__).parent.parent.joinpath('optimize').resolve()\n\n    @staticmethod\n    def load_hyperoptloss(config: Dict) -> IHyperOptLoss:\n        \"\"\"\n        Load the custom class from config parameter\n        :param config: configuration dictionary\n        \"\"\"\n\n        # Verify the hyperopt_loss is in the configuration, otherwise fallback to the\n        # default hyperopt loss\n        hyperoptloss_name = config.get('hyperopt_loss') or DEFAULT_HYPEROPT_LOSS\n\n        hyperoptloss = HyperOptLossResolver.load_object(hyperoptloss_name,\n                                                        config, kwargs={},\n                                                        extra_dir=config.get('hyperopt_path'))\n\n        # Assign timeframe to be used in hyperopt\n        hyperoptloss.__class__.ticker_interval = str(config['timeframe'])\n        hyperoptloss.__class__.timeframe = str(config['timeframe'])\n\n        if not hasattr(hyperoptloss, 'hyperopt_loss_function'):\n            raise OperationalException(\n                f\"Found HyperoptLoss class {hyperoptloss_name} does not \"\n                \"implement `hyperopt_loss_function`.\")\n        return hyperoptloss\n", "path": "freqtrade/resolvers/hyperopt_resolver.py"}]}