From 12471e012e1dd43155c84c063f33e6b7c4013dd6 Mon Sep 17 00:00:00 2001 From: misagh Date: Fri, 30 Nov 2018 17:59:51 +0100 Subject: [PATCH] added tests for position sizing --- freqtrade/edge/__init__.py | 2 +- freqtrade/tests/edge/test_edge.py | 40 ++++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/freqtrade/edge/__init__.py b/freqtrade/edge/__init__.py index 4800691e8..b76821da0 100644 --- a/freqtrade/edge/__init__.py +++ b/freqtrade/edge/__init__.py @@ -164,7 +164,7 @@ class Edge(): if pair not in self._cached_pairs: logger.warning("cannot find %s in calculated pairs, " "stake_amount of strategy is used instead.", pair) - return self.strategy.stake_amount + return self.config['stake_amount'] stoploss = self._cached_pairs[pair].stoploss available_capital = total_capital * self._capital_percentage diff --git a/freqtrade/tests/edge/test_edge.py b/freqtrade/tests/edge/test_edge.py index d5457f342..d453f6f27 100644 --- a/freqtrade/tests/edge/test_edge.py +++ b/freqtrade/tests/edge/test_edge.py @@ -5,6 +5,7 @@ import pytest import logging from freqtrade.tests.conftest import get_patched_freqtradebot from freqtrade.edge import Edge, PairInfo +from freqtrade import constants from pandas import DataFrame, to_datetime from freqtrade.strategy.interface import SellType from freqtrade.tests.optimize import (BTrade, BTContainer, _build_backtest_dataframe, @@ -152,9 +153,9 @@ def test_stoploss(mocker, edge_conf): assert edge.stoploss('E/F') == -0.01 -def test_nonexisting_stoploss(mocker, default_conf): - freqtrade = get_patched_freqtradebot(mocker, default_conf) - edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy) +def test_nonexisting_stoploss(mocker, edge_conf): + freqtrade = get_patched_freqtradebot(mocker, edge_conf) + edge = Edge(edge_conf, freqtrade.exchange, freqtrade.strategy) mocker.patch('freqtrade.edge.Edge._cached_pairs', mocker.PropertyMock( return_value={ 'E/F': PairInfo(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60), @@ -164,6 +165,39 @@ def test_nonexisting_stoploss(mocker, default_conf): assert edge.stoploss('N/O') == -0.1 +def test_stake_amount(mocker, edge_conf): + freqtrade = get_patched_freqtradebot(mocker, edge_conf) + edge = Edge(edge_conf, freqtrade.exchange, freqtrade.strategy) + mocker.patch('freqtrade.edge.Edge._cached_pairs', mocker.PropertyMock( + return_value={ + 'E/F': PairInfo(-0.02, 0.66, 3.71, 0.50, 1.71, 10, 60), + } + )) + free = 100 + total = 100 + assert edge.stake_amount('E/F', free, total) == 25 + + free = 20 + total = 100 + assert edge.stake_amount('E/F', free, total) == 20 + + free = 0 + total = 100 + assert edge.stake_amount('E/F', free, total) == 0 + + +def test_nonexisting_stake_amount(mocker, edge_conf): + freqtrade = get_patched_freqtradebot(mocker, edge_conf) + edge = Edge(edge_conf, freqtrade.exchange, freqtrade.strategy) + mocker.patch('freqtrade.edge.Edge._cached_pairs', mocker.PropertyMock( + return_value={ + 'E/F': PairInfo(-0.01, 0.66, 3.71, 0.50, 1.71, 10, 60), + } + )) + + assert edge.stake_amount('N/O', 1, 2) == constants.UNLIMITED_STAKE_AMOUNT + + def _validate_ohlc(buy_ohlc_sell_matrice): for index, ohlc in enumerate(buy_ohlc_sell_matrice): # if not high < open < low or not high < close < low