Я разрабатываю программу анализа акций на Python
Одна из фундаментальных вещей, которые мне нужно, — это распознавать колебания цен (данные открытия, максимума, минимума и закрытия)
Ценовые данные по своей природе фрактальны: более мелкие структуры находятся внутри более крупных структур.

В моем случае я ищу небольшие колебания внутри больших колебаний. Т.е. незначительные колебания внутри крупных колебаний. На приведенном выше примере диаграммы показана моя цель.
Несколько определений на всякий случай. Каждые качели состоят из двух ног/частей – импульсной и реактивной
Импульсный этап будет по направлению движения рынка
Нога реакции направлена против направления импульса
И импульсная, и реакционная ветви могут быть как вверх, так и вниз, в зависимости от движения рынка. Нижеприведенные модели иллюстрируют это определение. Если цена не имеет направления, то это рынок с диапазоном


Следующее важное определение — это понимание максимумов и минимумов. Новый максимум подтверждает новый минимум, а новый минимум подтверждает новый максимум. Это иллюстрируется приведенной ниже моделью

Ниже показано, как я подошел к этому вопросу в Python
импортировать numpy как np из scipy.signal импортировать argrelextrema защита get_pivots (цена: np.ndarray): максимумы = argrelextrema(цена, np.больше) минимумы = argrelextrema(цена, np.less) return np.concatenate((цена[максимум], цена[минимум])) Для простоты я буду передавать в приведенную выше функцию сплющенный одномерный массив numpy. argrelextrema помогает определить, где находятся опорные точки. Т.е. определяет, где разворачивается цена.
Мне интересно, как мне найти вложение опорных точек для формирования мелких и крупных колебаний.
Я хочу создать список, который примерно похож на эту структуру.
[значительное колебание [незначительное колебание1], [незначительное колебание2], [незначительное колебание3 [микро-качели1], [микро качели2] ] ] Пример данных, которые я создал:
data = [5,6,7,8,9,10,11,12,13,14,16,17,18,19,20, # AB(Основной) импульс 19,18,17,16,15,14,13,12,11,10,9,8, # BC (основная) реакция 9,10,11,12,13, 14,15, #C0C1 (Минорный) импульс 14,13,12,11,10, # C1C2 (минорная) реакция 11, 12, 13, 14, 15, 16, 17, 18, #C2C3 (Минорный) импульс 17, 16, 15, 15, 14, 13, 12, # C3C4 (Минорная) реакция 13, 14, 15, 16, 17, 18, 19, 20, 21, #C4C5 (Минорный) импульс 20, 19, 18, 17, 16, 15, 14, # C5C6 (Минорная) реакция 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 # CD (мажорный) импульс ] Я считаю, что какая-то рекурсивная реализация может помочь. Я не совсем знаком с реализацией с использованием этой парадигмы