Индикаторы: Portfolio Optimizer - страница 17

 
intergross:

спасибо за очень большую проделанную работу.


Подскажите пожалуйста, если можно, а то я окончательно запутался "в трех соснах" не смотря что код хорошо читается  - как подправить код, чтобы при в автоматическом режиме работы индикатора при


Movable_Lines = false

use_time = false, соотвествено 

линия Line-start-bar и линия Line-finish-bar не перемещались, в то время как линия Line-primary-bar перемещалась с каждым новым баром.

(т.е. сейчас все линии перемещаются, а хотелось бы чтобы  линии начала и конца интервала стояли на месте, а смещалась только линия фильтра). 

Можно сделать так: включить Use_Time чтобы закрепить границы расчета модели, и поставить большое отрицательное число для линии фильтра Primary_Shift и/или Secondary_Shift которое заведомо выводит её в будущее, и тогда индикатор будет ставить её на нулевой бар каждый раз.

 
transcendreamer:

Можно сделать так: включить Use_Time чтобы закрепить границы расчета модели, и поставить большое отрицательное число для линии фильтра Primary_Shift и/или Secondary_Shift которое заведомо выводит её в будущее, и тогда индикатор будет ставить её на нулевой бар каждый раз.

подскажите как работать с результатами PCA алглибовского? :) видел что используете

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

 
Maxim Dmitrievsky

Самое понятное краткое обьяснение 

Самый понятный учебник с примерами 

Самое понятное видео 

Проверочный скрипт на R / индикатор  

Описание из AlgLib 

pcabuildbasis(
double[,] x,       // матрица цен инструментов 
int npoints,       // количество цен для каждого инструмента
int nvars,         // количество инструментов
out int info,      // результат операции, любое положительное число - все ок
out double[] s2,   // массив разбросов / дисперсий для всех найденных векторов
out double[,] v)   // массив векторов, каждый вектор и есть искомые весы для выравнивая наборов вокруг нуля 

... НО ... 

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

... ПОЭТОМУ ... 

лучше использовать обычную Multiple Regression (LRBuild - AlgLib) на модели, которая не пересекается с нулем, потом, чтобы получить колебания вокруг нуля надо сформировать матрицу вращения, которая вычитает эту модель из результата, как показано на видео 

 
...:

Самое понятное краткое обьяснение 

Самый понятный учебник с примерами 

Самое понятное видео 

Проверочный скрипт на R / индикатор  

Описание из AlgLib 

... НО ... 

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

... ПОЭТОМУ ... 

лучше использовать обычную Multiple Regression (LRBuild - AlgLib) на модели, которая не пересекается с нулем, потом, чтобы получить колебания вокруг нуля надо сформировать матрицу вращения, которая вычитает эту модель из результата, как показано на видео 

ну понял, он просто в матрицу пишет линейные коэффициенты для каждой компоненты, по убыванию дисперсии

по поводу линейной регрессии - сделано вот так, без заморочек. Только без учета разных трендовых, синусоидных и прочих трендов, как это реализовано у вас.. сорр, не у вас, а у автора этой темы :)

но мне для других целей

 

Действительно алгоритм PCA имеет проблему ориентации знаков, поэтому портфель в какой-то момент может переворачиваться (впрочем его можно всегда перевернуть самому еще раз) и еще есть проблема нормирования коэффициентов после PCA (точнее не проблема а задача)

Метод PCABuildBasis возвращает (см. alglib.mqh строка 4565), массив дисперсий и матрицу векторов коэффициентов соответствующих дисперсиям, в моделлере это VAR (дисперсии) и VECTOR (коэффициенты), при этом заранее известно что они отсортированы, и если взять первый вектор то он будет соответствовать наибольшей дисперсии (самый волатильный портфель), а если взять последний вектор то будет наименьшая дисперсия из возможных (самый сжатый портфель)

 

вопрос снят, спасибо, разобрался )

 
да, PCA иногда для для классификации в нейросетях используется, например, для выделения компонента вносящего наибольшие изменения, допустим, тренд без шума 

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

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

1. на парах измеряемых в валюте депозита, XXXUSD, будет работать как задумано, по факту 1 лот ~ $1, а для EURGBP или USDCHF будет врать потому что изменение портфеля на один пункт не равно изменению профита на $1, там должен быть метод перевода в валюту депо перед построением матрицы 

2. исходя из пункта #1 принцип построения портфеля выглядит не очень логично, то есть матрицу считаем в относительных ценах, потом выравниваем коефициент сравнивая кто самый волатильный, потом делим на STD для еще более искусственного выравнивания и перевода в "процентные" значения, а потом синтетик считаем как будто мы использовали только весы для ЭКВИТИ, а не для ЦЕН ... для "условных" весов лучше подошла бы геометрическая сумма / среднее, а не арифметическое 

P.S. вобщем, недостатком является то, что есть принудительное выравние визуального графика, которое не учтено в весах расчитанных LRBuild. Хренфикс пытается всех запутать используя левые термины для стандартных определений, но в целом, когда используется матрица цен, а не эквити депо, то вот пример с формулой геометрического среднего 

 

Опубликовано обновление индикатора и эксперта:

  • новый тип модели Volatility - этот тип модели применяется когда необходимо создать портфель, в котором все инструменты имеют одинаковую волатильность в стоимостном выражении, которая подгоняется под параметр Volatility_Value, знаки (направления) сохраняются из исходной формулы/комбинации
  • новый уникальный не имеющий аналогов дизайн кнопок для эксперта
  • некоторые внутренние параметры выведены в макропеременные #define

 

 С чем может быть связана не работа функции Threshold_Correction = 0 

разве трансформация не будет выполнена автоматически при наступлении очередного времени трансформации в не зависимости от  + или -

????

хотя у меня она вообще эта трансформация в автоматическом режиме по времени не работает, хоть + задавай , хоть -

Файлы:
transf.jpg  586 kb
 
intergross:

 С чем может быть связана не работа функции Threshold_Correction = 0 

разве трансформация не будет выполнена автоматически при наступлении очередного времени трансформации в не зависимости от  + или -

????

хотя у меня она вообще эта трансформация в автоматическом режиме по времени не работает, хоть + задавай , хоть -

Сейчас реализовано следующим образом: 

         if(subprofit<=-Threshold_Correction*MathAbs(subvolume))

то есть коррекция производится если текущая прибыль/убыток по рассматриваемой доливке меньше чем величина шага просадки (Threshold_Correction) умноженная на объем этой доливки и взятая с обратным знаком,

соответственно если Threshold_Correction=0 то коррекция должна случиться при условии отрицательной прибыли.

+

Чтобы сделать безусловную коррекцию с каждой торговой итерацией нужно поставить большое (заведомо недостижимое) отрицательное число для Threshold_Correction.