def test_generate_optimizer(mocker, hyperopt_conf) -> None:
    hyperopt_conf.update({
        'spaces': 'all',
        'hyperopt_min_trades': 1,
    })

    trades = [('TRX/BTC', 0.023117, 0.000233, 100)]
    labels = ['currency', 'profit_percent', 'profit_abs', 'trade_duration']
    backtest_result = pd.DataFrame.from_records(trades, columns=labels)

    mocker.patch('freqtrade.optimize.hyperopt.Backtesting.backtest',
                 MagicMock(return_value=backtest_result))
    mocker.patch(
        'freqtrade.optimize.hyperopt.get_timerange',
        MagicMock(return_value=(Arrow(2017, 12, 10), Arrow(2017, 12, 13))))
    patch_exchange(mocker)
    mocker.patch('freqtrade.optimize.hyperopt.load', MagicMock())

    optimizer_param = {
        'adx-value': 0,
        'fastd-value': 35,
        'mfi-value': 0,
        'rsi-value': 0,
        'adx-enabled': False,
        'fastd-enabled': True,
        'mfi-enabled': False,
        'rsi-enabled': False,
        'trigger': 'macd_cross_signal',
        'sell-adx-value': 0,
        'sell-fastd-value': 75,
        'sell-mfi-value': 0,
        'sell-rsi-value': 0,
        'sell-adx-enabled': False,
        'sell-fastd-enabled': True,
        'sell-mfi-enabled': False,
        'sell-rsi-enabled': False,
        'sell-trigger': 'macd_cross_signal',
        'roi_t1': 60.0,
        'roi_t2': 30.0,
        'roi_t3': 20.0,
        'roi_p1': 0.01,
        'roi_p2': 0.01,
        'roi_p3': 0.1,
        'stoploss': -0.4,
        'trailing_stop': True,
        'trailing_stop_positive': 0.02,
        'trailing_stop_positive_offset_p1': 0.05,
        'trailing_only_offset_is_reached': False,
    }
    response_expected = {
        'loss':
        1.9840569076926293,
        'results_explanation':
        ('     1 trades. 1/0/0 Wins/Draws/Losses. '
         'Avg profit   2.31%. Median profit   2.31%. Total profit  '
         '0.00023300 BTC (   2.31\N{GREEK CAPITAL LETTER SIGMA}%). '
         'Avg duration 100.0 min.').encode(locale.getpreferredencoding(),
                                           'replace').decode('utf-8'),
        'params_details': {
            'buy': {
                'adx-enabled': False,
                'adx-value': 0,
                'fastd-enabled': True,
                'fastd-value': 35,
                'mfi-enabled': False,
                'mfi-value': 0,
                'rsi-enabled': False,
                'rsi-value': 0,
                'trigger': 'macd_cross_signal'
            },
            'roi': {
                0: 0.12000000000000001,
                20.0: 0.02,
                50.0: 0.01,
                110.0: 0
            },
            'sell': {
                'sell-adx-enabled': False,
                'sell-adx-value': 0,
                'sell-fastd-enabled': True,
                'sell-fastd-value': 75,
                'sell-mfi-enabled': False,
                'sell-mfi-value': 0,
                'sell-rsi-enabled': False,
                'sell-rsi-value': 0,
                'sell-trigger': 'macd_cross_signal'
            },
            'stoploss': {
                'stoploss': -0.4
            },
            'trailing': {
                'trailing_only_offset_is_reached': False,
                'trailing_stop': True,
                'trailing_stop_positive': 0.02,
                'trailing_stop_positive_offset': 0.07
            }
        },
        'params_dict':
        optimizer_param,
        'results_metrics': {
            'avg_profit': 2.3117,
            'draws': 0,
            'duration': 100.0,
            'losses': 0,
            'winsdrawslosses': '   1    0    0',
            'median_profit': 2.3117,
            'profit': 2.3117,
            'total_profit': 0.000233,
            'trade_count': 1,
            'wins': 1
        },
        'total_profit':
        0.00023300
    }

    hyperopt = Hyperopt(hyperopt_conf)
    hyperopt.dimensions = hyperopt.hyperopt_space()
    generate_optimizer_value = hyperopt.generate_optimizer(
        list(optimizer_param.values()))
    assert generate_optimizer_value == response_expected
예제 #2
0
def test_generate_optimizer(mocker, default_conf) -> None:
    default_conf.update({'config': 'config.json.example'})
    default_conf.update({'timerange': None})
    default_conf.update({'spaces': 'all'})
    default_conf.update({'hyperopt_min_trades': 1})

    trades = [('POWR/BTC', 0.023117, 0.000233, 100)]
    labels = ['currency', 'profit_percent', 'profit_abs', 'trade_duration']
    backtest_result = pd.DataFrame.from_records(trades, columns=labels)

    mocker.patch('freqtrade.optimize.hyperopt.Backtesting.backtest',
                 MagicMock(return_value=backtest_result))
    mocker.patch(
        'freqtrade.optimize.hyperopt.get_timeframe',
        MagicMock(return_value=(Arrow(2017, 12, 10), Arrow(2017, 12, 13))))
    patch_exchange(mocker)
    mocker.patch('freqtrade.optimize.hyperopt.load', MagicMock())

    optimizer_param = {
        'adx-value': 0,
        'fastd-value': 35,
        'mfi-value': 0,
        'rsi-value': 0,
        'adx-enabled': False,
        'fastd-enabled': True,
        'mfi-enabled': False,
        'rsi-enabled': False,
        'trigger': 'macd_cross_signal',
        'sell-adx-value': 0,
        'sell-fastd-value': 75,
        'sell-mfi-value': 0,
        'sell-rsi-value': 0,
        'sell-adx-enabled': False,
        'sell-fastd-enabled': True,
        'sell-mfi-enabled': False,
        'sell-rsi-enabled': False,
        'sell-trigger': 'macd_cross_signal',
        'roi_t1': 60.0,
        'roi_t2': 30.0,
        'roi_t3': 20.0,
        'roi_p1': 0.01,
        'roi_p2': 0.01,
        'roi_p3': 0.1,
        'stoploss': -0.4,
    }
    response_expected = {
        'loss':
        1.9840569076926293,
        'results_explanation':
        '     1 trades. Avg profit  2.31%. Total profit  0.00023300 BTC '
        '(   2.31Σ%). Avg duration 100.0 mins.',
        'params':
        optimizer_param,
        'total_profit':
        0.00023300
    }

    hyperopt = Hyperopt(default_conf)
    hyperopt.dimensions = hyperopt.hyperopt_space()
    generate_optimizer_value = hyperopt.generate_optimizer(
        list(optimizer_param.values()))
    assert generate_optimizer_value == response_expected