Смотри, как бесплатно скачать роботов
Find us on Facebook!
Join our fan page
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Индикаторы

Recycle - индикатор для MetaTrader 4

Просмотров:
16335
Рейтинг:
(15)
Опубликован:
2010.09.19 11:57
Обновлен:
2016.11.22 07:33
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Translate to English

Быстрое ознакомление

Индикатор при настройках по-умолчанию выглядит так:

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

Вступление

Мультивалютных индикаторов существует немного. Вот некоторые из них: кластерный, индексы, корреляционный.

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

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

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

Когда же речь идет об оценке взаимосвязей сразу нескольких ФИ (фин. инструментов), то тут возникает гораздо больше вопросов, чем с двумя ФИ. Если посмотреть на задачу составления оптимального портфеля Марковица, то оттуда можно почерпнуть несколько важных мыслей для решения нашей задачи.

Идеальный синтетический инструмент.

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


Assets - фин. инструмент.

Pow - соответствующий коэффициент (в данном случае степень).

Почему именно так - станет понятно дальше по тексту.

Идея

Итак, мы хотим найти оптимальный синтетический инструмент. Берем выборку интересуемых нас фин. инструментов за единый временной интервал. Логарифмируем их, чтобы получить относительные изменения. Теперь строим графики полученных ВР (временных рядов). Но перед этим еще от каждого ряда отнимем его МО (мат. ожидание), чтобы привести все ВР к единому виду. Пример нескольких полученных таким образом графиков:



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


Формализация задачи и ее решение.

Есть несколько ВР с нулевым мат. ожиданием. Надо найти такие весовые коэффициенты, чтобы полученный при сложении ВР имел наименьшую из возможных дисперсию (анализ эффективностей отличных от МНК (метод наименьших квадратов - минимальная дисперсия) методов не проводился). Чтобы исключить вариант нулевых коэффициентов добавим условие, что сумма их квадратов равна единице.

Запишем в матричном виде задачу:


Matrix - матрица, столбцы которой есть исходные ВР.

Vector - вектор из искомых коэффициентов.

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

Результат.

При сложении следующих фин. инструментов: AUDUSD, EURUSD, GBPUSD, USDCHF, USDJPY, USDCAD, NZDUSD, SILVER, GOLD, USDSEK, USDSGD, USDMXN, USDNOK оптимальный ВР и его распределение выглядят так:

Для примера синим показано распределение EURUSD.

То же самое, но уже без логарифмов, как показано в формуле Recycle:

Так выглядит оптимальный вектор коэффициентов (абсолютные значения):

И сразу бросается в глаза самый большой коэффициент (10-й), соответствующий USDSGD. Кажется, что бред, т.к. USDSGD по логике не может оказывать существенного влияния во взаимосвязях. Но давайте правильно интерпретировать полученные результаты. Такой выброс у USDSGD связан с малой дисперсией USDSGD по сравнению с остальными. Да, мы получили весовые коэффициенты идельаного синтетика. Но, чтобы оценить взаимосвязи, было бы правильно исходные ВР привести к одинаковой дисперсии - к единице. Тогда получаем такие результаты:

Здесь уже видим выбросы у EURUSD (1-й) и USDNOK (12-й). Почему же эти фин. инструменты оказывают существенное влияние во взаимосвязях? Ответ прост: корреляция (коэффициент Пирсона) между EURUSD и USDNOK близка к единице (-0.964) на исследуемом временном интервале (первые 8 месяцев 2010 года).

Замечания.

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

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

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

Теперь о том, почему сумма квадратов коэффициентов равна единице. Единица, т.к. это нормировка вектора. А квадраты, потому что если вместо, например, USDJPY поставить JPYUSD, то это никак не должно сказаться на оценке взаимосвязей. Поменяется в этом случае только знак соответствующего коэффицента. В идеале единице должна быть равна не сумма квадратов, а сумма абсолютных значений коэффициентов. Мне не удалось найти приемлемое решение для такого условия, поэтому остановился на условии суммы квадратов (при этом еще решение получилось простым). При желании торговать синтетиком Recycle понадобится нормировать найденный с условием суммы квадратов оптимальный вектор к условию равенства единице суммы абсолютных значений. Это не будет идеальным решением с изначальным условием суммы абсолютных значений, но даст возможность оценить идеальное решение.

Итак теоретическая база подведена, переходим к MT4+MQL4.

Индикатор Recycle.

Индикатор IND_Recycle показывает весовые коэффициенты оптимального синтетика Recycle или корреляционные коэффициенты общего движения соответствующих фин. инструментов.

Входные параметры:

SymbolsStr - перечисленные через запятую названия исследуемых фин. инструментов. Количество фин. инструментов для совместного анализа ничем не ограничено.

SymbolKoef - показывать (TRUE) график изменения коэффициента для фин. инструмента, на котором запущен индикатор, или нет (FALSE).

Variance - показывать график дисперсии Recycle (TRUE) или сам Recycle (FALSE). Может меняться "на ходу" запуском срипта SCR_RecycleVS.

Correlation - показывать взаимосвязи через корреляционные коэффициенты (дисперсии исходных ВР приводятся к единице) (TRUE) или весовые коэффициенты для составления Recycle (FALSE).

Depth - размер временного интервала, заданный в количестве баров соответвующего таймфрэйма.

Iterations - количество итераций для поиска оптимального вектора решения. Сходимость решения очень быстрая, обычно хватает 5-и итераций. По-умолчанию выставлено с запасом - 10.

Поскольку количество фин. инструментов может быть любым, то выбран необычный способ (для индикаторов) визуализации вектора (см. на видео). Для того, чтобы видеть не только крайний рассчитанный оптимальный вектор, но и то, как он изменялся, требуется вместе с индикатором IND_Recycle поместить на график (лучше до индикатора) советник EXP_RecycleShadow, который идет без входных параметров.

Поскольку расчет оптимального вектора требует существенных вычислительных ресурсов, индикатор IND_Recycle не считает вектора на истории, а только на крайнем временном интервале (параметр Depth).

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

StartTime - время, с которого начинать расчет.

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

Все звучит запутано. Простоту использования лучше всего увидеть на видео:

Показания индикатора не зависят от символа, на котором он запущен. Также индикатор IND_Recycle вместе c советником EXP_RecycleShadow и скриптами SCR_RecycleHistory, SCR_RecycleVS полноценно работает в режиме визуализации тестера:

Стрелка справа показывает крайнее время временного интервала, для которого визуализирован оптимальный вектор:

Практические способы применения.

О практической части применения индикатора скажу лишь несколько реплик:

Чем меньше дисперсия при Correlation = TRUE, тем сильнее были взаимосвязи на исследуемом временном интервале. Также, чем больше абсолютные значения коэффициентов при Correlation = TRUE, тем сильнее влияние соответствующих фин. инструментов во взаимосвязях.

При Correlation = FALSE показана практическая часть весовых коэффициентов оптимального синтетика Recycle. Данные весовые коэффициенты отражают объемы соответвующих фин. инструментов при торговле самим синтетиком... Чем меньше дисперсия синтетика Recycle, тем он "стабильнее".

Пояснения.

Индикатор работает по ценам закрытия уже сформировавшихся баров.

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

Из-за природы построения синтетика Recycle не имеет никакого смысла вводить среди фин. инструментов "кроссы". Например, если будут заданы такие символы: EURUSD, GBPUSD, EURGBP, USDJPY, ...., то весовые коэффициенты (абсолютные значения) первых трех фин. инструментов будут одинаковые, а у остальных нулевые. Т.к. оптимальный синтетик Recycle для такого набора - постоянное значение. Т.е. дисперсия будет нулевой. Это следует из простого факта: log(EURGBP) = log(EURUSD) - log(GBPUSD). Т.е. абсолютно линейная взаимосвязь .И при "сложении" графиков log(EURUSD), log(GBPUSD) и log(EURGBP) совершенно правильно дать им одинаковые (абсолютные значения) весовые коэффициенты, чтобы они образовали в итоге ноль, тем самым дав минимальную из возможных дисперсию - нулевую. Остальным фин. инструментам в списке при этом, конечно, будет соответствовать нулевой весовой коэффициент. Ниже показана как раз такая ситуация (к списку фин. инструментов добавлен GBPJPY):

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

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

Перед использованием индикатора подкачайте историю по фин. инструментам, которые будете использовать для расчетов. Это удобно сделать через скрипт GetHistoryAllSymbols. Также очень удобно проводить мультивалютный анализ совместно с индикатором IND_Recycle и скриптом !_SynchCharts.

Анализ показаний индикатора Recycle.

Анализ проводится за первые 8.5 месяцев 2010 года, с временным окном в сутки (Depth = 288 для M5). Список фин. инструментов тот же: AUDUSD, EURUSD, GBPUSD, USDCHF, USDJPY, USDCAD, NZDUSD, SILVER, GOLD, USDSEK, USDSGD, USDMXN, USDNOK. Смотрим весовые коэффициенты (Correlation = FALSE). График изменения синтетика Recycle и его дисперсии (оба - показания индикатора):

У графика изменения дисперсии Recycle видны два всплеска. С чем связано - не знаю. Вот так эти две ситуации выглядели на рынке:

Теперь графики мат. ожидания и дисперсии оптимального вектора весовых коэффициентов Recycle:

Самые большие (абсолютное значение) мат ожидание и дисперсия у EURUSD (1-й). Это говорит о том, что при торговле синтетиком Recycle бОльший объем будет приходиться именно на EURUSD (МО большое), а также будут частые перевороты (большая дисперсия) позиций по этому фин. инструменту.

Наконец, распределение изменения синтетика Recycle:

Синим показано распределение изменения весового коэффициента EURUSD. Видны огромные всплески на концах. Это значит, что при торговле синтетиком Recycle надо будет довольно стремительно переворачивать позиции EURUSD.

Оценка взаимосвязей.

Осталось дело за малым - корреляция (Correlation = TRUE). Посмотрим, как менялась сила взаимосвязи между фин. инструментами - дисперсия (чем меньше, тем сильнее):

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

Графики мат. ожидания и дисперсии оптимального вектора взаимосвязи (корреляции):

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

MA_Ishimoku MA_Ishimoku

Еще один вариант Скользяшей средней.

4 периода 4 периода

Индикатор показывает уровни 4 периодов

Flat_001a Flat_001a

ЕА работает в самые "тихие" часы по времени Нью-Йорка (OpenHour_1 = 0). EURUSD, H1

Топор Топор

Мой первый грааль (скальпинг ).