Как проще выделить/найти колебания - страница 2

 
Wizard2018:

Понятней не стало.    А можно  на пальцах эту строчку пояснить, если не сложно.  Кто на ком стоит, то есть что к чему здесь прибавляется и что такое t%PERIOD.

1. есть исходные данные в массиве data[], известно что на них значительно влияют, то есть являются одним из слагаемых, колебания со строгим периодом PERIOD (с частотой 1/PERIOD). Ищем фазу/сдвиг этих этих колебаний

2. заводим массив modulo[] размером PERIOD. В нём суммируем элементы data[] через каждые PERIOD отсчётов. То есть в итоге modulo[N] = data[N]+data[N+PERIOD]+data[N+PERIOD*2]+data[N+PERIOD*3]...

    в полученном массиве положение максимума будет  соответствовать сдвигу максимума искомых колебаний, минимум сдвигу минимума. При этом расстояние между ними будет PERIOD/2 (в моём случае я знаю что колебания симметричны и поэтому так)

    прочие независимые слагаемые либо друг-друга компенсируют не давая существенных пиков, либо (в случае кратных периодов) дадут вторичные экстремумы

3. собственно всё ;-) можно ещё предварительно сделать шаг №0 - удалить/сгладить ВЧ составляющую чтобы не мешала, самое простое - просуммировать соседние отсчёты.

прим.: метод годится если нет существенной трендовой составляющей - то есть всё отсчёты имеют одинаковый вес. В данном случае это так

 
Спасибо большое.
 
Maxim Kuznetsov:

1. есть исходные данные в массиве data[], известно что на них значительно влияют, то есть являются одним из слагаемых, колебания со строгим периодом PERIOD (с частотой 1/PERIOD). Ищем фазу/сдвиг этих этих колебаний

2. заводим массив modulo[] размером PERIOD. В нём суммируем элементы data[] через каждые PERIOD отсчётов. То есть в итоге modulo[N] = data[N]+data[N+PERIOD]+data[N+PERIOD*2]+data[N+PERIOD*3]...

    в полученном массиве положение максимума будет  соответствовать сдвигу максимума искомых колебаний, минимум сдвигу минимума. При этом расстояние между ними будет PERIOD/2 (в моём случае я знаю что колебания симметричны и поэтому так)

    прочие независимые слагаемые либо друг-друга компенсируют не давая существенных пиков, либо (в случае кратных периодов) дадут вторичные экстремумы

3. собственно всё ;-) можно ещё предварительно сделать шаг №0 - удалить/сгладить ВЧ составляющую чтобы не мешала, самое простое - просуммировать соседние отсчёты.

прим.: метод годится если нет существенной трендовой составляющей - то есть всё отсчёты имеют одинаковый вес. В данном случае это так

Чтобы преодолеть ограничение:


2. заводим массив modulo[] размером PERIOD. В нём суммируем элементы data[] через каждые PERIOD отсчётов. То есть в итоге

modulo[N] =

  data[N]                           +data[N+PERIOD]                         +data[N+PERIOD*2]                        +data[N+PERIOD*3]...

-( data[N + 1/2*PERIOD]    +data[N+PERIOD + 1/2*PERIOD]     +data[N+PERIOD*2 + 1/2*PERIOD]   +data[N+PERIOD*3 + 1/2*PERIOD]...)

P/S

А если строже (на мой взгляд),то:

modulo[N] =

  1*data[N]                         + 2*data[N+PERIOD]                         + 2*data[N+PERIOD*2]                        + 2*data[N+PERIOD*3]...                       + 2*data[N+PERIOD*z]..

- 2*data[N + 1/2*PERIOD]   -  2*data[N+PERIOD + 1/2*PERIOD]     - 2*data[N+PERIOD*2 + 1/2*PERIOD]   - 2*data[N+PERIOD*3 + 1/2*PERIOD]...   -1*data[N+PERIOD*z + 1/2*PERIOD]

И делить на половину суммы коэффициентов.


 
Выделив колебания, можно прогнозировать котировку? 
 
Aleksey Panfilov:

Чтобы преодолеть ограничение:


2. заводим массив modulo[] размером PERIOD. В нём суммируем элементы data[] через каждые PERIOD отсчётов. То есть в итоге

modulo[N] =

  data[N]                           +data[N+PERIOD]                         +data[N+PERIOD*2]                        +data[N+PERIOD*3]...

-( data[N + 1/2*PERIOD]    +data[N+PERIOD + 1/2*PERIOD]     +data[N+PERIOD*2 + 1/2*PERIOD]   +data[N+PERIOD*3 + 1/2*PERIOD]...)

P/S

А если строже (на мой взгляд),то:

modulo[N] =

  1*data[N]                         + 2*data[N+PERIOD]                         + 2*data[N+PERIOD*2]                        + 2*data[N+PERIOD*3]...                       + 2*data[N+PERIOD*z]..

- 2*data[N + 1/2*PERIOD]   -  2*data[N+PERIOD + 1/2*PERIOD]     - 2*data[N+PERIOD*2 + 1/2*PERIOD]   - 2*data[N+PERIOD*3 + 1/2*PERIOD]...   -1*data[N+PERIOD*z + 1/2*PERIOD]

И делить на половину суммы коэффициентов.


То есть предлагаете вычесть из сумм по периодам суммы сдвинутые на полпериода ? попробую на выходных - есть в идее рациональное

и делить на сумму коэфф. не обязательно  - абсолютные значения не волнуют, главное чтобы макс и мин были на своих местах

 
Roman Kutemov:
Выделив колебания, можно прогнозировать котировку? 

выделив периодичные колебания можно много чего делать. Любое действие снижающее неопределённость помогает в торговле

Можно убрать(снизить) ошибку из других рассчётов, Можно ловить "нетипичное движение". Можно автоматически определять расписание "сейчас торгуем а вот после уже нет".  

я использую при построении каналов