2019-08-14 08:07:14 +00:00
|
|
|
# pragma pylint: disable=missing-docstring, C0103
|
2022-11-10 15:33:57 +00:00
|
|
|
from datetime import datetime, timezone
|
|
|
|
|
2019-10-23 17:41:10 +00:00
|
|
|
import arrow
|
2019-08-14 08:07:14 +00:00
|
|
|
import pytest
|
|
|
|
|
|
|
|
from freqtrade.configuration import TimeRange
|
2021-03-19 05:40:04 +00:00
|
|
|
from freqtrade.exceptions import OperationalException
|
2019-08-14 08:07:14 +00:00
|
|
|
|
|
|
|
|
2019-10-23 17:41:10 +00:00
|
|
|
def test_parse_timerange_incorrect():
|
2019-08-14 08:07:14 +00:00
|
|
|
|
|
|
|
assert TimeRange('date', None, 1274486400, 0) == TimeRange.parse_timerange('20100522-')
|
|
|
|
assert TimeRange(None, 'date', 0, 1274486400) == TimeRange.parse_timerange('-20100522')
|
|
|
|
timerange = TimeRange.parse_timerange('20100522-20150730')
|
|
|
|
assert timerange == TimeRange('date', 'date', 1274486400, 1438214400)
|
|
|
|
|
|
|
|
# Added test for unix timestamp - BTC genesis date
|
|
|
|
assert TimeRange('date', None, 1231006505, 0) == TimeRange.parse_timerange('1231006505-')
|
|
|
|
assert TimeRange(None, 'date', 0, 1233360000) == TimeRange.parse_timerange('-1233360000')
|
|
|
|
timerange = TimeRange.parse_timerange('1231006505-1233360000')
|
|
|
|
assert TimeRange('date', 'date', 1231006505, 1233360000) == timerange
|
2022-11-10 15:33:57 +00:00
|
|
|
assert isinstance(timerange.startdt, datetime)
|
|
|
|
assert isinstance(timerange.stopdt, datetime)
|
|
|
|
assert timerange.startdt == datetime.fromtimestamp(1231006505, tz=timezone.utc)
|
|
|
|
assert timerange.stopdt == datetime.fromtimestamp(1233360000, tz=timezone.utc)
|
2019-08-14 08:07:14 +00:00
|
|
|
|
|
|
|
timerange = TimeRange.parse_timerange('1231006505000-1233360000000')
|
2019-10-19 13:21:47 +00:00
|
|
|
assert TimeRange('date', 'date', 1231006505, 1233360000) == timerange
|
2019-08-14 08:07:14 +00:00
|
|
|
|
2019-10-19 17:38:16 +00:00
|
|
|
timerange = TimeRange.parse_timerange('1231006505000-')
|
|
|
|
assert TimeRange('date', None, 1231006505, 0) == timerange
|
|
|
|
|
|
|
|
timerange = TimeRange.parse_timerange('-1231006505000')
|
|
|
|
assert TimeRange(None, 'date', 0, 1231006505) == timerange
|
|
|
|
|
2021-03-19 05:40:04 +00:00
|
|
|
with pytest.raises(OperationalException, match=r'Incorrect syntax.*'):
|
2019-08-14 08:07:14 +00:00
|
|
|
TimeRange.parse_timerange('-')
|
2019-10-23 17:41:10 +00:00
|
|
|
|
2021-03-19 05:40:04 +00:00
|
|
|
with pytest.raises(OperationalException,
|
|
|
|
match=r'Start date is after stop date for timerange.*'):
|
2021-03-18 21:38:54 +00:00
|
|
|
TimeRange.parse_timerange('20100523-20100522')
|
|
|
|
|
2019-10-23 17:41:10 +00:00
|
|
|
|
|
|
|
def test_subtract_start():
|
|
|
|
x = TimeRange('date', 'date', 1274486400, 1438214400)
|
|
|
|
x.subtract_start(300)
|
|
|
|
assert x.startts == 1274486400 - 300
|
|
|
|
|
|
|
|
# Do nothing if no startdate exists
|
|
|
|
x = TimeRange(None, 'date', 0, 1438214400)
|
|
|
|
x.subtract_start(300)
|
|
|
|
assert not x.startts
|
2022-11-10 15:33:57 +00:00
|
|
|
assert not x.startdt
|
2019-10-23 17:41:10 +00:00
|
|
|
|
|
|
|
x = TimeRange('date', None, 1274486400, 0)
|
|
|
|
x.subtract_start(300)
|
|
|
|
assert x.startts == 1274486400 - 300
|
|
|
|
|
|
|
|
|
|
|
|
def test_adjust_start_if_necessary():
|
|
|
|
min_date = arrow.Arrow(2017, 11, 14, 21, 15, 00)
|
|
|
|
|
|
|
|
x = TimeRange('date', 'date', 1510694100, 1510780500)
|
|
|
|
# Adjust by 20 candles - min_date == startts
|
|
|
|
x.adjust_start_if_necessary(300, 20, min_date)
|
|
|
|
assert x.startts == 1510694100 + (20 * 300)
|
|
|
|
|
|
|
|
x = TimeRange('date', 'date', 1510700100, 1510780500)
|
2019-10-28 12:05:54 +00:00
|
|
|
# Do nothing, startup is set and different min_date
|
2019-10-23 17:41:10 +00:00
|
|
|
x.adjust_start_if_necessary(300, 20, min_date)
|
|
|
|
assert x.startts == 1510694100 + (20 * 300)
|
|
|
|
|
|
|
|
x = TimeRange(None, 'date', 0, 1510780500)
|
|
|
|
# Adjust by 20 candles = 20 * 5m
|
|
|
|
x.adjust_start_if_necessary(300, 20, min_date)
|
|
|
|
assert x.startts == 1510694100 + (20 * 300)
|