From e5c6499706ba9c7523b57b3c91c72ca61147ad06 Mon Sep 17 00:00:00 2001 From: misagh Date: Thu, 8 Nov 2018 00:22:46 +0100 Subject: [PATCH] assigning strategy to edge from FreqtradeBot --- freqtrade/edge/__init__.py | 8 ++--- freqtrade/freqtradebot.py | 2 +- freqtrade/tests/edge/test_edge.py | 52 ++++++++++++++++--------------- 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/freqtrade/edge/__init__.py b/freqtrade/edge/__init__.py index 5d1ce5f11..a468a76a3 100644 --- a/freqtrade/edge/__init__.py +++ b/freqtrade/edge/__init__.py @@ -2,6 +2,7 @@ """ Edge positioning package """ import logging from typing import Any, Dict +from collections import namedtuple import arrow import numpy as np @@ -12,8 +13,7 @@ import freqtrade.optimize as optimize from freqtrade.arguments import Arguments from freqtrade.arguments import TimeRange from freqtrade.strategy.interface import SellType -from freqtrade.strategy.resolver import IStrategy, StrategyResolver -from collections import namedtuple + logger = logging.getLogger(__name__) @@ -35,11 +35,11 @@ class Edge(): 'pair_info', ['stoploss', 'winrate', 'risk_reward_ratio', 'required_risk_reward', 'expectancy']) - def __init__(self, config: Dict[str, Any], exchange=None) -> None: + def __init__(self, config: Dict[str, Any], exchange, strategy) -> None: self.config = config self.exchange = exchange - self.strategy: IStrategy = StrategyResolver(self.config).strategy + self.strategy = strategy self.ticker_interval = self.strategy.ticker_interval self.tickerdata_to_dataframe = self.strategy.tickerdata_to_dataframe self.get_timeframe = optimize.get_timeframe diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index f82f6da59..babe0a1da 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -58,7 +58,7 @@ class FreqtradeBot(object): self.exchange = Exchange(self.config) # Initializing Edge only if enabled - self.edge = Edge(self.config, self.exchange) if \ + self.edge = Edge(self.config, self.exchange, self.strategy) if \ self.config.get('edge', {}).get('enabled', False) else None self.active_pair_whitelist: List[str] = self.config['exchange']['pair_whitelist'] diff --git a/freqtrade/tests/edge/test_edge.py b/freqtrade/tests/edge/test_edge.py index ed47a60eb..1ac5e62c4 100644 --- a/freqtrade/tests/edge/test_edge.py +++ b/freqtrade/tests/edge/test_edge.py @@ -1,4 +1,7 @@ -from freqtrade.tests.conftest import get_patched_exchange +# pragma pylint: disable=missing-docstring, C0103 +# pragma pylint: disable=protected-access, too-many-lines, invalid-name, too-many-arguments + +from freqtrade.tests.conftest import get_patched_freqtradebot from freqtrade.edge import Edge from pandas import DataFrame, to_datetime from freqtrade.strategy.interface import SellType @@ -23,8 +26,8 @@ _ohlc = {'date': 0, 'buy': 1, 'open': 2, 'high': 3, 'low': 4, 'close': 5, 'sell' def test_adjust(mocker, default_conf): - exchange = get_patched_exchange(mocker, default_conf) - edge = Edge(default_conf, exchange) + freqtrade = get_patched_freqtradebot(mocker, default_conf) + edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy) mocker.patch('freqtrade.edge.Edge._cached_pairs', mocker.PropertyMock( return_value={ 'E/F': Edge._pair_info(-0.01, 0.66, 3.71, 0.50, 1.71), @@ -38,8 +41,8 @@ def test_adjust(mocker, default_conf): def test_stoploss(mocker, default_conf): - exchange = get_patched_exchange(mocker, default_conf) - edge = Edge(default_conf, exchange) + freqtrade = get_patched_freqtradebot(mocker, default_conf) + edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy) mocker.patch('freqtrade.edge.Edge._cached_pairs', mocker.PropertyMock( return_value={ 'E/F': Edge._pair_info(-0.01, 0.66, 3.71, 0.50, 1.71), @@ -92,8 +95,8 @@ def _time_on_candle(number): def test_edge_heartbeat_calculate(mocker, default_conf): - exchange = get_patched_exchange(mocker, default_conf) - edge = Edge(default_conf, exchange) + freqtrade = get_patched_freqtradebot(mocker, default_conf) + edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy) heartbeat = default_conf['edge']['process_throttle_secs'] # should not recalculate if heartbeat not reached @@ -135,11 +138,10 @@ def mocked_load_data(datadir, pairs=[], ticker_interval='0m', refresh_pairs=Fals def test_edge_process_downloaded_data(mocker, default_conf): default_conf['datadir'] = None - exchange = get_patched_exchange(mocker, default_conf) + freqtrade = get_patched_freqtradebot(mocker, default_conf) mocker.patch('freqtrade.exchange.Exchange.get_fee', MagicMock(return_value=0.001)) mocker.patch('freqtrade.optimize.load_data', mocked_load_data) - mocker.patch('freqtrade.exchange.Exchange.refresh_tickers', MagicMock()) - edge = Edge(default_conf, exchange) + edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy) assert edge.calculate() assert len(edge._cached_pairs) == 2 @@ -148,13 +150,13 @@ def test_edge_process_downloaded_data(mocker, default_conf): def test_process_expectancy(mocker, default_conf): default_conf['edge']['min_trade_number'] = 2 - exchange = get_patched_exchange(mocker, default_conf) + freqtrade = get_patched_freqtradebot(mocker, default_conf) def get_fee(): return 0.001 - exchange.get_fee = get_fee - edge = Edge(default_conf, exchange) + freqtrade.exchange.get_fee = get_fee + edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy) trades = [ {'pair': 'TEST/BTC', @@ -213,8 +215,8 @@ def test_process_expectancy(mocker, default_conf): def test_case_1(mocker, default_conf): - exchange = get_patched_exchange(mocker, default_conf) - edge = Edge(default_conf, exchange) + freqtrade = get_patched_freqtradebot(mocker, default_conf) + edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy) stoploss = -0.99 # we don't want stoploss to be hit in this test ticker = [ @@ -233,8 +235,8 @@ def test_case_1(mocker, default_conf): # 2) Two complete trades within dataframe (with sell hit for all) def test_case_2(mocker, default_conf): - exchange = get_patched_exchange(mocker, default_conf) - edge = Edge(default_conf, exchange) + freqtrade = get_patched_freqtradebot(mocker, default_conf) + edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy) stoploss = -0.99 # we don't want stoploss to be hit in this test ticker = [ @@ -274,8 +276,8 @@ def test_case_2(mocker, default_conf): # 3) Entered, sl 1%, candle drops 8% => Trade closed, 1% loss def test_case_3(mocker, default_conf): - exchange = get_patched_exchange(mocker, default_conf) - edge = Edge(default_conf, exchange) + freqtrade = get_patched_freqtradebot(mocker, default_conf) + edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy) stoploss = -0.01 # we don't want stoploss to be hit in this test ticker = [ @@ -303,8 +305,8 @@ def test_case_3(mocker, default_conf): # 4) Entered, sl 3 %, candle drops 4%, recovers to 1 % = > Trade closed, 3 % loss def test_case_4(mocker, default_conf): - exchange = get_patched_exchange(mocker, default_conf) - edge = Edge(default_conf, exchange) + freqtrade = get_patched_freqtradebot(mocker, default_conf) + edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy) stoploss = -0.03 # we don't want stoploss to be hit in this test ticker = [ @@ -333,11 +335,11 @@ def test_case_4(mocker, default_conf): # 5) Stoploss and sell are hit. should sell on stoploss def test_case_5(mocker, default_conf): - exchange = get_patched_exchange(mocker, default_conf) - edge = Edge(default_conf, exchange) + freqtrade = get_patched_freqtradebot(mocker, default_conf) + edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy) - exchange = get_patched_exchange(mocker, default_conf) - edge = Edge(default_conf, exchange) + freqtrade = get_patched_freqtradebot(mocker, default_conf) + edge = Edge(default_conf, freqtrade.exchange, freqtrade.strategy) stoploss = -0.03 # we don't want stoploss to be hit in this test ticker = [