Fix patch_get_signal
This commit is contained in:
parent
c004942588
commit
b951f59f89
@ -710,7 +710,7 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
(enter, exit_) = self.strategy.get_exit_signal(
|
(enter, exit_) = self.strategy.get_exit_signal(
|
||||||
trade.pair,
|
trade.pair,
|
||||||
self.strategy.timeframe,
|
self.strategy.timeframe,
|
||||||
analyzed_df
|
analyzed_df, is_short=trade.is_short
|
||||||
)
|
)
|
||||||
|
|
||||||
# TODO-lev: side should depend on trade side.
|
# TODO-lev: side should depend on trade side.
|
||||||
|
@ -13,7 +13,7 @@ from pandas import DataFrame
|
|||||||
|
|
||||||
from freqtrade.constants import ListPairsWithTimeframes
|
from freqtrade.constants import ListPairsWithTimeframes
|
||||||
from freqtrade.data.dataprovider import DataProvider
|
from freqtrade.data.dataprovider import DataProvider
|
||||||
from freqtrade.enums import SellType, SignalTagType, SignalType, SignalDirection
|
from freqtrade.enums import SellType, SignalDirection, SignalTagType, SignalType
|
||||||
from freqtrade.exceptions import OperationalException, StrategyError
|
from freqtrade.exceptions import OperationalException, StrategyError
|
||||||
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_seconds
|
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_seconds
|
||||||
from freqtrade.exchange.exchange import timeframe_to_next_date
|
from freqtrade.exchange.exchange import timeframe_to_next_date
|
||||||
|
@ -6,6 +6,7 @@ from copy import deepcopy
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from functools import reduce
|
from functools import reduce
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import Optional
|
||||||
from unittest.mock import MagicMock, Mock, PropertyMock
|
from unittest.mock import MagicMock, Mock, PropertyMock
|
||||||
|
|
||||||
import arrow
|
import arrow
|
||||||
@ -18,6 +19,7 @@ from freqtrade.commands import Arguments
|
|||||||
from freqtrade.data.converter import ohlcv_to_dataframe
|
from freqtrade.data.converter import ohlcv_to_dataframe
|
||||||
from freqtrade.edge import Edge, PairInfo
|
from freqtrade.edge import Edge, PairInfo
|
||||||
from freqtrade.enums import RunMode
|
from freqtrade.enums import RunMode
|
||||||
|
from freqtrade.enums.signaltype import SignalDirection
|
||||||
from freqtrade.exchange import Exchange
|
from freqtrade.exchange import Exchange
|
||||||
from freqtrade.freqtradebot import FreqtradeBot
|
from freqtrade.freqtradebot import FreqtradeBot
|
||||||
from freqtrade.persistence import LocalTrade, Trade, init_db
|
from freqtrade.persistence import LocalTrade, Trade, init_db
|
||||||
@ -182,13 +184,35 @@ def get_patched_worker(mocker, config) -> Worker:
|
|||||||
return Worker(args=None, config=config)
|
return Worker(args=None, config=config)
|
||||||
|
|
||||||
|
|
||||||
def patch_get_signal(freqtrade: FreqtradeBot, value=(True, False, None)) -> None:
|
def patch_get_signal(freqtrade: FreqtradeBot, enter_long=True, exit_long=False,
|
||||||
|
enter_short=False, exit_short=False, enter_tag: Optional[str] = None) -> None:
|
||||||
"""
|
"""
|
||||||
:param mocker: mocker to patch IStrategy class
|
:param mocker: mocker to patch IStrategy class
|
||||||
:param value: which value IStrategy.get_signal() must return
|
:param value: which value IStrategy.get_signal() must return
|
||||||
|
(buy, sell, buy_tag)
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
freqtrade.strategy.get_signal = lambda e, s, x: value
|
# returns (Signal-direction, signaname)
|
||||||
|
def patched_get_enter_signal(*args, **kwargs):
|
||||||
|
direction = None
|
||||||
|
if enter_long and not any([exit_long, enter_short]):
|
||||||
|
direction = SignalDirection.LONG
|
||||||
|
if enter_short and not any([exit_short, enter_long]):
|
||||||
|
direction = SignalDirection.SHORT
|
||||||
|
|
||||||
|
return direction, enter_tag
|
||||||
|
|
||||||
|
freqtrade.strategy.get_enter_signal = patched_get_enter_signal
|
||||||
|
|
||||||
|
def patched_get_exit_signal(pair, timeframe, dataframe, is_short):
|
||||||
|
if is_short:
|
||||||
|
return enter_short, exit_short
|
||||||
|
else:
|
||||||
|
return enter_long, exit_long
|
||||||
|
|
||||||
|
# returns (enter, exit)
|
||||||
|
freqtrade.strategy.get_exit_signal = patched_get_exit_signal
|
||||||
|
|
||||||
freqtrade.exchange.refresh_latest_ohlcv = lambda p: None
|
freqtrade.exchange.refresh_latest_ohlcv = lambda p: None
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ def test_may_execute_sell_stoploss_on_exchange_multi(default_conf, ticker, fee,
|
|||||||
create_stoploss_order=MagicMock(return_value=True),
|
create_stoploss_order=MagicMock(return_value=True),
|
||||||
_notify_sell=MagicMock(),
|
_notify_sell=MagicMock(),
|
||||||
)
|
)
|
||||||
mocker.patch("freqtrade.strategy.interface.IStrategy.should_sell", should_sell_mock)
|
mocker.patch("freqtrade.strategy.interface.IStrategy.should_exit", should_sell_mock)
|
||||||
wallets_mock = mocker.patch("freqtrade.wallets.Wallets.update", MagicMock())
|
wallets_mock = mocker.patch("freqtrade.wallets.Wallets.update", MagicMock())
|
||||||
mocker.patch("freqtrade.wallets.Wallets.get_free", MagicMock(return_value=1000))
|
mocker.patch("freqtrade.wallets.Wallets.get_free", MagicMock(return_value=1000))
|
||||||
|
|
||||||
@ -163,7 +163,7 @@ def test_forcebuy_last_unlimited(default_conf, ticker, fee, limit_buy_order, moc
|
|||||||
SellCheckTuple(sell_type=SellType.NONE),
|
SellCheckTuple(sell_type=SellType.NONE),
|
||||||
SellCheckTuple(sell_type=SellType.NONE)]
|
SellCheckTuple(sell_type=SellType.NONE)]
|
||||||
)
|
)
|
||||||
mocker.patch("freqtrade.strategy.interface.IStrategy.should_sell", should_sell_mock)
|
mocker.patch("freqtrade.strategy.interface.IStrategy.should_exit", should_sell_mock)
|
||||||
|
|
||||||
freqtrade = get_patched_freqtradebot(mocker, default_conf)
|
freqtrade = get_patched_freqtradebot(mocker, default_conf)
|
||||||
rpc = RPC(freqtrade)
|
rpc = RPC(freqtrade)
|
||||||
|
Loading…
Reference in New Issue
Block a user