-
Notifications
You must be signed in to change notification settings - Fork 1
/
create_bars.py
87 lines (69 loc) · 3.16 KB
/
create_bars.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import os
import numpy as np
import pandas as pd
def load_npz(directory):
# Подготовка пустого DataFrame
data_frames = []
# Загрузка всех .npz файлов в директории
for file in sorted(os.listdir(directory)):
if file.endswith('.npz'):
data = np.load(os.path.join(directory, file), allow_pickle=True)['data']
temp_df = pd.DataFrame(data, columns=['timestamp', 'open', 'high', 'low', 'close', 'vol'])
temp_df['timestamp'] = pd.to_datetime(temp_df['timestamp'], unit='s')
temp_df.set_index('timestamp', inplace=True)
data_frames.append(temp_df)
print(f'loaded {file}')
print('concatinating...')
# Объединение всех DataFrame в один
full_data = pd.concat(data_frames)
print('sorting...')
# Сортировка данных по времени
full_data.sort_index(inplace=True)
return full_data
def resample_npz(full_data, period):
print('resampling...')
# Ресемплирование данных в интервалы
resampled_data = full_data.resample(period).agg({
'open': 'first',
'high': 'max',
'low': 'min',
'close': 'last',
'vol': 'sum'
})
# Замена возможных NaN значений на 0 или предыдущее значение
resampled_data['vol'].fillna(0, inplace=True)
resampled_data[['open', 'high', 'low', 'close']] = resampled_data[['open', 'high', 'low', 'close']].ffill()
# Сброс индекса для преобразования временного индекса обратно в столбец
resampled_data.reset_index(inplace=True)
return resampled_data
def save_resampled_data_to_npz(resampled_data, output_directory, output_filename='5min_bars.npz'):
# Создание выходной директории, если не существует
if not os.path.exists(output_directory):
os.makedirs(output_directory)
# Сохранение обработанных данных
output_path = os.path.join(output_directory, output_filename)
print('saving...')
np.savez(output_path, data=resampled_data.values)
print(f"bars saved to '{output_path}'.")
def create_bars(symbol):
directory = f'npz/{symbol}'
output_directory = 'npz'
full_data = load_npz(directory)
# 1 minute bars
period = '1T'
resampled_data = resample_npz(full_data, period)
save_resampled_data_to_npz(resampled_data, output_directory, f'{symbol}_{period}.npz')
# 5 minute bars
period = '5T'
resampled_data = resample_npz(full_data, period)
save_resampled_data_to_npz(resampled_data, output_directory, f'{symbol}_{period}.npz')
# 1 hour bars
period = '1H'
resampled_data = resample_npz(full_data, period)
save_resampled_data_to_npz(resampled_data, output_directory, f'{symbol}_{period}.npz')
# 1 day bars
period = 'D'
resampled_data = resample_npz(full_data, period)
save_resampled_data_to_npz(resampled_data, output_directory, f'{symbol}_{period}.npz')
# Использование функций
create_bars('BTCUSD')