Remove arrow from more tests

This commit is contained in:
Matthias
2023-05-14 18:14:35 +02:00
parent 9421ca2628
commit 3ec55885bd
4 changed files with 44 additions and 43 deletions
+12 -12
View File
@@ -1,10 +1,10 @@
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
import arrow
import pytest import pytest
from freqtrade.persistence import PairLocks from freqtrade.persistence import PairLocks
from freqtrade.persistence.models import PairLock from freqtrade.persistence.models import PairLock
from freqtrade.util import dt_now
@pytest.mark.parametrize('use_db', (False, True)) @pytest.mark.parametrize('use_db', (False, True))
@@ -20,20 +20,20 @@ def test_PairLocks(use_db):
pair = 'ETH/BTC' pair = 'ETH/BTC'
assert not PairLocks.is_pair_locked(pair) assert not PairLocks.is_pair_locked(pair)
PairLocks.lock_pair(pair, arrow.utcnow().shift(minutes=4).datetime) PairLocks.lock_pair(pair, dt_now() + timedelta(minutes=4))
# ETH/BTC locked for 4 minutes (on both sides) # ETH/BTC locked for 4 minutes (on both sides)
assert PairLocks.is_pair_locked(pair) assert PairLocks.is_pair_locked(pair)
assert PairLocks.is_pair_locked(pair, side='long') assert PairLocks.is_pair_locked(pair, side='long')
assert PairLocks.is_pair_locked(pair, side='short') assert PairLocks.is_pair_locked(pair, side='short')
pair = 'BNB/BTC' pair = 'BNB/BTC'
PairLocks.lock_pair(pair, arrow.utcnow().shift(minutes=4).datetime, side='long') PairLocks.lock_pair(pair, dt_now() + timedelta(minutes=4), side='long')
assert not PairLocks.is_pair_locked(pair) assert not PairLocks.is_pair_locked(pair)
assert PairLocks.is_pair_locked(pair, side='long') assert PairLocks.is_pair_locked(pair, side='long')
assert not PairLocks.is_pair_locked(pair, side='short') assert not PairLocks.is_pair_locked(pair, side='short')
pair = 'BNB/USDT' pair = 'BNB/USDT'
PairLocks.lock_pair(pair, arrow.utcnow().shift(minutes=4).datetime, side='short') PairLocks.lock_pair(pair, dt_now() + timedelta(minutes=4), side='short')
assert not PairLocks.is_pair_locked(pair) assert not PairLocks.is_pair_locked(pair)
assert not PairLocks.is_pair_locked(pair, side='long') assert not PairLocks.is_pair_locked(pair, side='long')
assert PairLocks.is_pair_locked(pair, side='short') assert PairLocks.is_pair_locked(pair, side='short')
@@ -44,7 +44,7 @@ def test_PairLocks(use_db):
# Unlocking a pair that's not locked should not raise an error # Unlocking a pair that's not locked should not raise an error
PairLocks.unlock_pair(pair) PairLocks.unlock_pair(pair)
PairLocks.lock_pair(pair, arrow.utcnow().shift(minutes=4).datetime) PairLocks.lock_pair(pair, dt_now() + timedelta(minutes=4))
assert PairLocks.is_pair_locked(pair) assert PairLocks.is_pair_locked(pair)
# Get both locks from above # Get both locks from above
@@ -113,20 +113,20 @@ def test_PairLocks_getlongestlock(use_db):
pair = 'ETH/BTC' pair = 'ETH/BTC'
assert not PairLocks.is_pair_locked(pair) assert not PairLocks.is_pair_locked(pair)
PairLocks.lock_pair(pair, arrow.utcnow().shift(minutes=4).datetime) PairLocks.lock_pair(pair, dt_now() + timedelta(minutes=4))
# ETH/BTC locked for 4 minutes # ETH/BTC locked for 4 minutes
assert PairLocks.is_pair_locked(pair) assert PairLocks.is_pair_locked(pair)
lock = PairLocks.get_pair_longest_lock(pair) lock = PairLocks.get_pair_longest_lock(pair)
assert lock.lock_end_time.replace(tzinfo=timezone.utc) > arrow.utcnow().shift(minutes=3) assert lock.lock_end_time.replace(tzinfo=timezone.utc) > dt_now() + timedelta(minutes=3)
assert lock.lock_end_time.replace(tzinfo=timezone.utc) < arrow.utcnow().shift(minutes=14) assert lock.lock_end_time.replace(tzinfo=timezone.utc) < dt_now() + timedelta(minutes=14)
PairLocks.lock_pair(pair, arrow.utcnow().shift(minutes=15).datetime) PairLocks.lock_pair(pair, dt_now() + timedelta(minutes=15))
assert PairLocks.is_pair_locked(pair) assert PairLocks.is_pair_locked(pair)
lock = PairLocks.get_pair_longest_lock(pair) lock = PairLocks.get_pair_longest_lock(pair)
# Must be longer than above # Must be longer than above
assert lock.lock_end_time.replace(tzinfo=timezone.utc) > arrow.utcnow().shift(minutes=14) assert lock.lock_end_time.replace(tzinfo=timezone.utc) > dt_now() + timedelta(minutes=14)
PairLocks.reset_locks() PairLocks.reset_locks()
PairLocks.use_db = True PairLocks.use_db = True
@@ -143,8 +143,8 @@ def test_PairLocks_reason(use_db):
assert PairLocks.use_db == use_db assert PairLocks.use_db == use_db
PairLocks.lock_pair('XRP/USDT', arrow.utcnow().shift(minutes=4).datetime, 'TestLock1') PairLocks.lock_pair('XRP/USDT', dt_now() + timedelta(minutes=4), 'TestLock1')
PairLocks.lock_pair('ETH/USDT', arrow.utcnow().shift(minutes=4).datetime, 'TestLock2') PairLocks.lock_pair('ETH/USDT', dt_now() + timedelta(minutes=4), 'TestLock2')
assert PairLocks.is_pair_locked('XRP/USDT') assert PairLocks.is_pair_locked('XRP/USDT')
assert PairLocks.is_pair_locked('ETH/USDT') assert PairLocks.is_pair_locked('ETH/USDT')
+14 -13
View File
@@ -33,6 +33,7 @@ from freqtrade.persistence.models import Order
from freqtrade.rpc import RPC from freqtrade.rpc import RPC
from freqtrade.rpc.rpc import RPCException from freqtrade.rpc.rpc import RPCException
from freqtrade.rpc.telegram import Telegram, authorized_only from freqtrade.rpc.telegram import Telegram, authorized_only
from freqtrade.util.datetime_helpers import dt_now
from tests.conftest import (CURRENT_TEST_STRATEGY, EXMS, create_mock_trades, from tests.conftest import (CURRENT_TEST_STRATEGY, EXMS, create_mock_trades,
create_mock_trades_usdt, get_patched_freqtradebot, log_has, log_has_re, create_mock_trades_usdt, get_patched_freqtradebot, log_has, log_has_re,
patch_exchange, patch_get_signal, patch_whitelist) patch_exchange, patch_get_signal, patch_whitelist)
@@ -1518,8 +1519,8 @@ async def test_telegram_lock_handle(default_conf, update, ticker, fee, mocker) -
msg_mock.reset_mock() msg_mock.reset_mock()
PairLocks.lock_pair('ETH/BTC', arrow.utcnow().shift(minutes=4).datetime, 'randreason') PairLocks.lock_pair('ETH/BTC', dt_now() + timedelta(minutes=4), 'randreason')
PairLocks.lock_pair('XRP/BTC', arrow.utcnow().shift(minutes=20).datetime, 'deadbeef') PairLocks.lock_pair('XRP/BTC', dt_now() + timedelta(minutes=20), 'deadbeef')
await telegram._locks(update=update, context=MagicMock()) await telegram._locks(update=update, context=MagicMock())
@@ -1898,7 +1899,7 @@ def test_send_msg_enter_notification(default_conf, mocker, caplog, message_type,
'current_rate': 1.099e-05, 'current_rate': 1.099e-05,
'amount': 1333.3333333333335, 'amount': 1333.3333333333335,
'analyzed_candle': {'open': 1.1, 'high': 2.2, 'low': 1.0, 'close': 1.5}, 'analyzed_candle': {'open': 1.1, 'high': 2.2, 'low': 1.0, 'close': 1.5},
'open_date': arrow.utcnow().shift(hours=-1) 'open_date': dt_now() + timedelta(hours=-1)
} }
telegram, freqtradebot, msg_mock = get_telegram_testobject(mocker, default_conf) telegram, freqtradebot, msg_mock = get_telegram_testobject(mocker, default_conf)
@@ -1959,7 +1960,7 @@ def test_send_msg_protection_notification(default_conf, mocker, time_machine) ->
telegram, _, msg_mock = get_telegram_testobject(mocker, default_conf) telegram, _, msg_mock = get_telegram_testobject(mocker, default_conf)
time_machine.move_to("2021-09-01 05:00:00 +00:00") time_machine.move_to("2021-09-01 05:00:00 +00:00")
lock = PairLocks.lock_pair('ETH/BTC', arrow.utcnow().shift(minutes=6).datetime, 'randreason') lock = PairLocks.lock_pair('ETH/BTC', dt_now() + timedelta(minutes=6), 'randreason')
msg = { msg = {
'type': RPCMessageType.PROTECTION_TRIGGER, 'type': RPCMessageType.PROTECTION_TRIGGER,
} }
@@ -1974,7 +1975,7 @@ def test_send_msg_protection_notification(default_conf, mocker, time_machine) ->
msg = { msg = {
'type': RPCMessageType.PROTECTION_TRIGGER_GLOBAL, 'type': RPCMessageType.PROTECTION_TRIGGER_GLOBAL,
} }
lock = PairLocks.lock_pair('*', arrow.utcnow().shift(minutes=100).datetime, 'randreason') lock = PairLocks.lock_pair('*', dt_now() + timedelta(minutes=100), 'randreason')
msg.update(lock.to_json()) msg.update(lock.to_json())
telegram.send_msg(msg) telegram.send_msg(msg)
assert (msg_mock.call_args[0][0] == "*Protection* triggered due to randreason. " assert (msg_mock.call_args[0][0] == "*Protection* triggered due to randreason. "
@@ -2005,7 +2006,7 @@ def test_send_msg_entry_fill_notification(default_conf, mocker, message_type, en
'fiat_currency': 'USD', 'fiat_currency': 'USD',
'open_rate': 1.099e-05, 'open_rate': 1.099e-05,
'amount': 1333.3333333333335, 'amount': 1333.3333333333335,
'open_date': arrow.utcnow().shift(hours=-1) 'open_date': dt_now() - timedelta(hours=1)
}) })
leverage_text = f'*Leverage:* `{leverage}`\n' if leverage != 1.0 else '' leverage_text = f'*Leverage:* `{leverage}`\n' if leverage != 1.0 else ''
assert msg_mock.call_args[0][0] == ( assert msg_mock.call_args[0][0] == (
@@ -2032,7 +2033,7 @@ def test_send_msg_entry_fill_notification(default_conf, mocker, message_type, en
'fiat_currency': 'USD', 'fiat_currency': 'USD',
'open_rate': 1.099e-05, 'open_rate': 1.099e-05,
'amount': 1333.3333333333335, 'amount': 1333.3333333333335,
'open_date': arrow.utcnow().shift(hours=-1) 'open_date': dt_now() - timedelta(hours=1)
}) })
assert msg_mock.call_args[0][0] == ( assert msg_mock.call_args[0][0] == (
@@ -2071,7 +2072,7 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None:
'fiat_currency': 'USD', 'fiat_currency': 'USD',
'enter_tag': 'buy_signal1', 'enter_tag': 'buy_signal1',
'exit_reason': ExitType.STOP_LOSS.value, 'exit_reason': ExitType.STOP_LOSS.value,
'open_date': arrow.utcnow().shift(hours=-1), 'open_date': dt_now() - timedelta(hours=1),
'close_date': arrow.utcnow(), 'close_date': arrow.utcnow(),
}) })
assert msg_mock.call_args[0][0] == ( assert msg_mock.call_args[0][0] == (
@@ -2107,7 +2108,7 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None:
'fiat_currency': 'USD', 'fiat_currency': 'USD',
'enter_tag': 'buy_signal1', 'enter_tag': 'buy_signal1',
'exit_reason': ExitType.STOP_LOSS.value, 'exit_reason': ExitType.STOP_LOSS.value,
'open_date': arrow.utcnow().shift(days=-1, hours=-2, minutes=-30), 'open_date': dt_now() - timedelta(days=1, hours=2, minutes=30),
'close_date': arrow.utcnow(), 'close_date': arrow.utcnow(),
'stake_amount': 0.01, 'stake_amount': 0.01,
'sub_trade': True, 'sub_trade': True,
@@ -2144,7 +2145,7 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None:
'stake_currency': 'ETH', 'stake_currency': 'ETH',
'enter_tag': 'buy_signal1', 'enter_tag': 'buy_signal1',
'exit_reason': ExitType.STOP_LOSS.value, 'exit_reason': ExitType.STOP_LOSS.value,
'open_date': arrow.utcnow().shift(days=-1, hours=-2, minutes=-30), 'open_date': dt_now() - timedelta(days=1, hours=2, minutes=30),
'close_date': arrow.utcnow(), 'close_date': arrow.utcnow(),
}) })
assert msg_mock.call_args[0][0] == ( assert msg_mock.call_args[0][0] == (
@@ -2226,7 +2227,7 @@ def test_send_msg_sell_fill_notification(default_conf, mocker, direction,
'stake_currency': 'ETH', 'stake_currency': 'ETH',
'enter_tag': enter_signal, 'enter_tag': enter_signal,
'exit_reason': ExitType.STOP_LOSS.value, 'exit_reason': ExitType.STOP_LOSS.value,
'open_date': arrow.utcnow().shift(days=-1, hours=-2, minutes=-30), 'open_date': dt_now() - timedelta(days=1, hours=2, minutes=30),
'close_date': arrow.utcnow(), 'close_date': arrow.utcnow(),
}) })
@@ -2317,7 +2318,7 @@ def test_send_msg_buy_notification_no_fiat(
'fiat_currency': None, 'fiat_currency': None,
'current_rate': 1.099e-05, 'current_rate': 1.099e-05,
'amount': 1333.3333333333335, 'amount': 1333.3333333333335,
'open_date': arrow.utcnow().shift(hours=-1) 'open_date': dt_now() - timedelta(hours=1)
}) })
leverage_text = f'*Leverage:* `{leverage}`\n' if leverage and leverage != 1.0 else '' leverage_text = f'*Leverage:* `{leverage}`\n' if leverage and leverage != 1.0 else ''
@@ -2363,7 +2364,7 @@ def test_send_msg_sell_notification_no_fiat(
'fiat_currency': 'USD', 'fiat_currency': 'USD',
'enter_tag': enter_signal, 'enter_tag': enter_signal,
'exit_reason': ExitType.STOP_LOSS.value, 'exit_reason': ExitType.STOP_LOSS.value,
'open_date': arrow.utcnow().shift(hours=-2, minutes=-35, seconds=-3), 'open_date': dt_now() - timedelta(hours=2, minutes=35, seconds=3),
'close_date': arrow.utcnow(), 'close_date': arrow.utcnow(),
}) })
+2 -2
View File
@@ -729,7 +729,7 @@ def test_is_pair_locked(default_conf):
pair = 'ETH/BTC' pair = 'ETH/BTC'
assert not strategy.is_pair_locked(pair) assert not strategy.is_pair_locked(pair)
strategy.lock_pair(pair, arrow.now(timezone.utc).shift(minutes=4).datetime) strategy.lock_pair(pair, dt_now() + timedelta(minutes=4))
# ETH/BTC locked for 4 minutes # ETH/BTC locked for 4 minutes
assert strategy.is_pair_locked(pair) assert strategy.is_pair_locked(pair)
@@ -747,7 +747,7 @@ def test_is_pair_locked(default_conf):
# Lock with reason # Lock with reason
reason = "TestLockR" reason = "TestLockR"
strategy.lock_pair(pair, arrow.now(timezone.utc).shift(minutes=4).datetime, reason) strategy.lock_pair(pair, dt_now() + timedelta(minutes=4), reason)
assert strategy.is_pair_locked(pair) assert strategy.is_pair_locked(pair)
strategy.unlock_reason(reason) strategy.unlock_reason(reason)
assert not strategy.is_pair_locked(pair) assert not strategy.is_pair_locked(pair)
+16 -16
View File
@@ -4,10 +4,10 @@
import logging import logging
import time import time
from copy import deepcopy from copy import deepcopy
from datetime import timedelta
from typing import List from typing import List
from unittest.mock import ANY, MagicMock, PropertyMock, patch from unittest.mock import ANY, MagicMock, PropertyMock, patch
import arrow
import pytest import pytest
from pandas import DataFrame from pandas import DataFrame
from sqlalchemy import select from sqlalchemy import select
@@ -446,7 +446,7 @@ def test_enter_positions_global_pairlock(default_conf_usdt, ticker_usdt, limit_b
assert not log_has_re(message, caplog) assert not log_has_re(message, caplog)
caplog.clear() caplog.clear()
PairLocks.lock_pair('*', arrow.utcnow().shift(minutes=20).datetime, 'Just because', side='*') PairLocks.lock_pair('*', dt_now() + timedelta(minutes=20), 'Just because', side='*')
n = freqtrade.enter_positions() n = freqtrade.enter_positions()
assert n == 0 assert n == 0
assert log_has_re(message, caplog) assert log_has_re(message, caplog)
@@ -467,7 +467,7 @@ def test_handle_protections(mocker, default_conf_usdt, fee, is_short):
freqtrade = get_patched_freqtradebot(mocker, default_conf_usdt) freqtrade = get_patched_freqtradebot(mocker, default_conf_usdt)
freqtrade.protections._protection_handlers[1].global_stop = MagicMock( freqtrade.protections._protection_handlers[1].global_stop = MagicMock(
return_value=ProtectionReturn(True, arrow.utcnow().shift(hours=1).datetime, "asdf")) return_value=ProtectionReturn(True, dt_now() + timedelta(hours=1), "asdf"))
create_mock_trades(fee, is_short) create_mock_trades(fee, is_short)
freqtrade.handle_protections('ETC/BTC', '*') freqtrade.handle_protections('ETC/BTC', '*')
send_msg_mock = freqtrade.rpc.send_msg send_msg_mock = freqtrade.rpc.send_msg
@@ -1263,7 +1263,7 @@ def test_handle_stoploss_on_exchange(mocker, default_conf_usdt, fee, caplog, is_
}]) }])
trade.stoploss_order_id = "107" trade.stoploss_order_id = "107"
trade.is_open = True trade.is_open = True
trade.stoploss_last_update = arrow.utcnow().shift(hours=-1).datetime trade.stoploss_last_update = dt_now() - timedelta(hours=1)
trade.stop_loss = 24 trade.stop_loss = 24
trade.exit_reason = None trade.exit_reason = None
trade.orders.append( trade.orders.append(
@@ -1412,7 +1412,7 @@ def test_handle_stoploss_on_exchange_partial_cancel_here(
}) })
mocker.patch(f'{EXMS}.fetch_stoploss_order', stoploss_order_hit) mocker.patch(f'{EXMS}.fetch_stoploss_order', stoploss_order_hit)
mocker.patch(f'{EXMS}.cancel_stoploss_order_with_result', stoploss_order_cancel) mocker.patch(f'{EXMS}.cancel_stoploss_order_with_result', stoploss_order_cancel)
trade.stoploss_last_update = arrow.utcnow().shift(minutes=-10).datetime trade.stoploss_last_update = dt_now() - timedelta(minutes=10)
assert freqtrade.handle_stoploss_on_exchange(trade) is False assert freqtrade.handle_stoploss_on_exchange(trade) is False
# Canceled Stoploss filled partially ... # Canceled Stoploss filled partially ...
@@ -1632,7 +1632,7 @@ def test_handle_stoploss_on_exchange_trailing(
trade.is_open = True trade.is_open = True
trade.open_order_id = None trade.open_order_id = None
trade.stoploss_order_id = '100' trade.stoploss_order_id = '100'
trade.stoploss_last_update = arrow.utcnow().shift(minutes=-20).datetime trade.stoploss_last_update = dt_now() - timedelta(minutes=20)
trade.orders.append( trade.orders.append(
Order( Order(
ft_order_side='stoploss', ft_order_side='stoploss',
@@ -1763,7 +1763,7 @@ def test_handle_stoploss_on_exchange_trailing_error(
trade.open_order_id = None trade.open_order_id = None
trade.stoploss_order_id = "abcd" trade.stoploss_order_id = "abcd"
trade.stop_loss = 0.2 trade.stop_loss = 0.2
trade.stoploss_last_update = arrow.utcnow().shift(minutes=-601).datetime.replace(tzinfo=None) trade.stoploss_last_update = (dt_now() - timedelta(minutes=601)).replace(tzinfo=None)
trade.is_short = is_short trade.is_short = is_short
stoploss_order_hanging = { stoploss_order_hanging = {
@@ -1787,7 +1787,7 @@ def test_handle_stoploss_on_exchange_trailing_error(
assert stoploss.call_count == 1 assert stoploss.call_count == 1
# Fail creating stoploss order # Fail creating stoploss order
trade.stoploss_last_update = arrow.utcnow().shift(minutes=-601).datetime trade.stoploss_last_update = dt_now() - timedelta(minutes=601)
caplog.clear() caplog.clear()
cancel_mock = mocker.patch(f'{EXMS}.cancel_stoploss_order') cancel_mock = mocker.patch(f'{EXMS}.cancel_stoploss_order')
mocker.patch(f'{EXMS}.create_stoploss', side_effect=ExchangeError()) mocker.patch(f'{EXMS}.create_stoploss', side_effect=ExchangeError())
@@ -1876,7 +1876,7 @@ def test_handle_stoploss_on_exchange_custom_stop(
trade.is_open = True trade.is_open = True
trade.open_order_id = None trade.open_order_id = None
trade.stoploss_order_id = '100' trade.stoploss_order_id = '100'
trade.stoploss_last_update = arrow.utcnow().shift(minutes=-601).datetime trade.stoploss_last_update = dt_now() - timedelta(minutes=601)
trade.orders.append( trade.orders.append(
Order( Order(
ft_order_side='stoploss', ft_order_side='stoploss',
@@ -2965,8 +2965,8 @@ def test_manage_open_orders_exit_usercustom(
) )
freqtrade = FreqtradeBot(default_conf_usdt) freqtrade = FreqtradeBot(default_conf_usdt)
open_trade_usdt.open_date = arrow.utcnow().shift(hours=-5).datetime open_trade_usdt.open_date = dt_now() - timedelta(hours=5)
open_trade_usdt.close_date = arrow.utcnow().shift(minutes=-601).datetime open_trade_usdt.close_date = dt_now() - timedelta(minutes=601)
open_trade_usdt.close_profit_abs = 0.001 open_trade_usdt.close_profit_abs = 0.001
Trade.session.add(open_trade_usdt) Trade.session.add(open_trade_usdt)
@@ -3047,8 +3047,8 @@ def test_manage_open_orders_exit(
) )
freqtrade = FreqtradeBot(default_conf_usdt) freqtrade = FreqtradeBot(default_conf_usdt)
open_trade_usdt.open_date = arrow.utcnow().shift(hours=-5).datetime open_trade_usdt.open_date = dt_now() - timedelta(hours=5)
open_trade_usdt.close_date = arrow.utcnow().shift(minutes=-601).datetime open_trade_usdt.close_date = dt_now() - timedelta(minutes=601)
open_trade_usdt.close_profit_abs = 0.001 open_trade_usdt.close_profit_abs = 0.001
open_trade_usdt.is_short = is_short open_trade_usdt.is_short = is_short
@@ -3088,8 +3088,8 @@ def test_check_handle_cancelled_exit(
) )
freqtrade = FreqtradeBot(default_conf_usdt) freqtrade = FreqtradeBot(default_conf_usdt)
open_trade_usdt.open_date = arrow.utcnow().shift(hours=-5).datetime open_trade_usdt.open_date = dt_now() - timedelta(hours=5)
open_trade_usdt.close_date = arrow.utcnow().shift(minutes=-601).datetime open_trade_usdt.close_date = dt_now() - timedelta(minutes=601)
open_trade_usdt.is_short = is_short open_trade_usdt.is_short = is_short
Trade.session.add(open_trade_usdt) Trade.session.add(open_trade_usdt)
@@ -3417,7 +3417,7 @@ def test_handle_cancel_exit_limit(mocker, default_conf_usdt, fee) -> None:
exchange='binance', exchange='binance',
open_rate=0.245441, open_rate=0.245441,
open_order_id="sell_123456", open_order_id="sell_123456",
open_date=arrow.utcnow().shift(days=-2).datetime, open_date=dt_now() - timedelta(days=2),
fee_open=fee.return_value, fee_open=fee.return_value,
fee_close=fee.return_value, fee_close=fee.return_value,
close_rate=0.555, close_rate=0.555,