Плотность числового ряда

 

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

К примеру, есть 10 цифр - как найти диапазон чисел, имеющих большую плотность относительно имеющихся чисел?

№ П./П.Число
1 3
2 5
3 6
4 7
5 8
6 23
7 27
8 34
9 36
10 55

 

Свои соображения выложу чуть позже, а пока хотелось бы услышать Ваши мысли. 

 

Мой алгоритм:

1. Находим разницу между числами - это как раз их близость друг от друга.

2. Если число меньше среднего значения дельт, получившихся из п.1, то - 1, а если нет - 0.

3. Если значение из п.2 равно 1, то суммируем значение с предыдущим итогом, если нет - 0.

4. Находим максимальное значение из пункта 3.

5. Определяем диапазон - находим значение из пункта 4 и ищем вверх из пункта 3 число с нулевым значением, потом увеличиваем найденное число на единицу.

Таким образом мы получаем диапазон чисел, плотность которых наибольшая по отношению к другим.

№ П./П.ЧислоДельтаБлизкие значенияБлизость подрядМаксимальноеПлотные
1 3       4 3
2 5 2 1 1   5
3 6 1 1 2   6
4 7 1 1 3   7
5 8 1 1 4   8
6 23 15 0 0    
7 27 4 1 1    
8 34 7 0 0    
9 36 2 1 1    
10 55 19 0 0    


 Однако могут возникнуть области с одинаковой плотностью, согласно данной методике

№ П./П.ЧислоДельтаБлизкие значенияБлизость подрядМаксимальноеПлотные
1 11       2  
2 12 1 1 1    
3 18 6 0 0   18
4 21 3 1 1   21
5 22 1 1 2   22
6 28 6 0 0    
7 36 8 0 0   36
8 37 1 1 1   37
9 39 2 1 2   39
10 55 16 0 0    

 

Жду критических замечаний и идей.

 
Интересная тема, предложить нечего, но буду следить).
 

Поправил первый пост - в расчетах таблицы учитывался первый ряд - этого делать не нужно, так как мы ищем дельту и она появляется со второго числа. Фактически находя дельту во второй колонке мы узнаем на сколько близко первое число находиться ко второму. Учитывая выше сказанное хочу обратить внимание, что в колонку "Плотные" (числа) попадает первое число из последовательности (значение ноль в колонке "Близость подряд"), т.е. в колонку "Максимальное" попадают пары чисел, поэтому фактическое количество цифр всегда будет на одну больше.

Почему я этим вычислением озаботился - есть у меня теория о плотности облака сопротивления, согласно которой чем плотней скопление вероятностных уровней сопротивления, тем вероятней, разворот рынка. Т.е. эта теория применима для определения уровней поддержки и сопротивления с учетом динамики рынка, а значит, в теории, должна помочь с большей вероятностью определять точки входа и выхода в рынок - я использовать планирую для определения точки тейк профита.

 

Один из способов действий, если возникло несколько скоплений - нужно определить плотность этой группы по формуле (Максимальное число в группе-Минимальное число в группе)/(Количество чисел в группе). Чем меньше будет значение, тем плотней цифры друг к другу.

№ П./П.ЧислоДельтаБлизкие значенияБлизость подрядМаксимальноеПлотныеПлотность
1 11       2    
2 12 1 1 1      
3 18 6 0 0   18 1,33
4 21 3 1 1   21  
5 22 1 1 2   22  
6 28 6 0 0      
7 36 8 0 0   36 1,00
8 37 1 1 1   37  
9 39 2 1 2   39  
10 55 16 0 0      
 
-Aleks-:
возьми любой индикатор Market Profile и посмотри как вычисляется плотность цены на уровнях, например этот, там еще и об'eмы так считаются

старенькая, но возможно живая версия есть если погуглить "Market Profile MT5 - tradeliakeapro"

 
Andy Sanders:
возьми любой индикатор Market Profile и посмотри как вычисляется плотность цены на уровнях, например этот, там еще и об'eмы так считаются

старенькая, но возможно живая версия есть если погуглить "Market Profile MT5 - tradeliakeapro"

Market Profile - это повторяющееся количество попадания цены в диапазон - этот диапазон задается руками (шаг), а потом просто общее количество баров распределяется на группы. Я же говорю об определении диапазона - другая задача. 

 

Задача недопоставлена. Попытался выяснить цель из алгоритма во втором сообщении, но в нем:

"2. Если число меньше среднего значения дельт, получившихся из п.1, то - 1, а если нет - 0.

3. Если значение из п.2 равно 1, то суммируем значение с предыдущим итогом, если нет - 0."

обнаруживается невыполнимость - результатом п.2 могут быть лишь 0 и -1, а в п.3 нужны +1.

Задачи нахождения скоплений обычно называют кластеризацией. Они бываю непростыми в случае поиска скоплений сразу по ряду признаков: разобрать по кучкам мужские носки, близкие по размеру и цвету, например. В вашем случае, с одним признаком, я думаю, достаточно задать однозначное условие выделения кластера, как алгоритм легко найдется. Пример: найти наибольшую группу уровней, расширение которой приведет к снижению значения плотности, вычисляемой по формуле такой-то. Формула, например, такая: плотность = число уровней в группе, деленное на длину охватываемого ей диапазона курсов (и даже эта простейшая формула терпит фиаско на группе из одного уровня). Есть еще вопрос: сколько раз считать один и тот же уровень, если он в истории встречался несколько раз.

Есть и еще аналог, в теории вероятности - мода распределения. Находится просто, если распределение унимодально, то есть плотность вероятности имеет ровно один максимум. Но нужен критерий выделения нужной области по ширине.

 
Наиболее длинный участок, когда исходный ряд ниже среднего.
 
Vladimir:

Задача недопоставлена. Попытался выяснить цель из алгоритма во втором сообщении, но в нем:

"2. Если число меньше среднего значения дельт, получившихся из п.1, то - 1, а если нет - 0.

3. Если значение из п.2 равно 1, то суммируем значение с предыдущим итогом, если нет - 0."

Там знак "-" использован как тире, а не как знак минус. Вот формулы из экселя (координаты с учетом вставки таблицы в левый верхний угол)

1. =B3-B2

2. =ЕСЛИ(СРЗНАЧ($C$3:$C$11)>C3;1;0)

3. =ЕСЛИ(D3=0;0;E2+D3)

4. =МАКС(E2:E11)

5. Формулы пока нет - определяем визуально

6. =(G6-G2)/(F2+1) 

Шестая формула полуавтомат - максимальное и минимальное число ряда требуется корректировать по мере необходимости, кроме того, я думаю, что более верным будет вычислять не разность целых чисел делимого, а суммировать дельты и делить их на количество пар. Формула =СУММ(C3:C6)/F2

Пример 1 

№ П./П.ЧислоДельтаБлизкие значенияБлизость подрядМаксимальноеПлотныеПлотностьПлотность v2
1 3       4 3 1,00 1,25
2 5 2 1 1   5    
3 6 1 1 2   6    
4 7 1 1 3   7    
5 8 1 1 4   8    
6 23 15 0 0        
7 27 4 1 1        
8 34 7 0 0        
9 36 2 1 1        
10 55 19 0 0        

 Пример 2

№ П./П.ЧислоДельтаБлизкие значенияБлизость подрядМаксимальноеПлотныеПлотностьПлотность v2
1 11       2      
2 12 1 1 1        
3 18 6 0 0   18 1,33 2,00
4 21 3 1 1   21    
5 22 1 1 2   22    
6 28 6 0 0        
7 36 8 0 0   36 1,00 1,50
8 37 1 1 1   37    
9 39 2 1 2   39    
10 55 16 0 0        
 
Vladimir:

Задачи нахождения скоплений обычно называют кластеризацией. Они бываю непростыми в случае поиска скоплений сразу по ряду признаков: разобрать по кучкам мужские носки, близкие по размеру и цвету, например. В вашем случае, с одним признаком, я думаю, достаточно задать однозначное условие выделения кластера, как алгоритм легко найдется. Пример: найти наибольшую группу уровней, расширение которой приведет к снижению значения плотности, вычисляемой по формуле такой-то. Формула, например, такая: плотность = число уровней в группе, деленное на длину охватываемого ей диапазона курсов (и даже эта простейшая формула терпит фиаско на группе из одного уровня). Есть еще вопрос: сколько раз считать один и тот же уровень, если он в истории встречался несколько раз.

Есть и еще аналог, в теории вероятности - мода распределения. Находится просто, если распределение унимодально, то есть плотность вероятности имеет ровно один максимум. Но нужен критерий выделения нужной области по ширине.

Спасибо за внимание. Теоретический экскурс полезен, если есть возможность увидеть действие знаний на практике - я дал исходные данные, показал какой вышел результат, и был бы Вам признателен, если Вы бы проделали вычисления с формулами и пояснениями в экселе и показали результаты. Задачи с поиском носков тут не применимы, так как там поиск идет по похожему признаку, а мы с заранее этот признак не знаем. Как применить моду тут я не понял, но опять же, если я правильно понимаю - нужно указать диапазон попадания в группу самому, а это исключает решение.

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

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