preview
Циклы и Forex

Циклы и Forex

MetaTrader 5Примеры | 22 августа 2024, 10:16
225 1
Aleksej Poljakov
Aleksej Poljakov

Введение

Цикличность — это один из основных факторов в нашем мире. Циклы позволяют упорядочивать жизнь человека. Зная циклический порядок, мы можем прогнозировать будущее. Например, я с уверенностью заявляю, что 2025 год начнется 1 января. Всего через несколько месяцев мы узнаем, насколько точным оказался мой прогноз.

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

Циклы можно встретить там, где их вроде бы и не должно быть. Даже интерес к циклам и волнам на Forex носит циклический характер:

Как видите, статьи выходили с периодичностью 1 раз в 6 лет. И только последняя статья нарушила этот цикл. Но может быть этому отклонению есть какое-то другое объяснение?

Давайте попробуем найти ответы на два вопроса. Есть ли циклы в движении цены? И если они есть, то как можно их использовать в трейдинге?


Поиск циклов

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

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

Также, для нахождения цикла также можно использовать простую скользящую среднюю. Этот способ является наиболее простым и наглядным. Допустим, что у нас есть временной ряд, представляющий собой цикл с периодом N. Если мы применим к этому ряду SMA с таким же периодом, то мы получим средний уровень, около которого происходят колебания. Применение SMA с другими периодами позволяют получить колебательные процессы, которые отличаются от исходного. Но несмотря на эти отличия, с помощью таких средних можно восстановить параметры исходного цикла.

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

Так же просто скользящие средние справятся с моделью временного ряда цикл + тренд. При этом SMA будет выступать детектором цикла и тренда одновременно.

До этого момента мы применяли скользящую среднюю к детерминированному временному ряду — уравнения цикла и тренда были жестко заданы и не менялись со временем. Давайте добавим случайности в исходный временной ряд и посмотрим, как с этой ситуацией справится SMA. За 100% мы примем амплитуду цикла. Допустим, что амплитуда может случайно изменяться в пределах 10% в любую сторону. Скорость тренда может меняться от 0 до 1%. И добавим к этому белый шум в 10%. SMA успешно справляется и с такой задачей.

Кажется, что мы нашли индикатор своей мечты. Увы, но недостатки SMA могут перевесить достоинства. Скользящая средняя не сможет фильтровать циклы, состоящие из только положительных или отрицательных полуволн. Кроме того, у этого индикатора низкая разрешающая способность. Говоря проще, он не сможет выделить полезный сигнал, если шумы превысят некоторый предел.

Еще один небольшой недостаток — перед применением SMA желательно заранее знать, какой цикл нам нужно выделить. И тут перед нами встает два вопроса:

  • есть ли цикл в исследуемом нами временном ряду?
  • если цикл есть, то как мы можем узнать о его параметрах?

Чтобы получить ответы на эти вопросы, мы можем использовать точечное отображение.

Посмотрите на этот график. Вы сможете сказать, что на нем отображено?

Возможно, что это график суммы нескольких циклов. А может быть это часть Генерального плана далеков.

Итак, у нас есть одномерный временной ряд со значениями Z[i]. На его основе я построю двумерный график, при этом координаты каждой точки этого графика будут задаваться по следующему правилу (индексация как в тайм-сериях):

X[i] = Z[i];

Y[i] = Z[i-1].

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

Мы видим обычную параболу. Зная свойства параболы, мы можем составить уравнение исходного временного ряда:

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

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

Например, давайте исследуем генератор псевдослучайных чисел. Его график выглядит вот так:

Явно видно сложение нескольких циклов. Сейчас мы все выясним. Строим точечное отображение полученных значений.

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

Отображение циклического процесса выглядит циклично:

А теперь давайте посмотрим, как выглядит точечное отображение реальных цен:

Мы видим растущий линейный тренд и никаких циклов. Однако, нам рано впадать в отчаяние. Из этой картинки мы можем сделать следующие выводы:

  • тренд является главным фактором, определяющим движение цены;
  • сила тренда достаточна велика, и может маскировать циклические процессы.

Вывод очевиден — нам нужно больше способов выделения циклов.


Циклы и случайность

В 1927 г. Евгений Слуцкий опубликовал статью "Сложение случайных причин как источник циклических процессов". В этой работе он блестяще показал, что циклические и волнообразные процессы могут появляться в результате взаимодействия (например, сложения) случайных величин.

Давайте проверим, как работает эта теория на финансовых временных рядах. В качестве исходной случайной величины мы возьмем цены разных символов. При этом поступим так: для текущей пары возьмем цену текущего бара, для всех следующих символов будем брать цену на 1 бар назад. То есть, формула случайной величины у нас получится примерно такой:

Таким образом, получившаяся случайная величина будет зависеть от большого количества предшествующих значений цен разных символов. Усилим эту зависимость — построим на этих величинах скользящее среднее.

Волнообразные процессы есть. Но, нам хотелось бы знать, цикличны ли эти процессы? А если цикл есть, то каковы его параметры?

Чтобы получить ответы на эти вопросы мы можем воспользоваться конечными разностями. Напомню, что 1-ая разность получается если из текущего значения временного ряда вычесть предыдущее:

Вторая конечная разность получается в результате вычитания 1-ых разностей.

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

Используя тригонометрические тождества, найдем 2-ую разность этих значений:

Это формула дискретного гармонического осциллятора. Обратите внимание, что здесь осциллятор означает колебательную систему, а не индикатор.

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

Чтобы выделить колебания, вначале нам нужно найти уровень, около которого они происходят. Обозначим его MA. Тогда формула примет вид:

В левой части MA взаимно поглотят друг друга, а в правой останется.

Рассчитать этот уровень можно несколькими способами. Например, мы можем сначала удалить тренд из исходного временного ряда, или найти среднее всех значений ряда. Оба этих способа имеют один общий недостаток — они очень сильно зависят от исторических данных и слабо реагируют на текущие изменения на рынке. Чтобы избавиться от этого недостатка, я буду использовать алгоритм расчета адаптивных индикаторов. В этом случае уровень MA будет подстраиваться под текущую ситуацию на рынке. В результате у нас получится индикатор, который позволяет отслеживать уровень, около которого происходят колебания скользящей средней. Для примера я использовал SMA, но на практике можно использовать любое усреднение цены.

К сожалению, у гармонического осциллятора есть ряд недостатков, которые необходимо учитывать при его применении. Он хорошо работает с синусоидальными сигналами. Но даже смесь синусоид может вызвать затруднения — осциллятор просто не сможет выбрать наиболее важный цикл.

Большую часть недостатков можно решить с помощью 2-ой разности. По внешнему виду она остается такой же. Но мы можем менять расстояние между членами этой разности. Например, у меня открыт график с таймфреймом H1. Я предполагаю, что в движении цены может наблюдаться суточный цикл (период равен 24). Тогда я буду использовать вторую разность такого вида:

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

Как можно применить этот способ на практике. Предположим, что в движении цены существует устойчивый цикл с некоторыми случайными отклонениями. Тогда, если мы найдем сумму нескольких (в моем случае 24) последних значений разностей, то случайные ошибки компенсируют друг друга. То есть, при устойчивости цикла и/или тренда сумма разностей будет колебаться около ноля. При каких-то нарушениях на рынке (начало нового тренда, запуск нового цикла или прекращение старого) сумма разностей начнет значительно отклоняться. Причем эти отклонения могут выглядеть циклическими. Из чего можно сделать вывод, что нарушения циклов могут носить циклический характер. Рынок Шредингера какой-то.

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


Другие разности

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

Возьмем какое-либо число, которое будет представлять собой начальную волну. Самый простой и очевидный вариант — берем 1. Справа и слева от этого числа ставим 0. У нас получится такая строка "0, 1, 0". Теперь, начиная со второго числа, идем слева направо и из правого числа вычитаем левое.

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

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

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

Недостаток таких разностей заключается в том, что мы даже не представляем какой получится результат при использовании той или иной исходной волны.

Основное достоинство таких разностей заключается в том, что с их помощью мы можем восстановить исходный сигнал. Например, нам известны значения 1-ой и 2-ой разности. Если из текущего значения временного ряда вычесть 1-ую разность, то мы получим предыдущее значение ряда. Зная эти два значения и 2-ую разность, мы получим следующее значение ряда, и т.д.

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


Заключение

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

К статье приложены следующие программы:

название тип особенности
Dot Mapping скрипт

типы отображений

  • Logistic - логистическое;
  • Random - генератор псевдослучайных чисел
  • Integrated - интегрированный ряд
  • Price - реальные цены
  • Linear - линейный тренд
  • Sinus - цикл
  • SinusTrend - цикл + тренд
  • Sinus3 - сумма трех циклов

По окончании работы скрипта картинки сохраняются в папке Files

Slutsky cycles индикатор Обрабатывает все символы доступные в Market Watch
Slutsky MA индикатор
  • iPeriod - период индикатора
  • Smoothing - параметр сглаживания
Second Difference индикатор
  • Sampling - частота дискретизации
scr Wavelet скрипт

отображает коэффициенты вейвлета

  • InpWave - список коэффициентов исходной волны. Коэффициенты - целые числа, через запятую
  • Lvl - желаемый уровень вейвлета
Wavelet индикатор

Использует вейвлеты в виде осциллятора

  • InpWave - список коэффициентов исходной волны. Коэффициенты - целые числа, через запятую
  • Lvl - желаемый уровень вейвлета


Прикрепленные файлы |
Slutsky_cycles.mq5 (3.06 KB)
Slutsky_MA.mq5 (6.15 KB)
scr_Wavelet.mq5 (2.15 KB)
Wavelet.mq5 (3.08 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (1)
Bogard_11
Bogard_11 | 22 авг. 2024 в 10:19
Циклы вообще-то ищутся или по определенному шаблону, или же от прошлых пунктов (баров).
Нейронная сеть на практике: Секущая прямая Нейронная сеть на практике: Секущая прямая
Как уже объяснялось в теоретической части, при работе с нейронными сетями нам необходимо использовать линейные регрессии и производные. Но почему? Причина заключается в том, что линейная регрессия - одна из самых простых существующих формул. По сути, линейная регрессия - это просто аффинная функция. Однако, когда мы говорим о нейронных сетях, нас не интересуют эффекты прямой линейной регрессии. Нас интересует уравнение, которое порождает данную прямую. Созданная прямая не имеет большого значения. Но знаете ли вы, какое главное уравнение мы должны понять? Если нет, то я вам рекомендую прочесть эту статью, чтобы начать разбираться в этом.
Нейросети в трейдинге: Универсальная модель генерации траекторий (UniTraj) Нейросети в трейдинге: Универсальная модель генерации траекторий (UniTraj)
Понимание поведения агентов важно в разных областях, но большинство методов фокусируются на одной задаче (понимание, удаление шума, прогнозирование), что снижает их эффективность в реальных сценариях. В данной статье я предлагаю познакомиться с моделью, которая способна адаптироваться к решению различных задач.
Возможности Мастера MQL5, которые вам нужно знать (Часть 15): Метод опорных векторов с полиномом Ньютона Возможности Мастера MQL5, которые вам нужно знать (Часть 15): Метод опорных векторов с полиномом Ньютона
Метод опорных векторов (Support Vector Machines) классифицирует данные на основе предопределенных классов, исследуя эффекты увеличения их размерности. Это метод обучения с учителем, который довольно сложен, учитывая его потенциальную возможность работы с многомерными данными. В этой статье мы рассмотрим, как эффективнее реализовать базовую версию двумерных данных с помощью полинома Ньютона при классификации ценовых действий.
Методы Уильяма Ганна (часть II): Создаем индикатор квадрата Ганна Методы Уильяма Ганна (часть II): Создаем индикатор квадрата Ганна
Пробуем создать индикатор на основе квадрата 9 Ганна, построенного по квадрированию времени и цены. Напишем код и протестируем индикатор в платформе на разных временных промежутках.