Примеры: Фрактальный анализ совместного движения валют

 

New article Фрактальный анализ совместного движения валют has been published:

Насколько независимы валютные котировки? Движутся ли они согласованно или информация о направлении движения одной валюты ничего не скажет о движении другой? В этой статье предпринята попытка разобраться в этом вопросе, используя методы нелинейной динамики и фрактальной геометрии.

Author: Руслан

 
Спасибо за статью, с выводом автора согласен. Есть только замечание:
Анализ фрактальной размерности все таки корректно проводить на фракталах, где бесконечное количество точек.
А иначе (конечное количество точек) даже у N СБ-величин (случайной блуждание) фрактальная размерность будет всегда меньше N, что ни есть правильно.

Также автор при заполнении пространства использует синхронизированные точно по времени значения соответствующих величин (в относительном масштабе). Видится более разумным заполнять пространство другим способом для анализа фрактальной размерности. Думаю написать и выложить здесь код для подготовки таких данных и дальнейшего обсуждения результатов их анализа.
 
Спасибо за отзыв hrenfx!

hrenfx:

Анализ фрактальной размерности все таки корректно проводить на фракталах, где бесконечное количество точек.

А иначе (конечное количество точек) даже у N СБ-величин (случайной блуждание) фрактальная размерность будет всегда меньше N, что ни есть правильно.

Бесконечные множества можно анализировать только теоретически. Все природные фракталы самоподобны (являются фракталами) только на ограниченных масштабах - на графике C(e) диапазону самоподобия будет соответствовать линейный участок, именно его наклон мы и определяем. Например на рисунке 16 график нелинеен слева (при очень мелком масштабе), т.к. недостаточно точек для такой детализации и нелинеен справа (очень большой масштаб), т.к. все множество при таком размере ячейки видится как большая точка.

hrenfx:
Также автор при заполнении пространства использует синхронизированные точно по времени значения соответствующих величин (в относительном масштабе). Видится более разумным заполнять пространство другим способом для анализа фрактальной размерности. Думаю написать и выложить здесь код для подготовки таких данных и дальнейшего обсуждения результатов их анализа.
Не совсем понял что вы имеете ввиду.
 

Хорошая статья! Здесь есть над чем подумать.

 

Спасибо, NorthAlec!

Задавайте вопросы, а то скучно!

 
irriss:
Бесконечные множества можно анализировать только теоретически. Все природные фракталы самоподобны (являются фракталами) только на ограниченных масштабах - на графике C(e) диапазону самоподобия будет соответствовать линейный участок, именно его наклон мы и определяем. Например на рисунке 16 график нелинеен слева (при очень мелком масштабе), т.к. недостаточно точек для такой детализации и нелинеен справа (очень большой масштаб), т.к. все множество при таком размере ячейки видится как большая точка.
С анализом конечного числа точек понял, спасибо.
Теперь о своем методе заполнения пространства.
Точки каждой валюты берутся, как вершины ЗигЗага. Более подробно объяснить сейчас не в состоянии.
Прилагаю скрипт 4Analyse.mq4, который подготавливает по моей методике данные для анализа.
Входной параметр Value - минимальное относительное изменение цены для построения ЗигЗага.
Так выглядит результат с AUDUSD и NZDUSD:
MathCad-файл с входными данными также прилагаю.
 

hrenfx:

Теперь о своем методе заполнения пространства.

Точки каждой валюты берутся, как вершины ЗигЗага. Более подробно объяснить сейчас не в состоянии.
Прилагаю скрипт 4Analyse.mq4, который подготавливает по моей методике данные для анализа.
Входной параметр Value - минимальное относительное изменение цены для построения ЗигЗага.

Вообще, на мой взгляд, анализ комплексных состояний (всяких там вершин зиг-загов, пробитий канала, фракталов Вильямса и т.п.) перспективное направление, т.к. потенциально это может решить две главные (опять-же на мой взгляд) проблемы при оценке фр. размерности котировок:

1. Похожесть временного ряда (или нескольких синхронизированных рядов) на случайное блуждание, т.к. размерность сл. блуждания всегда равна двум и сколько не добавляй новых валют фр. размерность не сильно увеличивается и нельзя сказать "ага смотрите: EURUSD + GBPUSD была фр. размерность 1.2, а после добавления еще USDJPY стала 1.7, значит йена наполовину (1.7-1.2=0.5) независимая от EUR, USD и GBP". Эдгар Петерс в книге "Хаос и порядок на рынке капитала" обходит эту проблему детрендуя временные ряды, но мне его метод показался несколько надуманным.

2. Сильная зашумленность ряда. (В принципе она и приводит к п.1). Ее, наверное, можно победить какой-нибудь хитрой фильтрацией или заменой "просто цен" на некие ключевые значения - вершины зигзагов, максимумы, пробития и т.д. Но здесь важно потом не запутаться с интерпретацией результатов.

К сожалению, я не совсем понял что именно вы предлагаете анализировать, но если вы точно знаете то можете либо сами запустить в матлабе мои скрипты либо прислать мне данные в csv и я их проанализирую, интерпретация результатов тоже на вас (: Только учтите что точек должно быть не менее 3 000 а вообще лучше порядка 50 тыс.

 

irriss:

2. Сильная зашумленность ряда. (В принципе она и приводит к п.1). Ее, наверное, можно победить какой-нибудь хитрой фильтрацией или заменой "просто цен" на некие ключевые значения - вершины зигзагов, максимумы, пробития и т.д. Но здесь важно потом не запутаться с интерпретацией результатов.

К сожалению, я не совсем понял что именно вы предлагаете анализировать, но если вы точно знаете то можете либо сами запустить в матлабе мои скрипты либо прислать мне данные в csv и я их проанализирую, интерпретация результатов тоже на вас (: Только учтите что точек должно быть не менее 3 000 а вообще лучше порядка 50 тыс.

Метод на примере.
Рассматриваем три временных ряда на одном и том же временном интервале.
Строим ЗигЗаг на каждом ряду. ЗигЗаг строится с условием, что вершины соотносятся друг к другу не менее, чем на Value (например, на 0.2%).
Итак получили три ЗигЗага (по одному на каждый ряд), у которых параметр Value одинаков.
ЗигЗаги храним, как соотношение текущей вершины к предыдущей минус единица. Т.е. такой вид: + 0.23%, -0.4%, +0.35%, -0.25%
Теперь о заполнении трехмерного (три последовательности) пространства.
Привожу пример трех ЗигЗагов. Слева-направо - время.
ׂ 

Новая строка появляется, как только появляется новая вершина хоть одного из зигзагов.
Вот такой будет результат для приведенного рисунка.

Dark
Red
Blue
1
1
0
2
1
0
3
1
0
4
1
0
5
1
0
5
1
1
6
1
1
6
2
1
6
2
2
7
2
2
7
3
2

Почему именно такой метод, объяснить сейчас не в состоянии.

Ранее приложил результат (файл Analyse.prn) для интервала с начала 2010 год по сегодня для значения Value = 0.002 следующих торговых инструментов:
Symbols: AUDUSD_0 NZDUSD_1 EURUSD_2 GBPUSD_3 USDCHF_4 USDJPY_5 USDCAD_6 GOLD_7 SILVER_8
Количество колен у разных символов за этот период от 2-х до 8-ми тысяч. Строчек (по 9 столбцов) больше 30 тысяч. Но это для заполнения 9-мерного пространства. Конечно, можно выбирать любые столбцы (а не все 9) и строить интересующее себя пространство для анализа фр. размерности. Только тогда, есстественно, некоторые строчки будут повторяться. Если это критично для алгоритма (одни и те же точки берутся по несколько раз) расчета фр. размерности, то лучше скрипт запускать только с теми символами, которые и собираются в комплксе анализироваться. Например, для анализа фр. размености только AUDUSD и NZDUSD задать входной параметр SymbolsStr = "AUDUSD, NZDUSD".
У меня нет матлаба, поэтому просьба посмотреть фр. размерность пространств, заполненных так, как описал. Для этого достаточно иметь историю по интересующим символам и запустить скрипт (поместить на график).

 

Привет!

К сожалению, я не смог запустить скрипт 4Analyse.mq4. Он почему-то не хочет работать. Версия, которую я пытался запустить есть в приложенном архиве.

Также там есть матлаб скрипт, графики и прочая для получения результатов этого поста.

hrenfx:

Ранее приложил результат (файл Analyse.prn) для интервала с начала 2010 год по сегодня для значения Value = 0.002 следующих торговых инструментов:
Symbols: AUDUSD_0 NZDUSD_1 EURUSD_2 GBPUSD_3 USDCHF_4 USDJPY_5 USDCAD_6 GOLD_7 SILVER_8

Результаты анализа этого файла:

Часть графика первых трех столбцов от времени (номера строки)

График первого столбца от второго

График фр. размерностей

Из графика виден практически линейный рост без насыщения. Также можно заметить, что это не просто шум - фр. размерность всегда оказывается меньше размерности пространства вложения. К сожалению, на мой взгляд, позитивных выводов сделать не удастся. Скорее всего результат уменьшения размерности (по сравнению с шумом) происходит из-за "разжижения точек" - при появлении новой строки, т.е. новой вершины зиг-зага на одном из временных рядов, значения остальных рядов остаются постоянными. Мне кажется, что значение вершин зигзага случайны, а размерность меньше шума из-за того что меняется за раз только одна переменная или что-то вроде того. Но это лишь мои догадки без основы.

 
irriss:

К сожалению, я не смог запустить скрипт 4Analyse.mq4. Он почему-то не хочет работать. Версия, которую я пытался запустить есть в приложенном архиве.

Возможно, будут лишними некоторые пояcнения, но все же. Это скрипт (не советник), накидывается на график любого инструмента с нужным таймфрэймом. Скрипт начнет собирать данные для анализа с первого места, где есть история (конечно, не ранее StartTime) по всем символам из входного параметра SymbolsStr, и закончит работу на времени EndTime. Результат работы надо смотреть в папке experts/files (не tester/files).

Из графика виден практически линейный рост без насыщения. Также можно заметить, что это не просто шум - фр. размерность всегда оказывается меньше размерности пространства вложения. К сожалению, на мой взгляд, позитивных выводов сделать не удастся. Скорее всего результат уменьшения размерности (по сравнению с шумом) происходит из-за "разжижения точек" - при появлении новой строки, т.е. новой вершины зиг-зага на одном из временных рядов, значения остальных рядов остаются постоянными. Мне кажется, что значение вершин зигзага случайны, а размерность меньше шума из-за того что меняется за раз только одна переменная или что-то вроде того. Но это лишь мои догадки без основы.

Да, по полученным результатам сложно делать выводы.

Чтобы избежать "разжижжения" и необходимо запустить скрипт только с теми символами (параметр SymbolsStr), которыми будет заполняться пространство. Можно все точки загнать в одну "четверть", взяв значения по модулю. Но это пока также все на уровне исследовательского прощупывания.

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

 

Вы взяли для всех инструментов значение 0.002, а может установить разные значения в зависимости от волатильности конкретного инструмента? Что скажете?