Найдите максимумы и минимумы в данных временных рядов

Я искал максимумы и минимумы (без каламбура) в поисках формулы или, что более вероятно, петли, которая может выбрать более высокие максимумы и более низкие минимумы, чтобы иметь возможность провести через них линию тренда. Это часто используется в техническом анализе акций. Сначала это кажется такой простой проблемой, но я застрял. Я использую python, но любого псевдокода, вероятно, будет достаточно для меня и других, которые наткнутся на эту тему в будущем.


person Andy Visser    schedule 04.03.2017    source источник


Ответы (1)


попробуйте это, я думаю (после вашего комментария)

import numpy as np
from matplotlib import pyplot as plt

data = {"x": np.arange(50), "y": np.random.random(50)}


avg, sigma = data['y'].mean(), data['y'].std()
mask_highs = data['y'] > avg + sigma
mask_lows = data['y'] < avg - sigma
mask_middle = ~ mask_highs & ~ mask_lows
plt.scatter(data['x'][mask_highs],data['y'][mask_highs],c="green")
plt.scatter(data['x'][mask_lows],data['y'][mask_lows],c="black")
plt.scatter(data['x'][mask_middle],data['y'][mask_middle],c="blue")

plt.axhline(avg + sigma, c="red")
plt.axhline(avg - sigma, c="red")
plt.show()

введите здесь описание изображения

Если вы хотите соединить максимумы и минимумы, вы можете сделать

mask_extrema = mask_highs | mask_lows
plt.plot(data['x'][mask_extrema ],data['x'][mask_extrema],color="cyan")

прежде чем ты сделаешь plt.show()

введите здесь описание изображения

person Joran Beasley    schedule 04.03.2017
comment
Мне интересно соединить точки между всеми максимумами, а затем снова между всеми минимумами, чтобы охватить весь набор данных между двумя линиями и не иметь каких-либо отдаленных точек данных. Я посмотрю глубже в matplotlib и посмотрю, может быть, у них есть что-то подобное, спасибо за вклад. - person Andy Visser; 04.03.2017
comment
Этот пост в некоторой степени основан на той же идее, хотя результаты не совсем там. См.: stackoverflow.com/questions/31070563/ - person Andy Visser; 04.03.2017