Сравнение двух графиков котировок с нелинейными искажениями по оси X - страница 7

 
hrenfx:

Как решается данная задача через DTW (пример):

  1. Нам надо найти похожие ситуации на истории, как крайние 100 баров.
  2. Доступная история 1 000 000 баров.
  3. Сначала взяли 1 000 000 последовательностей по 50 баров и через DTW сравнили с шаблоном.
  4. Взяли еще 1 000 000 последовательностей уже по 55 баров и через DTW сравнили с шаблоном.
  5. Теперь уже по 60 баров.
  6. .....
  7. По 100 баров.
  8. .....
  9. По 300 баров. И на этом можно остановиться.

Итого выполнили 50 000 000 сравнений по DTW алгоритму, который имеет сложность O(N^2). Т.е. очень грубо совершили 5 * 10^11 (500 миллиардов) элементарных вычислительных операций.

Теперь пришел новый бар - сделали еще раз 500 млрд вычислений.

Решили прогнать на истории, начиная с 200 000 крайнего элемента. Грубо, для прогона нужно совершить 200 000 раз по 500 млрд каждый вычислений. Итого 10^17 вычислений.

Даже если будет хитрая оптимизация, то она не даст выигрыша больше, чем на два порядка. Т.е. в лучшем случае надо будет совершить каких-то 10^15 вычислений.


Разберитесь сначала в принципе работы алгоритма, прежде чем нести такой бред. Сложность алгоритма - O(n*m), где n и m - длины двух входных векторов.

p.s. Никаких "по 50 баров, по 55 баров" делать не нужно, т.к. одно из трёх возможных искажений - пропуск наблюдения.

p.p.s. DTW с ограничениями на форму пути тоже существует, ваше "и на этом можно остановиться" также совершенно не нужно.

p.p.p.s. Ваш метод "зигзаг + вычисление корреляции" будут показывать ерунду, т.к. зигзаг будет строиться на максимумах зашумленной случайной величины, которые мало о чём говорят.

p.p.p.p.s. Для поиска в большом аудиопотоке используются совершенно другие методы.

 
IgorM:
на Хабрахабре статья про DTW http://habrahabr.ru/blogs/algorithm/135087/, вроде бы все доходчиво написано, но чёт ума не приложу как использовать DTW для OHLC, ктонить может растолковать доходчиво?


Для OHLC вам нужно придумать какую-нибудь функцию для расстояния между барами. Например:

1. дано два бара

2. приближаем каждый из баров полиномом третьей степени (для бара C>O по точкам: {(t[0];Open), (t[1];Low), (t[2];High), (t[3];Close)}, для бара O>C по точкам {(t[0];Open), (t[1];High), (t[2];Low), (t[3];Close)}, где t[i]=i/3)

3. считаем расстояние как корень квадратный из интеграла квадрата разности двух полиномов на промежутке 0..1.

(Придумано не мной, метод вроде бы известный и доступный всем интересующимся)

 
Integer:

Вы бы почитали для начала задачу которая стоит перед автором темы и его ответы.

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

Решили прогнать на истории, начиная с 200 000 крайнего элемента. Грубо, для прогона нужно совершить 200 000 раз по 500 млрд каждый вычислений. Итого 10^17 вычислений.

Даже если будет хитрая оптимизация, то она не даст выигрыша больше, чем на два порядка. Т.е. в лучшем случае надо будет совершить каких-то 10^15 вычислений.

Задача намного скромнее - сравнить то, что уже случилось сегодня с началом предыдущего дня (размеры паттернов разные!) и оценить похожесть. Если она присутствует - нарисовать примерную траекторию курса на остаток сегодняшнего дня. Если брать H1 - это 24 бара. В любом случае никак не больше 24 сравнений. На M15 - 96 сравнений максимум. По моим наблюдениям, похожесть распространяется на 2 дня от силы, дальше рынок все "забывает". Оптимизация на интервале месяцев и годов - самообман.
 
anonymous:


Разберитесь сначала в принципе работы алгоритма, прежде чем нести такой бред. Сложность алгоритма - O(n*m), где n и m - длины двух входных векторов.

Откуда столько неприязни и агрессии? Ознакомьтесь с оценками сложности алгоритма. O(N^2) никак не противоречит написанному вами. Алгоритмы с такой сложностью подходят для задач с небольшим объемом данных.

p.s. Никаких "по 50 баров, по 55 баров" делать не нужно, т.к. одно из трёх возможных искажений - пропуск наблюдения.

p.p.s. DTW с ограничениями на форму пути тоже существует, ваше "и на этом можно остановиться" также совершенно не нужно.

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

p.p.p.s. Ваш метод "зигзаг + вычисление корреляции" будут показывать ерунду, т.к. зигзаг будет строиться на максимумах зашумленной случайной величины, которые мало о чём говорят.

Говоря вашим языком - "бред". Могли бы вы конструктивно на примере показать это?

p.p.p.p.s. Для поиска в большом аудиопотоке используются совершенно другие методы.

Это интересно.
 
wmlab:
Задача намного скромнее.

Тогда я перемудрил. Для такой простой задачи проще DTW, наверное, ничего нет. Но сравнивать столь малые последовательности данных - сомнительное занятие.

Можете привести пример из жизни, когда ваша гипотеза, вроде, как сработала?

 
hrenfx:

Тогда я перемудрил. Для такой простой задачи проще DTW, наверное, ничего нет. Но сравнивать столь малые последовательности данных - сомнительное занятие.

Можете привести пример из жизни, когда ваша гипотеза, вроде, как сработала?


Вроде как из жизни и идет - заметил, что на EURUSD мысленно перекладываю сегодняшний уже получившийся график на вчерашний. Если хотя бы первая половина дня совпала визуально, то можно и прогноз сделать (если не пятница и если не новости). "Визуально" - это чередование подъемов и спусков, уровни не совпадают. Ну, примерно как на иллюстрацию эволюции смотришь - соседние картинки похожи, дальние - уже нет. Ну а если не совпадают картинки сегодня-вчера, то этот метод не работает.
 
Возможно привести графики визуально совпавших участков?
 
wmlab:
Задача намного скромнее - сравнить то, что уже случилось сегодня с началом предыдущего дня (размеры паттернов разные!) и оценить похожесть. Если она присутствует - нарисовать примерную траекторию курса на остаток сегодняшнего дня. Если брать H1 - это 24 бара. В любом случае никак не больше 24 сравнений. На M15 - 96 сравнений максимум. По моим наблюдениям, похожесть распространяется на 2 дня от силы, дальше рынок все "забывает". Оптимизация на интервале месяцев и годов - самообман.

Однако, мои индикатор и советник, например, на Н4 оперируют ретроспективой в 900-1000 баров и четко ловят события последних баров https://forum.mql4.com/ru/46596/page124, значит, память рынка не такая уж скоротечная штука?
 

Получилось кое-что... только не осознал. Испытываю чувство мистического экстаза:)

Файлы:
idtw2.mq4  8 kb
Причина обращения: