Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 4310
- Рейтинг:
- Опубликован:
- 2016.11.28 15:53
- Обновлен:
- 2016.11.29 15:31
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Индикатор для автоматического подбора коэффициентов для каждого инструмента в псевдостационарном портфеле, стремящегося к равновесию в нуле.
Индикатор требует наличие библиотеки AlgLib в папке Include\Math терминала.
Немного теории
Каждый инструмент движется в своем направлении, каждое направление — отдельное измерение в многомерной матрице. Вращая матрицу, то есть домножая каждый ее элемент на опр. число, мы пытаемся найти ось, расстояние между которой и всеми инструментами будет минимально, то есть наименьшую общую дисперсию. Число, на которое домножается каждый элемент матрицы, впоследствии становится значением угла, на который нужно повернуть движущийся инструмент, чтобы он двигался в одном направлении с остальными. Это значение угла и является коэффициентом для каждой валюты в портфеле.
Если значение коэффициента больше 0, то валюта покупается, меньше 0 — продается. Таким образом, время от времени пересчитывая коэффициенты, можно поддерживать стационарность созданного синтетика. Вдобавок, PCA не просто находит ось с наименьшей дисперсией к портфелю, а несколько. Сколько инструментов в портфеле, столько и компонент (векторов). Каждая из них называется главной компонентой и определяет, насколько сильно она влияет на суммарное изменение движения портфеля.
Возможные проблемы
Если не рисуется график — посмотрите, что пишется на вкладке Experts, возможно там какие-то ошибки или идет синхронизация с другими чартами, если никаких сообщений нет — покликайте по другим таймфреймам.
Получаемые значения векторов сверялись с рассчитанными в пакете R, поэтому сами значения верные, но знак конкретного коэффициента может быть ошибочным, т.к. РСА не уделяет внимания знакам и определить "-" или "+" можно только эмпирически, т.е. методом тыка.
Проблема #2 с картинками описана здесь http://stats.stackexchange.com/questions/34396/im-getting-jumpy-loadings-in-rollapply-pca-in-r-can-i-fix-it
Параметры
InpFrame = 300; // Плавающее окно для расчета коэффициентов, на каждый из InpDepth баров делаем InpFrame вычислений
InpDepth = 1000; // Общее кол-во баров в истории, для которых строится график
InpForward = 500; // Начиная с какого бара перестаем пересчитывать коэффициенты, пользуемся предыдущими, это OOS
InpPeriod = 1; // Сглаживание для МА, чтобы график смотрелся менее дерганным
InpTimePeriod = PERIOD_CURRENT; // Для какого таймфрейма делаются расчеты
InpNormalize = true; // Нормализовывать ли цены перед отображением, для сглаживания разрывов волатилности USDJPY и EURGBP
InpSynthetics = true; // Рисовать суммарный синтетик помноженный на найденные коэффициенты или каждую пару в отдельности
InpPrices = Logs; // Алгоритм нормализации пар
InpSymbols = "AUDUSD,USDCHF,USDCAD"; // Пары для портфеля
InpMagic = "ID" // Произвольное имя индикатора, чтобы проще размещать на одном графике без конфликтов
Идея заимствована отсюда: https://www.mql5.com/ru/code/9908

Самый простой советник по фрактальному Force_Index.

Фрактальный Momentum.

Индикатор для построения произвольных графиков, в основе которых лежит заданная пользователем формула.

Индикатор RSIOMA с возможностью изменения таймфрейма индикатора во входных параметрах.