Как алгоритмизировать выявление скопления фида МА? - страница 9

 
Символ Инь-Янь  был предложен в качестве модели по теме МА , а не как "икона" атеизма или диалектики . Схождение\расхождение цены по отношению к МА , в ценовых уровнях образован новый экстремум , но при этом цена ближе к МА чем предыдущий экстремум ( в статистических отклонениях)  , т.е. формируется  вероятность смены тенденции ( пересечение МА) , пересечения  нет , но условия есть также и в символе - зарождение стихии происходит в области противоположного значения .
 
Aleksei Stepanenko:

Ребята, я так и не понял вверх или вниз

Вправо. 

 
Aleksey Nikolayev:

Какие квантили нужно посчитать, например:

{0.5} - медиана

{0.25, 0.5, 0.75} - квартили

{0.01, 0.02, ..., 0.99} - персентили

Подскажите пожалуйста.

Если пропускать массив через  MathQuantile, его нужно сортировать?

- Я так понял что не важно сорт. или не сорт.


Выходит, что индекс не отследить массива. квант считается по ценам, а индекс массива к которой привязана цена ...

 

Я так понимаю , что эта математика с медианой или квантом, не решает задачу удовлетворительно! 

ЧТо то я не могу...

 

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

 
Mikhail Toptunov:

Если пропускать массив через  MathQuantile, его нужно сортировать?

При любой перестановке (сортировка, например) результат не должен меняться.

 
Aleksei Stepanenko:

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

А по какому пути пошли бы вы?

Алексей, какой путь решит задачу)!

 

Не знаю, какую задачу Вы перед собой поставили, но если в общем сказать, то чем меньше циклических обсчётов, тем быстрее алгоритм. Есть основной цикл - это проход по всем барам истории, от него нам никуда не деться. А от остальных нужно стараться избавляться. Ведь функции MathQuantile, iHighest, и ещё другие - по сути это тоже скрытые циклы. Для ускорения необходимо обрабатывать информацию по мере поступления и хранить её до следующего бара. И в текущих расчётах уже не запрашивать сырые исторические данные, а использовать ранее подготовленные. 

В случае нахождения медиан и прочих квантилей, менее затратней поддерживать упорядоченный массив по мере поступления информации. Код писал выше. Если у Вас "скользящее окно", в пределах которого необходима информация, то нужно подумать, как удалять старые значения из массива таким же быстрым способом. Вероятно понадобится ещё один массив для хранения индексов.

 
Maxim Kuznetsov:

примерный алгоритм рассчёта heatmap (например на 100 бар):

для всех Close от 1 до 100 :

Close[N]=X будет добавлять в heatmap сумму ряда heatmap[Resolution(X)]+={X/N} + {X/(N+1)}+{X/(N+2)}.. до 100.
То что в фигурных скобочках - это "компоненты" средних, просто выделил.
Resolution(X) - "разрешение", например по 10 пунктов Round((X-MininalX)/Point/10)

получаете вектор в котором потом найти нужные вам локальные максимумы.

сей вектор практически - вертикальный профиль цен

Пожалуйста, вы бы могли помочь рассчитать тепловую карту? попробовал через медиану, квантиль не выходит добиться нормального выявления скоплений МА.

//Pmax - количество Скользящих Средних МА
//masPra[] - значение цены МА по текущему бару
//masPer[] - значение индексов массива цен МА, для сортировки
void medianaL0_2(const double &masPra[],const int &masPer[])
 {
  // MathQuickSort(masPra,masPer,10,Pmax-1,1); // сортируем массив цен с 10 периода, по Pmax-1
  

Если можете покажите, что нужно сделать, расчет( по одному бару).

 
Mikhail Toptunov:

Пожалуйста, вы бы могли помочь рассчитать тепловую карту? попробовал через медиану, квантиль не выходит добиться нормального выявления скоплений МА.

Если можете покажите, что нужно сделать, расчет( по одному бару).

в лоб, без оптимизаций, матриц и сложной математики:

1. для текущего бара считаем все МА-шки по отдельности. Получаем массив SMA[N] в коротром лежат значения машек до N

2. заводим heatmap[M], который покрывает цены от minimum=1.00000 , Каждый элемент отвечает за (например) resolution=10 пунктов. 

3. Заполняем этот "сырой" heatmap: берём значение каждой ма-шки и смотрим к какой ячейке оно относится. index=(SMA[i]-minimum)/resolution. Увеличиваем значение этой ячейки hetmap[index]+=1.0

полученный результат можно вывести в CSV и подумать

4. Сглаживаем значения "сырого" heatmap: заводим массив smooth[] и считаем среднее smotch[i]=среднее значение heatmap oт i-window до i+window включительно

5. Локальные максимумы smootch будут указывать на "скопление фидов". Максимумы надеюсь, умеете искать :-)

пункты 1-5 можно разложить математикой и посчитать гораздо быстрее, с минимумом циклов и доп.массивов, но не факт что будет нагляднее

Причина обращения: