Merge pull request #4375 from flomerz/pass_processed_data
pass data and config to loss function
This commit is contained in:
commit
eff0d46ea1
@ -40,6 +40,11 @@ For the sample below, you then need to add the command line parameter `--hyperop
|
|||||||
A sample of this can be found below, which is identical to the Default Hyperopt loss implementation. A full sample can be found in [userdata/hyperopts](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/templates/sample_hyperopt_loss.py).
|
A sample of this can be found below, which is identical to the Default Hyperopt loss implementation. A full sample can be found in [userdata/hyperopts](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/templates/sample_hyperopt_loss.py).
|
||||||
|
|
||||||
``` python
|
``` python
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
|
from pandas import DataFrame
|
||||||
|
|
||||||
from freqtrade.optimize.hyperopt import IHyperOptLoss
|
from freqtrade.optimize.hyperopt import IHyperOptLoss
|
||||||
|
|
||||||
TARGET_TRADES = 600
|
TARGET_TRADES = 600
|
||||||
@ -54,6 +59,7 @@ class SuperDuperHyperOptLoss(IHyperOptLoss):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def hyperopt_loss_function(results: DataFrame, trade_count: int,
|
def hyperopt_loss_function(results: DataFrame, trade_count: int,
|
||||||
min_date: datetime, max_date: datetime,
|
min_date: datetime, max_date: datetime,
|
||||||
|
processed: Dict[str, DataFrame],
|
||||||
*args, **kwargs) -> float:
|
*args, **kwargs) -> float:
|
||||||
"""
|
"""
|
||||||
Objective function, returns smaller number for better results
|
Objective function, returns smaller number for better results
|
||||||
@ -81,6 +87,7 @@ Currently, the arguments are:
|
|||||||
* `trade_count`: Amount of trades (identical to `len(results)`)
|
* `trade_count`: Amount of trades (identical to `len(results)`)
|
||||||
* `min_date`: Start date of the timerange used
|
* `min_date`: Start date of the timerange used
|
||||||
* `min_date`: End date of the timerange used
|
* `min_date`: End date of the timerange used
|
||||||
|
* `processed`: Dict of Dataframes with the pair as keys containing the data used for backtesting.
|
||||||
|
|
||||||
This function needs to return a floating point number (`float`). Smaller numbers will be interpreted as better results. The parameters and balancing for this is up to you.
|
This function needs to return a floating point number (`float`). Smaller numbers will be interpreted as better results. The parameters and balancing for this is up to you.
|
||||||
|
|
||||||
|
@ -546,10 +546,11 @@ class Hyperopt:
|
|||||||
|
|
||||||
)
|
)
|
||||||
return self._get_results_dict(backtesting_results, min_date, max_date,
|
return self._get_results_dict(backtesting_results, min_date, max_date,
|
||||||
params_dict, params_details)
|
params_dict, params_details,
|
||||||
|
processed=processed)
|
||||||
|
|
||||||
def _get_results_dict(self, backtesting_results, min_date, max_date,
|
def _get_results_dict(self, backtesting_results, min_date, max_date,
|
||||||
params_dict, params_details):
|
params_dict, params_details, processed: Dict[str, DataFrame]):
|
||||||
results_metrics = self._calculate_results_metrics(backtesting_results)
|
results_metrics = self._calculate_results_metrics(backtesting_results)
|
||||||
results_explanation = self._format_results_explanation_string(results_metrics)
|
results_explanation = self._format_results_explanation_string(results_metrics)
|
||||||
|
|
||||||
@ -563,7 +564,8 @@ class Hyperopt:
|
|||||||
loss: float = MAX_LOSS
|
loss: float = MAX_LOSS
|
||||||
if trade_count >= self.config['hyperopt_min_trades']:
|
if trade_count >= self.config['hyperopt_min_trades']:
|
||||||
loss = self.calculate_loss(results=backtesting_results, trade_count=trade_count,
|
loss = self.calculate_loss(results=backtesting_results, trade_count=trade_count,
|
||||||
min_date=min_date.datetime, max_date=max_date.datetime)
|
min_date=min_date.datetime, max_date=max_date.datetime,
|
||||||
|
config=self.config, processed=processed)
|
||||||
return {
|
return {
|
||||||
'loss': loss,
|
'loss': loss,
|
||||||
'params_dict': params_dict,
|
'params_dict': params_dict,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from math import exp
|
from math import exp
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
|
|
||||||
@ -35,6 +36,7 @@ class SampleHyperOptLoss(IHyperOptLoss):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def hyperopt_loss_function(results: DataFrame, trade_count: int,
|
def hyperopt_loss_function(results: DataFrame, trade_count: int,
|
||||||
min_date: datetime, max_date: datetime,
|
min_date: datetime, max_date: datetime,
|
||||||
|
processed: Dict[str, DataFrame],
|
||||||
*args, **kwargs) -> float:
|
*args, **kwargs) -> float:
|
||||||
"""
|
"""
|
||||||
Objective function, returns smaller number for better results
|
Objective function, returns smaller number for better results
|
||||||
|
Loading…
Reference in New Issue
Block a user