Adding unitest
This commit is contained in:
parent
12ffbf5047
commit
6dd48fb820
@ -310,6 +310,6 @@ def get_signal(pair: str) -> (bool, bool):
|
|||||||
if signal_date < arrow.now() - timedelta(minutes=10):
|
if signal_date < arrow.now() - timedelta(minutes=10):
|
||||||
return (False, False)
|
return (False, False)
|
||||||
|
|
||||||
(buy, sell) = latest[SignalType.BUY] == 1, latest[SignalType.SELL] == 1
|
(buy, sell) = latest[SignalType.BUY.value] == 1, latest[SignalType.SELL.value] == 1
|
||||||
logger.debug('%trigger: %s (pair=%s, buy=%s sell=%s)', latest['date'], pair, buy, sell)
|
logger.debug('trigger: %s (pair=%s) buy=%s sell=%s', latest['date'], pair, str(buy), str(sell))
|
||||||
return (buy, sell)
|
return (buy, sell)
|
||||||
|
@ -40,30 +40,30 @@ def test_returns_latest_buy_signal(mocker):
|
|||||||
mocker.patch('freqtrade.analyze.get_ticker_history', return_value=MagicMock())
|
mocker.patch('freqtrade.analyze.get_ticker_history', return_value=MagicMock())
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
'freqtrade.analyze.analyze_ticker',
|
'freqtrade.analyze.analyze_ticker',
|
||||||
return_value=DataFrame([{'buy': 1, 'date': arrow.utcnow()}])
|
return_value=DataFrame([{'buy': 1, 'sell': 0, 'date': arrow.utcnow()}])
|
||||||
)
|
)
|
||||||
assert get_signal('BTC-ETH', SignalType.BUY)
|
assert get_signal('BTC-ETH') == (True, False)
|
||||||
|
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
'freqtrade.analyze.analyze_ticker',
|
'freqtrade.analyze.analyze_ticker',
|
||||||
return_value=DataFrame([{'buy': 0, 'date': arrow.utcnow()}])
|
return_value=DataFrame([{'buy': 0, 'sell':1, 'date': arrow.utcnow()}])
|
||||||
)
|
)
|
||||||
assert not get_signal('BTC-ETH', SignalType.BUY)
|
assert get_signal('BTC-ETH') == (False, True)
|
||||||
|
|
||||||
|
|
||||||
def test_returns_latest_sell_signal(mocker):
|
def test_returns_latest_sell_signal(mocker):
|
||||||
mocker.patch('freqtrade.analyze.get_ticker_history', return_value=MagicMock())
|
mocker.patch('freqtrade.analyze.get_ticker_history', return_value=MagicMock())
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
'freqtrade.analyze.analyze_ticker',
|
'freqtrade.analyze.analyze_ticker',
|
||||||
return_value=DataFrame([{'sell': 1, 'date': arrow.utcnow()}])
|
return_value=DataFrame([{'sell': 1, 'buy': 0, 'date': arrow.utcnow()}])
|
||||||
)
|
)
|
||||||
assert get_signal('BTC-ETH', SignalType.SELL)
|
assert get_signal('BTC-ETH') == (False, True)
|
||||||
|
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
'freqtrade.analyze.analyze_ticker',
|
'freqtrade.analyze.analyze_ticker',
|
||||||
return_value=DataFrame([{'sell': 0, 'date': arrow.utcnow()}])
|
return_value=DataFrame([{'sell': 0, 'buy': 1, 'date': arrow.utcnow()}])
|
||||||
)
|
)
|
||||||
assert not get_signal('BTC-ETH', SignalType.SELL)
|
assert get_signal('BTC-ETH') == (True,False)
|
||||||
|
|
||||||
|
|
||||||
def test_get_signal_handles_exceptions(mocker):
|
def test_get_signal_handles_exceptions(mocker):
|
||||||
@ -71,4 +71,4 @@ def test_get_signal_handles_exceptions(mocker):
|
|||||||
mocker.patch('freqtrade.analyze.analyze_ticker',
|
mocker.patch('freqtrade.analyze.analyze_ticker',
|
||||||
side_effect=Exception('invalid ticker history '))
|
side_effect=Exception('invalid ticker history '))
|
||||||
|
|
||||||
assert not get_signal('BTC-ETH', SignalType.BUY)
|
assert get_signal('BTC-ETH') == (False,False)
|
||||||
|
@ -267,6 +267,52 @@ def test_handle_trade(default_conf, limit_buy_order, limit_sell_order, mocker):
|
|||||||
assert trade.close_date is not None
|
assert trade.close_date is not None
|
||||||
|
|
||||||
|
|
||||||
|
def test_handle_overlpapping_signals(default_conf, ticker, mocker, caplog):
|
||||||
|
default_conf.update({'experimental': {'use_sell_signal': True}})
|
||||||
|
mocker.patch.dict('freqtrade.main._CONF', default_conf)
|
||||||
|
|
||||||
|
mocker.patch('freqtrade.main.get_signal', side_effect=lambda s: (True, True))
|
||||||
|
mocker.patch.multiple('freqtrade.rpc', init=MagicMock(), send_msg=MagicMock())
|
||||||
|
mocker.patch.multiple('freqtrade.main.exchange',
|
||||||
|
validate_pairs=MagicMock(),
|
||||||
|
get_ticker=ticker,
|
||||||
|
buy=MagicMock(return_value='mocked_limit_buy'))
|
||||||
|
mocker.patch('freqtrade.main.min_roi_reached', return_value=False)
|
||||||
|
|
||||||
|
init(default_conf, create_engine('sqlite://'))
|
||||||
|
create_trade(0.001)
|
||||||
|
|
||||||
|
# Buy and Sell triggering, so doing nothing ...
|
||||||
|
trades = Trade.query.all()
|
||||||
|
assert len(trades) == 0
|
||||||
|
|
||||||
|
# Buy is triggering, so buying ...
|
||||||
|
mocker.patch('freqtrade.main.get_signal', side_effect=lambda s: (True, False))
|
||||||
|
create_trade(0.001)
|
||||||
|
trades = Trade.query.all()
|
||||||
|
assert len(trades) == 1
|
||||||
|
assert trades[0].is_open is True
|
||||||
|
|
||||||
|
# Buy and Sell are not triggering, so doing nothing ...
|
||||||
|
mocker.patch('freqtrade.main.get_signal', side_effect=lambda s: (False, False))
|
||||||
|
assert handle_trade(trades[0]) is False
|
||||||
|
trades = Trade.query.all()
|
||||||
|
assert len(trades) == 1
|
||||||
|
assert trades[0].is_open is True
|
||||||
|
|
||||||
|
# Buy and Sell are triggering, so doing nothing ...
|
||||||
|
mocker.patch('freqtrade.main.get_signal', side_effect=lambda s: (True, True))
|
||||||
|
assert handle_trade(trades[0]) is False
|
||||||
|
trades = Trade.query.all()
|
||||||
|
assert len(trades) == 1
|
||||||
|
assert trades[0].is_open is True
|
||||||
|
|
||||||
|
# Sell is triggering, guess what : we are Selling!
|
||||||
|
mocker.patch('freqtrade.main.get_signal', side_effect=lambda s: (False, True))
|
||||||
|
trades = Trade.query.all()
|
||||||
|
assert handle_trade(trades[0]) is True
|
||||||
|
|
||||||
|
|
||||||
def test_handle_trade_roi(default_conf, ticker, mocker, caplog):
|
def test_handle_trade_roi(default_conf, ticker, mocker, caplog):
|
||||||
default_conf.update({'experimental': {'use_sell_signal': True}})
|
default_conf.update({'experimental': {'use_sell_signal': True}})
|
||||||
mocker.patch.dict('freqtrade.main._CONF', default_conf)
|
mocker.patch.dict('freqtrade.main._CONF', default_conf)
|
||||||
|
Loading…
Reference in New Issue
Block a user