示例#1
0
def test_check_handle_timedout_sell(default_conf, ticker, limit_sell_order_old,
                                    mocker) -> None:
    """
    Test check_handle_timedout() method
    """
    rpc_mock = patch_RPCManager(mocker)
    patch_coinmarketcap(mocker)
    cancel_order_mock = MagicMock()
    mocker.patch.multiple(
        'freqtrade.freqtradebot.exchange',
        validate_pairs=MagicMock(),
        get_ticker=ticker,
        get_order=MagicMock(return_value=limit_sell_order_old),
        cancel_order=cancel_order_mock)
    freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))

    trade_sell = Trade(pair='BTC_ETH',
                       open_rate=0.00001099,
                       exchange='BITTREX',
                       open_order_id='123456789',
                       amount=90.99181073,
                       fee=0.0,
                       stake_amount=1,
                       open_date=arrow.utcnow().shift(hours=-5).datetime,
                       close_date=arrow.utcnow().shift(minutes=-601).datetime,
                       is_open=False)

    Trade.session.add(trade_sell)

    # check it does cancel sell orders over the time limit
    freqtrade.check_handle_timedout(600)
    assert cancel_order_mock.call_count == 1
    assert rpc_mock.call_count == 1
    assert trade_sell.is_open is True
示例#2
0
def test_check_handle_timedout_exception(default_conf, ticker, mocker,
                                         caplog) -> None:
    """
    Test check_handle_timedout() method when get_order throw an exception
    """
    patch_RPCManager(mocker)
    cancel_order_mock = MagicMock()
    patch_coinmarketcap(mocker)

    mocker.patch.multiple(
        'freqtrade.freqtradebot.FreqtradeBot',
        handle_timedout_limit_buy=MagicMock(),
        handle_timedout_limit_sell=MagicMock(),
    )
    mocker.patch.multiple(
        'freqtrade.freqtradebot.exchange',
        validate_pairs=MagicMock(),
        get_ticker=ticker,
        get_order=MagicMock(
            side_effect=requests.exceptions.RequestException('Oh snap')),
        cancel_order=cancel_order_mock)
    freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))

    trade_buy = Trade(pair='BTC_ETH',
                      open_rate=0.00001099,
                      exchange='BITTREX',
                      open_order_id='123456789',
                      amount=90.99181073,
                      fee=0.0,
                      stake_amount=1,
                      open_date=arrow.utcnow().shift(minutes=-601).datetime,
                      is_open=True)

    Trade.session.add(trade_buy)
    regexp = re.compile(
        'Cannot query order for Trade(id=1, pair=BTC_ETH, amount=90.99181073, '
        'open_rate=0.00001099, open_since=10 hours ago) due to Traceback (most '
        'recent call last):\n.*')

    freqtrade.check_handle_timedout(600)
    assert filter(regexp.match, caplog.record_tuples)
示例#3
0
def test_check_handle_timedout_partial(default_conf, ticker,
                                       limit_buy_order_old_partial,
                                       mocker) -> None:
    """
    Test check_handle_timedout() method
    """
    rpc_mock = patch_RPCManager(mocker)
    patch_coinmarketcap(mocker)
    cancel_order_mock = MagicMock()
    mocker.patch.multiple(
        'freqtrade.freqtradebot.exchange',
        validate_pairs=MagicMock(),
        get_ticker=ticker,
        get_order=MagicMock(return_value=limit_buy_order_old_partial),
        cancel_order=cancel_order_mock)
    freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))

    trade_buy = Trade(pair='BTC_ETH',
                      open_rate=0.00001099,
                      exchange='BITTREX',
                      open_order_id='123456789',
                      amount=90.99181073,
                      fee=0.0,
                      stake_amount=1,
                      open_date=arrow.utcnow().shift(minutes=-601).datetime,
                      is_open=True)

    Trade.session.add(trade_buy)

    # check it does cancel buy orders over the time limit
    # note this is for a partially-complete buy order
    freqtrade.check_handle_timedout(600)
    assert cancel_order_mock.call_count == 1
    assert rpc_mock.call_count == 1
    trades = Trade.query.filter(
        Trade.open_order_id.is_(trade_buy.open_order_id)).all()
    assert len(trades) == 1
    assert trades[0].amount == 23.0
    assert trades[0].stake_amount == trade_buy.open_rate * trades[0].amount