mirror of
https://github.com/freqtrade/freqtrade.git
synced 2025-11-29 00:23:07 +00:00
Fix weekly resamples to ensure they're on monday.
This commit is contained in:
@@ -129,7 +129,9 @@ def timeframe_to_resample_freq(timeframe: str) -> str:
|
|||||||
timeframe_seconds = timeframe_to_seconds(timeframe)
|
timeframe_seconds = timeframe_to_seconds(timeframe)
|
||||||
timeframe_minutes = timeframe_seconds // 60
|
timeframe_minutes = timeframe_seconds // 60
|
||||||
resample_interval = f'{timeframe_seconds}s'
|
resample_interval = f'{timeframe_seconds}s'
|
||||||
if timeframe_minutes >= 43200 and timeframe_minutes < 525600:
|
if 10000 < timeframe_minutes < 43200:
|
||||||
|
resample_interval = '1W-MON'
|
||||||
|
elif timeframe_minutes >= 43200 and timeframe_minutes < 525600:
|
||||||
# Monthly candles need special treatment to stick to the 1st of the month
|
# Monthly candles need special treatment to stick to the 1st of the month
|
||||||
resample_interval = f'{timeframe}S'
|
resample_interval = f'{timeframe}S'
|
||||||
elif timeframe_minutes > 43200:
|
elif timeframe_minutes > 43200:
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ def generate_test_data(timeframe: str, size: int, start: str = '2020-07-05'):
|
|||||||
date = pd.date_range(start, periods=size, freq='1MS', tz='UTC')
|
date = pd.date_range(start, periods=size, freq='1MS', tz='UTC')
|
||||||
elif timeframe == '3M':
|
elif timeframe == '3M':
|
||||||
date = pd.date_range(start, periods=size, freq='3MS', tz='UTC')
|
date = pd.date_range(start, periods=size, freq='3MS', tz='UTC')
|
||||||
elif timeframe == '1w':
|
elif timeframe == '1w' or timeframe == '7d':
|
||||||
date = pd.date_range(start, periods=size, freq='1W-MON', tz='UTC')
|
date = pd.date_range(start, periods=size, freq='1W-MON', tz='UTC')
|
||||||
else:
|
else:
|
||||||
tf_mins = timeframe_to_minutes(timeframe)
|
tf_mins = timeframe_to_minutes(timeframe)
|
||||||
|
|||||||
@@ -163,14 +163,15 @@ def test_ohlcv_to_dataframe_multi(timeframe):
|
|||||||
if timeframe in ('1M', '3M', '1y'):
|
if timeframe in ('1M', '3M', '1y'):
|
||||||
data1.loc[:, 'date'] = data1.loc[:, 'date'] + pd.to_timedelta('1w')
|
data1.loc[:, 'date'] = data1.loc[:, 'date'] + pd.to_timedelta('1w')
|
||||||
else:
|
else:
|
||||||
|
# Shift by half a timeframe
|
||||||
data1.loc[:, 'date'] = data1.loc[:, 'date'] + (pd.to_timedelta(timeframe) / 2)
|
data1.loc[:, 'date'] = data1.loc[:, 'date'] + (pd.to_timedelta(timeframe) / 2)
|
||||||
df2 = ohlcv_to_dataframe(data1, timeframe, 'UNITTEST/USDT')
|
df2 = ohlcv_to_dataframe(data1, timeframe, 'UNITTEST/USDT')
|
||||||
|
|
||||||
assert len(df2) == len(data) - 1
|
assert len(df2) == len(data) - 1
|
||||||
tfs = timeframe_to_seconds(timeframe)
|
tfs = timeframe_to_seconds(timeframe)
|
||||||
tfm = timeframe_to_minutes(timeframe)
|
tfm = timeframe_to_minutes(timeframe)
|
||||||
if 1 <= tfm < 43200:
|
if 1 <= tfm < 10000:
|
||||||
# minute based resampling does not work on timeframes >= 1 month
|
# minute based resampling does not work on timeframes >= 1 week
|
||||||
ohlcv_dict = {
|
ohlcv_dict = {
|
||||||
'open': 'first',
|
'open': 'first',
|
||||||
'high': 'max',
|
'high': 'max',
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ def test_timeframe_to_msecs():
|
|||||||
("10m", '600s'),
|
("10m", '600s'),
|
||||||
("1h", '3600s'),
|
("1h", '3600s'),
|
||||||
("1d", '86400s'),
|
("1d", '86400s'),
|
||||||
("1w", '604800s'),
|
("1w", '1W-MON'),
|
||||||
("1M", '1MS'),
|
("1M", '1MS'),
|
||||||
("1y", '1YS'),
|
("1y", '1YS'),
|
||||||
])
|
])
|
||||||
|
|||||||
Reference in New Issue
Block a user