Improve outstanding balance

This commit is contained in:
Matthias 2021-10-02 15:23:09 +02:00
parent 1604436e54
commit e2356c856d
2 changed files with 27 additions and 13 deletions

View File

@ -446,13 +446,13 @@ def calculate_outstanding_balance(results: pd.DataFrame, timeframe: str,
from freqtrade.exchange import timeframe_to_minutes from freqtrade.exchange import timeframe_to_minutes
timeframe_min = timeframe_to_minutes(timeframe) timeframe_min = timeframe_to_minutes(timeframe)
df3 = expand_trades_over_period(results, timeframe, timeframe_min) trades_over_period = expand_trades_over_period(results, timeframe, timeframe_min)
values = {} values = {}
# Iterate over every pair # Iterate over every pair
for pair in hloc: for pair in hloc:
ohlc = hloc[pair].set_index('date') ohlc = hloc[pair].set_index('date')
df_pair = df3.loc[df3['pair'] == pair] df_pair = trades_over_period.loc[trades_over_period['pair'] == pair]
# filter on pair and convert dateindex to utc # filter on pair and convert dateindex to utc
# * Temporary workaround # * Temporary workaround
df_pair.index = pd.to_datetime(df_pair.index, utc=True) df_pair.index = pd.to_datetime(df_pair.index, utc=True)
@ -466,6 +466,6 @@ def calculate_outstanding_balance(results: pd.DataFrame, timeframe: str,
values[pair] = df4 values[pair] = df4
balance = pd.concat([df[['value']] for k, df in values.items()]) balance = pd.concat([df[['value']] for k, df in values.items()])
# TODO: Does this resample make sense ... ? # Combine multi-pair balances
balance = balance.resample(f"{timeframe_min}min").agg({"value": sum}) balance = balance.resample(f"{timeframe_min}min").agg({"value": sum})
return balance return balance

View File

@ -6,6 +6,7 @@ import pytest
from freqtrade.exceptions import OperationalException from freqtrade.exceptions import OperationalException
from freqtrade.optimize.hyperopt_loss_short_trade_dur import ShortTradeDurHyperOptLoss from freqtrade.optimize.hyperopt_loss_short_trade_dur import ShortTradeDurHyperOptLoss
from freqtrade.resolvers.hyperopt_resolver import HyperOptLossResolver from freqtrade.resolvers.hyperopt_resolver import HyperOptLossResolver
from tests.strategy.test_strategy_helpers import generate_test_data
def test_hyperoptlossresolver_noname(default_conf): def test_hyperoptlossresolver_noname(default_conf):
@ -78,14 +79,16 @@ def test_loss_calculation_has_limited_profit(hyperopt_conf, hyperopt_results) ->
assert under > correct assert under > correct
@pytest.mark.parametrize('lossfunction', [ @pytest.mark.parametrize('lossfunction, needsdata', [
"OnlyProfitHyperOptLoss", ("OnlyProfitHyperOptLoss", False),
"SortinoHyperOptLoss", ("SortinoHyperOptLoss", False),
"SortinoHyperOptLossDaily", ("SortinoHyperOptLossDaily", False),
"SharpeHyperOptLoss", ("SharpeHyperOptLoss", False),
"SharpeHyperOptLossDaily", ("SharpeHyperOptLossDaily", False),
("SortinoLossBalance", True),
]) ])
def test_loss_functions_better_profits(default_conf, hyperopt_results, lossfunction) -> None: def test_loss_functions_better_profits(default_conf, hyperopt_results,
lossfunction, needsdata) -> None:
results_over = hyperopt_results.copy() results_over = hyperopt_results.copy()
results_over['profit_abs'] = hyperopt_results['profit_abs'] * 2 results_over['profit_abs'] = hyperopt_results['profit_abs'] * 2
results_over['profit_ratio'] = hyperopt_results['profit_ratio'] * 2 results_over['profit_ratio'] = hyperopt_results['profit_ratio'] * 2
@ -93,13 +96,24 @@ def test_loss_functions_better_profits(default_conf, hyperopt_results, lossfunct
results_under['profit_abs'] = hyperopt_results['profit_abs'] / 2 results_under['profit_abs'] = hyperopt_results['profit_abs'] / 2
results_under['profit_ratio'] = hyperopt_results['profit_ratio'] / 2 results_under['profit_ratio'] = hyperopt_results['profit_ratio'] / 2
if needsdata:
data = {'ETH/USDT': generate_test_data('5m', 1200, start='2019-01-01')}
else:
data = {}
default_conf.update({'hyperopt_loss': lossfunction}) default_conf.update({'hyperopt_loss': lossfunction})
hl = HyperOptLossResolver.load_hyperoptloss(default_conf) hl = HyperOptLossResolver.load_hyperoptloss(default_conf)
correct = hl.hyperopt_loss_function(hyperopt_results, len(hyperopt_results), correct = hl.hyperopt_loss_function(hyperopt_results, len(hyperopt_results),
datetime(2019, 1, 1), datetime(2019, 5, 1)) datetime(2019, 1, 1), datetime(2019, 5, 1),
config=default_conf, processed=data,
)
over = hl.hyperopt_loss_function(results_over, len(results_over), over = hl.hyperopt_loss_function(results_over, len(results_over),
datetime(2019, 1, 1), datetime(2019, 5, 1)) datetime(2019, 1, 1), datetime(2019, 5, 1),
config=default_conf, processed=data,
)
under = hl.hyperopt_loss_function(results_under, len(results_under), under = hl.hyperopt_loss_function(results_under, len(results_under),
datetime(2019, 1, 1), datetime(2019, 5, 1)) datetime(2019, 1, 1), datetime(2019, 5, 1),
config=default_conf, processed=data,
)
assert over < correct assert over < correct
assert under > correct assert under > correct