store result strings, display best result in summary. switch to a lot better objective algo
This commit is contained in:
parent
08ca7a8166
commit
649781d823
@ -1,15 +1,17 @@
|
|||||||
# pragma pylint: disable=missing-docstring
|
# pragma pylint: disable=missing-docstring
|
||||||
|
from operator import itemgetter
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from functools import reduce
|
from functools import reduce
|
||||||
|
from math import exp
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import arrow
|
import arrow
|
||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
from qtpylib.indicators import crossed_above
|
from qtpylib.indicators import crossed_above
|
||||||
|
|
||||||
from hyperopt import fmin, tpe, hp
|
from hyperopt import fmin, tpe, hp, Trials, STATUS_OK
|
||||||
|
|
||||||
from freqtrade.analyze import analyze_ticker
|
from freqtrade.analyze import analyze_ticker
|
||||||
from freqtrade.main import should_sell
|
from freqtrade.main import should_sell
|
||||||
@ -19,6 +21,10 @@ from freqtrade.tests.test_backtesting import backtest, format_results
|
|||||||
|
|
||||||
logging.disable(logging.DEBUG) # disable debug logs that slow backtesting a lot
|
logging.disable(logging.DEBUG) # disable debug logs that slow backtesting a lot
|
||||||
|
|
||||||
|
# set TARGET_TRADES to suit your number concurrent trades so its realistic to 20days of data
|
||||||
|
TARGET_TRADES = 1200
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def pairs():
|
def pairs():
|
||||||
return ['btc-neo', 'btc-eth', 'btc-omg', 'btc-edg', 'btc-pay',
|
return ['btc-neo', 'btc-eth', 'btc-omg', 'btc-edg', 'btc-pay',
|
||||||
@ -86,11 +92,17 @@ def test_hyperopt(conf, pairs, mocker):
|
|||||||
result = format_results(results)
|
result = format_results(results)
|
||||||
print(result)
|
print(result)
|
||||||
|
|
||||||
# set TARGET_TRADES to suit your number concurrent trades so its realistic to 20days of data
|
total_profit = results.profit.sum() * 1000
|
||||||
TARGET_TRADES = 1200
|
trade_count = len(results.index)
|
||||||
if results.profit.sum() == 0 or results.profit.mean() == 0:
|
|
||||||
return 49999999999 # avoid division by zero, return huge value to discard result
|
trade_loss = 1 - 0.8 * exp(-(trade_count - TARGET_TRADES) ** 2 / 10 ** 5)
|
||||||
return abs(len(results.index) - 1200.1) / (results.profit.sum() ** 2) * results.duration.mean() # the smaller the better
|
profit_loss = exp(-total_profit**3 / 10**11)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'loss': trade_loss + profit_loss,
|
||||||
|
'status': STATUS_OK,
|
||||||
|
'result': result
|
||||||
|
}
|
||||||
|
|
||||||
space = {
|
space = {
|
||||||
'mfi': hp.choice('mfi', [
|
'mfi': hp.choice('mfi', [
|
||||||
@ -131,4 +143,9 @@ def test_hyperopt(conf, pairs, mocker):
|
|||||||
{'type': 'ao_cross_zero'}
|
{'type': 'ao_cross_zero'}
|
||||||
]),
|
]),
|
||||||
}
|
}
|
||||||
print('Best parameters {}'.format(fmin(fn=optimizer, space=space, algo=tpe.suggest, max_evals=40)))
|
trials = Trials()
|
||||||
|
best = fmin(fn=optimizer, space=space, algo=tpe.suggest, max_evals=40, trials=trials)
|
||||||
|
print('\n\n\n\n====================== HYPEROPT BACKTESTING REPORT ================================')
|
||||||
|
print('Best parameters {}'.format(best))
|
||||||
|
newlist = sorted(trials.results, key=itemgetter('loss'))
|
||||||
|
print('Result: {}'.format(newlist[0]['result']))
|
||||||
|
Loading…
Reference in New Issue
Block a user