Скачать MetaTrader 5

Смотри, как бесплатно скачать роботов

Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят

Понравился скрипт?
Оцени его работу в терминале MetaTrader 5

2014.09.24 09:12
Индикаторы

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

Просмотров:
23131
Рейтинг:
голосов: 48

Индикатор Portfolio Modeller позволяет моделировать оптимальный портфель из нескольких торговых инструментов. График портфеля представляет собой суммарное изменение стоимости позиций группы инструментов как единого целого (синтетического инструмента, корзины). Портфель может содержать в себе как длинные, так и короткие позиции различного объема. Индикатор работает с любыми валютными парами, CFD акциями, индексами, фьючерсами, металлами, автоматически переводит ценовые пункты в валюту депозита, оптимизирует лоты, используя несколько методов оптимизации.

Индикатор позволяет решать следующие задачи:

  • Построение графиков портфелей по фиксированным формулами;
  • Произвольное моделирование (оптимизация) портфелей по различным моделям;
  • Сравнение двух инструментов или двух портфелей, построение графика разниц (спредов);
  • Оценка волатильности, маржи и издержек портфеля, гибкое изменение объема портфеля;
  • Расчет оптимально-экономной дельты между двумя портфелями;
  • Изменение расчетного интервала и быстрая переоптимизация портфеля;
  • Применение некоторых индикаторов для анализа графиков портфелей;
  • Использование советника с связке с индикатором для управления портфельными позициями.


Принцип работы

В основе лежит принцип выравнивания правой и левой части уравнения. Для выравнивания используются алгоритмы на основе МНК (метод наименьших квадратов) и МГК (метод главных компонент). Выравнивается стоимость двух групп инструментов либо группа инструментов приводится к целевой функции на определенном участке истории. Предусмотрено несколько типов моделей оптимизации, которые будут рассмотрены далее. В ходе работы оптимизатора подбираются объемы позиций левой стороны (переменные), правая сторона остается неизменной (константа). Это также соответствует понятиям зависимых и независимых переменных в регрессионном уравнении.

Левая Сторона (оптимизируемая) = Правая Сторона (фиксированная)

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

Левая Сторона (оптимизируемая) Правая Сторона (фиксированная)
Базис (сумма позиций) Офсет (сумма позиций)
Базис (сумма позиций) Независимая функция
Базис (сумма позиций) Нуль (матрица ограничений или минимум дисперсии)

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

Левая Сторона (фиксированная) Правая Сторона (фиксированная)
Базис (сумма позиций) Нуль (пустая формула)
Базис (сумма позиций) Офсет (сумма позиций)

При построении спредовых портфелей следует иметь в виду, что офсет вводится с положительным знаком, но при построении графика спреда офсет вычитается. Для построения портфелей по независимым функциям офсетная формула не нужна, но требуется указывать параметры функции. Тип модели выбирается с помощью параметра Model_Type. Все модели рассчитываются на рабочем таймфрейме, указанном в параметре Timeframe. Перед применением алгоритма оптимизации все данные переводятся в выбранную валюту графика Chart_Currency путем расчета виртуальной прибыли соответствующих позиций по всем инструментам на анализируемом участке истории с учетом типа инструментов (учитываются базовая валюта актива и валюта котировки).


Синтаксис формул

В индикаторе предусмотрены два параметра для ввода формул: Basis_Formula (базисная формула) и Offset_Formula (офсетная формула). В большинстве случаев требуется только базисная формула. Офсетная формула нужна только для спредовых моделей или для сравнения двух портфелей. Базисная формула может быть фиксированной либо оптимизируемой. Офсетная формула может быть только фиксированной. Фиксированная формула содержит перечисление позиций (инструмент, направление, лот). Если в фиксированной формуле не указаны лоты, то лоты принимаются равными +1. Оптимизируемая формула содержит перечисление инструментов без указания объемов и направлений (они рассчитываются автоматически). Между тикером инструмента и цифрами лотов должен ставиться специальный разделитель Formula_Delimiter (по умолчанию используется знак равенства). Между тикерами в формулах должен ставиться разделитель Formula_Separator (по умолчанию используется пробел).

Пример фиксированной формулы с явным указанием позиций AUDUSD=+1.5 NZDUSD=-1.4 EURJPY=+0.9 GBPJPY=-0.8
Пример оптимизируемой формулы с перечислением инструментов EURUSD GBPUSD AUDJPY NZDJPY CADCHF EURSEK EURNOK


Характеристики моделей

Предусмотрены следующие типы моделей:

Тип модели Метод оптимизации Характеристики и особенности
Fixed Нет Данная модель представляет собой ручной подбор лотов без оптимизации. Лоты прописываются в формуле портфеля согласно правилам синтаксиса. Если лоты не указаны, то принимаются равными +1. Этот тип модели может использоваться для анализа отдельных портфелей или сравнения двух портфелей. В обоих случаях предполагается, что формулы портфелей уже известны. Также можно использовать этот тип модели для того чтобы оценить визуально корреляцию двух активов. Если требуется построить график только одного портфеля, то указывается только базисная формула, а офсетная формула не вводится. Для сравнения двух портфелей их формулы прописываются в базис и офсет соответственно.
Spread МНК (регрессия) Данная модель приравнивает корзину инструментов (базис) к некоторому инструменту или другой корзине (офсет). Оптимизация делает графики похожими друг на друга, минимизируя отклонения между ними. В базисной формуле перечисляются инструменты, для которых будут оптимизироваться лоты. В офсетной формуле должен быть прописан либо один инструмент либо портфель по правилам синтаксиса фиксированных формул. Если в базисе и в офсете есть одинаковые инструменты, то они взаимно перекрываются и сформируется вырожденный нулевой спред. Если ввести в базис и офсет валютные пары, образующие замкнутый цикл, то сформируется вырожденный кросс-лок с микро-колебаниями вокруг нуля.
Trend МНК (регрессия) Данная модель приравнивает корзину инструментов (базис) к функции линейного тренда. В базисной формуле перечисляются инструменты, для которых будут оптимизироваться лоты. Офсет не используется. Оптимизация делает график портфеля похожим на растущий линейный тренд. Обязательным параметром модели является Model_Growth — высота тренда в валюте графика на правой границе интервала оптимизации.
Oscillator МНК (регрессия) Данная модель приравнивает корзину инструментов (базис) к функции синуса. В базисной формуле перечисляются инструменты, для которых будут оптимизироваться лоты. Офсет не используется. Оптимизация делает график портфеля похожим на гармонические колебания. Разумеется, эффективная аппроксимация возможна только на ограниченном участке и при невысоком числе циклов. Параметрами модели являются: Model_Amplitude — размах амплитуды колебаний в валюте графика, Model_Cycles— число полных циклов колебаний на расчетном интервале, Model_Phase — сдвиг фазы колебаний цикла (от -1 до +1).
Hybrid МНК (регрессия) Данная модель приравнивает корзину инструментов (базис) к сумме функций линейного тренда и синуса. В базисной формуле перечисляются инструменты, для которых будут оптимизироваться лоты. Офсет не используется. Оптимизация делает график портфеля похожим на тренд с волнообразными колебаниями. Параметрами модели являются: Model_Growth — величина тренда в валюте графика на правой границе интервала оптимизации, Model_Amplitude — размах амплитуды колебаний в валюте графика, Model_Cycles — число полных циклов колебаний на расчетном интервале, Model_Phase — сдвиг фазы колебаний цикла (от -1 до +1).
Root МНК (регрессия) Данная модель приравнивает корзину инструментов (базис) к функции квадратного корня. В базисной формуле перечисляются инструменты, для которых будут оптимизироваться лоты. Офсет не используется. Оптимизация делает график портфеля похожим на лежащую параболу. Параметром модели являются: Model_Growth — высота параболы в валюте графика на правой границе интервала оптимизации, Model_Phase — сдвиг параболы по горизонтали в единицах ширины расчетного интервала.
Fitting МНК с матрицей линейных ограничений Данный метод приравнивает корзину инструментов (базис) к нулю и накладывает ограничение на корни уравнения, чтобы избежать вырожденного решения. В базисной формуле перечисляются инструменты, для которых будут оптимизироваться лоты. Офсет не используется. Оптимизация делает график портфеля флетовым, симметричным относительно нуля. Данная модель не имеет обязательных параметров, однако для корректного масштабирования лотов необходимо указывать значение стоимости портфеля с помощью параметра Portfolio_Value. Отличие модели fitting от моделей spread и principal в том что гарантируется максимальная симметричность графика портфеля вокруг нуля, но не гарантируется его минимальная дисперсия. Аналогичный способ оптимизации реализован в популярном индикаторе Recycle 1 (автор hrenfx).
Principal МГК Метод главных компонент трансформирует корзину инструментов (базис), выбирая значения коэффициентов так, чтобы максимум дисперсии было поглощено внутри модели и остаточная дисперсия была минимальна. В базисной формуле перечисляются инструменты, для которых будут оптимизироваться лоты. Офсет не используется. Оптимизация делает график портфеля флетовым, с минимальным разбросом. Данная модель не имеет обязательных параметров, однако для корректного масштабирования лотов необходимо указывать значение стоимости портфеля с помощью параметра Portfolio_Value. Отличие модели principal от моделей spread и fitting в том что гарантируется минимальная дисперсия портфеля, но не гарантируется его симметричность относительно нуля. Аналогичный способ оптимизации реализован в популярном индикаторе Recycle 2 (автор hrenfx).


Симметричность моделей

Чтобы сделать модель симметричной относительно нулевой точки (с учетом фазового сдвига), нужно включить опцию Model_Absolute, тогда оба хвоста графика модели root или trend будут располагались в одной полуплоскости.


Создание собственных моделей

Существует возможность создавать собственные независимые функции и собственные методы оптимизации. Для этого нужно сначала зарегистрировать новый тип модели в перечислении METHOD_TYPE, затем ознакомиться с содержимым функции CalculateOptimization и дополнить её используя имеющиеся там примеры. Для каждого типа модели имеется свой блок кода, в котором прописывается метод оптимизации и целевая функция. Исходные данные доступны в массиве EQUITY, модель должна быть записана в массив MODEL. Для того чтобы модель корректно отрисовывалась на графике нужно аналогично дополнить функцию DrawModel.


Масштабирование и волатильность

С практической точки зрения важно понимать волатильность портфеля, которая зависит от характера кривой и от объема позиций по компонентам портфеля. Для управления объемом портфеля служит параметр Portfolio_Value — суммарная стоимость позиций, к этому значению подгоняется конечная стоимость получаемого портфеля. Расчетные лоты будут автоматически отмасштабированы под эту величину с сохранением соотношений. Стоимость портфеля необходимо обязательно указывать для методов fitting и principal, для остальных методов этот параметр является необязательным, и в таком случае стоимость портфеля будет определяться исходя из параметров модели (для независимых функций) или явно прописанных лотов (для фиксированных формул и спредов).

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

  • Range — максимальный размах движений портфеля на расчетном интервале;
  • Deviation — максимальный размах движений портфеля вокруг линии модели на расчетном интервале;
  • Value — стоимость портфеля (суммарная стоимость позиций в портфеле).

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


Форвардный тест и оценки качества

Индикатор оптимизирует портфель в диапазоне времени от Start_Time до Finish_Time. Вне границ этого диапазона индикатор не подглядывает. Форвардный тест заключается в том, чтобы оценить график портфеля за границей анализируемого периода (out of sample). Опция Show_History позволяет скрывать или отображать историю до расчетного интервала. Опция Show_Forward позволяет скрывать или отображать историю после расчетного интервала. Оценка портфеля на истории и на форварде дает ценную информацию о волатильности и потенциальном поведении портфеля.

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

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


Выбор расчетного интервала

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

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


Особенности работы индикатора

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

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

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

Индикатор учитывает только данные Close (без High-Low), поэтому иногда при переключении таймфреймов можно наблюдать кажущийся эффект небольшого изменения максимумов/минимумов. Это является нормальным. Для более точной оценки экстремумов нужно переключиться на младший таймфрейм.

При расчете лотов для компонентов портфеля используется округление до целых лотов/минилотов/микролотов. Выбор точности лотов устанавливается параметром Lots_Digits — число разрядов для дробных лотов. Обычно требуется чтобы оно соответствовало минимально разрешенному лоту брокера (2 соответствует микролотам, 1 соответствует минилотам, 0 соответствует целым лотам). При построении спредовых портфелей бывает важно точное выравнивание объемов. Если округление искажает вид графика, то в таких случаях рекомендуется увеличить суммарный объем портфеля.


Отображаемые данные на графике

Формула построенного портфеля отображается в углу графика. Офсетная сторона формулы всегда показывается с "перевернутым" (отрицательным) знаком. Рядом с формулой отображаются расчетные показатели. Выбрать угол графика для вывода формул и показателей можно с помощью параметра Text_Corner.

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

Индикатор рассчитывает и отображает суммарный спред, комиссию и маржу для однократной покупки/продажи портфеля (без учета добавочных позиций). Комиссия задается в виде процента на полный единичный лот параметром Commission_Rate. В случае если брокер указывает комиссию в виде суммы средств за определенный объем, то необходимо рассчитать процент вручную. Процент комиссий считается одинаковым для всех контрактов. Спред и комиссия отображаются в валюте графика (Chart_Currency). Маржа отображается в валюте депозита.

На графике портфеля можно отобразить автоматически обновляемые линии Bid/Ask, соответствующие текущим синтетическим ценам покупки/продажи портфеля и визуально оценить величину суммарного спреда и комиссий по портфелю непосредственно на графике. Для этого служит параметр Show_Bid_Ask с вариантами: longs для длинных позиций, shorts для коротких позиций, none для скрытия линий. Поскольку индикатор использует в расчетах только цены Bid, приходится искусственным образом имитировать ухудшение цены (для покупок Ask выше, для продаж Bid ниже), и таким образом синтетическая цена должна пройти суммарный спред прежде чем достигнет уровня безубытка. Щелчок по текстовым меткам показателей (спред, комиссии, маржа) позволяет мгновенно менять режим отображения спредов и комиссий longs/shorts/none.


Дополнительные опции графика

  • Draw_Model — включает и отключает отображение линии модели (независимой функции);
  • Chart_Type — переключение режима отображения спреда (можно также переключать щелчком мыши по формуле портфеля):
    • single — отображении двух линий (базис и офсет);
    • dual — отображение одной линии (разница базиса и офсета).
    ;
  • Invert_Chart — зеркально переворачивает график вокруг нулевого уровня (при этом формула портфеля изменится соответственно).


Настройки визуального оформления

  • Basis_Color — цвет для базиса (основного графика), а также для текста формулы базиса и статистики;
  • Offset_Color — цвет для графика функции модели и офсета, а также для текста формулы офсета;
  • Signal_Color — цвет для индикаторных линий;
  • Draw_Histogram — представление графика портфеля в виде гистограммы;
  • Chart_Grid_Size — накладывает сетку уровней на график портфеля с указанным шагом.


Нестандартные тикеры

В терминалах некоторых брокеров могут использоваться суффиксы и префиксы для валютных пар. Для корректной работы с такими тикерами нужно указывать префиксы и суффиксы для валютных пар параметрами FX_prefix и FX_postfix.


Встроенные индикаторы

К графику портфеля можно применить некоторые встроенные индикаторы: скользящую среднюю, три вида каналов волатильности и осцилляторы RSI и MACD. Период скользящей средней задается параметром MA_Period, эта же линия используется для построения каналов волатильности. Параметр Channels_Type позволяет выбрать тип каналов: empty — каналы не отображаются, bollinger — каналы Боллинджера, envelopes — огибающие линии, transcendent — трансцендентные линии. С помощью параметров Outer_Channel и Inner_Channel настраиваются расстояния от скользящей средней до внешей линии и внутренней линии границ каналов. Для каналов Боллинджера используется число стандартных отклонений, для огибающих линий используется расстояние в денежных единицах, для трансцендентных линий используется синтетическое значение количества суммарного движения. Период для осциллятора RSI задается параметром RSI_period. Периоды для осциллятора MACD задаются параметрамим MACD_fast и MACD_slow. Графики осцилляторов можно сдвигать по вертикали относительного основного графика, выделяя и перестаскивая курсором мыши их центральные линии.


Копирование портфелей

Копирование портфелей может осуществляться между графиками в одном терминале и между разными терминалами. Основной способ копирования: сохранить шаблон графика в файл TPL и затем применить шаблон на новом графике, при этом полностью сохранится состояние портфеля и разметка графика. Файл TPL можно скопировать на рабочий стол и затем открыть его в другом терминале. Если же использовать файл настроек индикатора SET, то в этом случае разметка графика и положение линий интервалов не будут скопированы.

Также можно использовать профили терминала. Каждому профилю соответствует одноименная папка с файлами CHR, каждый из которых соответствует открытому графику. Профили хранятся в папке \profiles. Переключение между профилями удобно для того, чтобы разделить портфели на группы и не запутаться. Также разделение по профилям ускоряет работу терминала, когда рабочих окон становится много. Для копирования портфелей между разными терминалами предпочтительно пользоваться копированием профилей. При этом важно помнить, что если по портфелям имеются открытые позиции, то необходимо еще скопировать файл gvariables.dat, так как там хранятся значения объемов открытых позиций. Самый простой и надежный способ синхронизации портфелей между терминалами: копирование всей папки \profiles целиком.

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


Экспорт данных

Данные портфеля и его модели можно экспортировать в файл формата CSV для дальнейшего анализа с помощью различных аналитических приложений. Для этого нужно указать имя файла в параметре CSV_Export_File. Результаты размещаются в папке MQL4\Files в двух файлах: первый файл с окончанием _chart.csv содержит данные текущего графика, а второй файл с окончанием _model.csv содержит ряды данных по модели и по компонентам портфеля (изменения стоимости единичных лотов) на интервале оптимизации рабочего таймфрейма. Символ-разделитель для CSV формата устанавливается параметром CSV_Separator.


Требования для корректной работы

  • Версия терминала МetaТrader 4 не ниже 900;
  • Корректно установленная библиотека ALGLIB (правильный путь установки: \MQL4\Include\Math\Alglib).


Советник Portfolio Manager

Советник Portfolio Manager позволяет управлять портфелями, рассчитываемыми индикаторами Portfolio Modeller и Portfolio Multigraph.


Настройка советника

Перед запуском советника нужно предварительно настроить в текущем окне графика портфельный индикатор Portfolio Modeller или Portfolio Multigraph. Показания индикатора будут использоваться для торговли. При настройке советника нужно прописать уникальное имя портфеля в поле Portfolio_Name. Имя портфеля — это последовательность символов, которая записывается в поле комментария ордеров и используется, чтобы различать ордера разных портфелей. Дополнительно можно приписать портфелю магический номер с помощью параметра Magic_Number, который можно использовать для обслуживания ордеров другими советниками (например трал, безубыток).


Работа в ручном режиме

Советник выводит в назначенный угол графика элементы управления. Кнопки BUY и SELL позволяют открывать или добавлять новую длинную/короткую синтетическую позицию по портфелю, то есть одновременно покупаются/продаются все инструменты, входящие в сформированный портфель с учетом знаков и объемов в формуле портфеля. Кнопка CLOSE позволяет ликвидировать портфель, то есть закрыть все ордера, которые имеют признак данного портфеля. Перед исполнением каждого действия выводится окно подтверждения. В случае ошибки советник сообщает тип ошибки торговой операции. Кнопка TRANS позволяет трансформировать один портфель в другой портфель, при этом выставляется разница позиций между старым и новым портфелями с учетом объема открытых позиций. Для этого нужно сначала перестроить портфель с помощью портфельного индикатора, а затем запустить трансформацию портфеля. Текущая величина прибыли/убытка по портфелю выводится в статусной строке рядом с кнопками управления (Profit). Количество открытых синтетических позиций и направление учитывается и также отображается в статусной строке (Volume).


Горячие кнопки

В советнике предусмотрено управление с клавиатуры для ускорения работы. Соответствующие клавиатурные коды прописаны в параметрах Hotkey_Sell, Hotkey_Buy, Hotkey_Close, Hotkey_Trans, при желании их можно поменять.

Схема настроек управления по умолчанию:

Кнопка Действие
[ Открытие позиции шорт
] Открытие позиции лонг
\ Закрытие всех позиций
/ Трансформация портфеля


Торговля по линиям

В советнике реализована авто-торговля с помощью трендовых и горизонтальных уровней. Советник отслеживает события касания или пересечения индикатором линий, имеющих определенные ключевые слова в поле Описание. Ключевыми словами являются: "BUY", "SELL" и "CLOSE", которые инициируют те же действия, что и одноименные кнопки в ручном режиме. Исключением является отсутствие ручного подтверждения, то есть торговые операции выполняются автоматически. Используя эти ключевые слова и размещая линии выше или ниже текущего значения портфеля, можно реализовать работу виртуальных отложенных stop и limit ордеров, добавление позиций и фиксацию профита/убытка. Каждая линия срабатывает только один раз, и её описание автоматически корректируется.

Если в описании линий после ключевого слова стоит знак двоеточие, за которым указано число, то оно воспринимается как количество синтетических позиций которые нужно добавить. Например: "BUY:2" означает добавить две синтетические позиции в лонг, "SELL:0.5" означает добавить в шорт половину синтетической позиции. Команда "CLOSE" игнорирует объемы и всегда закрывает все позиции.

Ключевое слово "ALERT" в описании линии генерирует оповещение при касании/пересечении этой линии. Каждая линия генерирует оповещение только один раз.

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

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


Режим автопереворота

Автопереворот позиций осуществляется при касании или пересечении линий, имеющих специальные ключевые слова в поле Описание. Если линия с ключевым словом "UPWARD" пересекается снизу вверх, то осуществляется переворот вверх (лонг). Если линия с ключевым словом "DOWNWARD" пересекается сверху вниз, то осуществляется переворот вниз (шорт). После ключевого слова можно поставить знак двоеточие, за которым прописать число, которое будет использоваться как мультипликатор объема. Например: "UPWARD:2" означает перевернуться в лонг с удвоением, "SELL:1.5" означает перевернуться в шорт с коэффициентом полтора. Если мультипликатор объема не указан, то он принимается равным единице. При первом пересечении (если позиций нет) открывается единичная позиция по портфелю. При каждом следующем перевороте новый объем позиций умножается на мультипликатор, то есть происходит наращивание объема позиций. Линии автопереворота в отличие от других линий приказов работают постоянно, то есть до их удаления с графика.


Линия отмены

Линия отмены — это линия с ключевым словом "DISABLE" в поле Описание. При касании или пересечении этой линии отключается работа всех линий на текущем графике.


Мониторинг прибыли и убытка

Советник автоматически закрывает позиции, если текущее значение прибыли или убытка всех позиций по портфелю превышает установленные в настройках. Для ограничения убытка служит параметр Stopout_Value, для фиксации прибыли служит параметр Target_Value. Эти параметры могут быть установлены с отрицательными значениями, что соответствует перенесенному в положительную область стоп-лоссу и перенесенному в отрицательную область тейк-профиту. Если включена опция Show_Positions советник отмечает на графике уровень безубыточности для всех открытых позиций по портфелю, уровень фиксации прибыли и уровень фиксации убытка с учетом суммарных издержек.


Особенности работы советника

Для работы советника портфельный индикатор должен присутствовать в том же окне графика. Опция Indicator_Name позволяет подключать советника к индикаторам Portfolio Modeller и Portfolio Multigraph. Если в текущем окне присутствует несколько копий портфельного индикатора, то советник будет работать только с первой копией. Для работы с несколькими портфелями необходимо каждый портфель построить в отдельном окне и в каждом окне запустить копию советника. Каждая запущенная копия советника должна иметь свой уникальный Portfolio_Name во избежание конфликтов. Некоторые брокеры автоматически добавляют свои тексты в комментарии ордеров, но это не мешает работе советника.

Портфельный индикатор и советник общаются между собой через глобальные переменные терминала. Окно "Глобальные переменные" можно вызвать по нажатию кнопки F3. Там же учитываются объемы открытых позиций. Удалять или менять эти переменные вручную обычно не требуется. Однако, если изменить значение переменной Volume вручную, а затем выполнить команду трансформации (кнопкой TRANS), то советник синхронизирует позиции с новым значением объема. Это можно использовать для быстрого увеличения/уменьшения объема позиций портфеля. В редких случаях когда из-за системного сбоя неожиданно прекращается работа терминала, может произойти пропадание всех глобальных переменных. В этом случае нужно восстановить значения переменных вручную, прописывая их по шаблону: Volume-XXXX, где XXXX — имя портфеля.

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


Параметры оповещений

  • Auto_Alerts — позволяет сигнализировать алертами по каждому торговому событию при авто-торговле;
  • Push_Alerts — позволяет отправлять оповещения о событиях на мобильный терминал;
  • Manual_Confirm — отключает диалоговые окна подтверждений при ручной торговле (торговля в один клик).


Параметры отображения

  • Text_Color — цвет выводимого текста (статусная строка и кнопки);
  • Text_Corner — выбор угла графика для отображения информации.‌.


Торговые стратегии

Обычно для спредовых портфелей базовой стратегией считается торговля на возврат к средней линии спреда (mean reversion), а для трендовых портфелей обычно применяется торговля на продолжение тренда от коррекции (trend continuation). Однако известны риски подобного подхода: спред может не вернуться в свой диапазон, и тренд может смениться противоположным трендом. Следует помнить, что если в портфеле нет фундаментально связанных инструментов, то нарушение модели неизбежно. Публикация новостей способствует тому чтобы это случилось быстро. Свойство неизбежного разрушения моделей может быть основой для торговых решений. Поэтому имеют место такие стратегии как: торговля на выход из флэта (volatility breakout) и торговля на излом тренда (trend reversal), то есть эксплуатируется свойство рыночной нестабильности.


Мониторинг результатов

Для удобного мониторинга результатов торговли имеется специальный индикатор Equity Monitor, который позволяет строить графики средств, баланса, маржи и свободных средств, оценивать показатели торговли за различные интервалы торговой истории. Также можно применять фильтры для поля комментариев ордеров, чтобы отображать только те результаты, которые относятся к определенному портфелю или группе портфелей. Например, если существовали портфели с именами "ABCD_1", "ABCD_2", "ABCD_3", то применение фильтра "ABCD" даст возможность увидеть суммарный результат торговли всех портфелей этой группы.


Предупреждение о рисках

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


Индикатор Portfolio Multigraph

Индикатор Portfolio Multigraph позволяет моделировать и анализировать множество портфелей в виде пучка (потока). Этот индикатор использует принципы и алгоритмы индикатора Portfolio Modeller. Далее, везде где не указано иначе, считается, что функционал индикаторов идентичен. В частности, оба индикатора можно использовать в качестве источника данных для работы портфельного советника, то есть торговать одним портфелем (Portfolio Modeller) либо пучком портфелей (Portfolio Multigraph).


Принцип работы

В то время как индикатор Portfolio Modeller создает один оптимальный портфель, индикатор Portfolio Multigraph создает множество портфелей одновременно. Графики всех портфелей совмещаются в одной точке, поэтому график имеет вид расходящегося пучка (потока портфелей). После того как пучок построен, он подвергается трансформации: совмещение, переворот и фильтрация. После трансформации пучка портфелей происходит сборка суперпортфеля (суммарного портфеля). В суммарный портфель попадают только те портфели, которые прошли фильтрацию. Все портфели в пучке строятся по одной модели (оптимизируются одинаково), имеют одинаковые границы интервала оптимизации (используют один и тот же участок истории), и к ним применяются одинаковые правила трансформации и параметры графического отображения. Различие портфелей в пучке обусловлено разным наполнением портфелей (набором инструментов). Подробнее эти этапы будут рассмотрены далее.


Генерации комбинаций

Состав портфелей определяется преднастроенными комбинациями инструментов. Набор комбинаций инструментов называется генерацией. Выбор генерации влияет на получаемый пучок портфелей. Генерация выбирается с помощью параметра Generation_Type. Длина набора (число комбинаций в генерации) соответствует числу портфелей в пучке.

Существуют следующие преднастроенные генерации:

  • basic28 — набор из 28 основных валютных пар (мажоры и кроссы);
  • fours35 — набор из 35 комбинаций четверок из семи долларовых мажоров;
  • threes35 — набор из 35 комбинаций троек из семи долларовых мажоров;
  • EGU — набор-треугольник евро-фунт-доллар;
  • EJU — набор-треугольник евро-йена-доллар;
  • ANU — набор-треугольник аусси-киви-доллар;
  • ACU — набор-треугольник аусси-луни-доллар;
  • AEU — набор-треугольник аусси-евро-доллар;
  • AEJ — набор-треугольник аусси-евро-йена;
  • EGJ — набор-треугольник евро-фунт-йена;
  • GNU — набор-треугольник фунт-киви-доллар;
  • CFU — набор-треугольник луни-франк-доллар.


Создание собственных генераций

Существует возможность создавать собственные наборы комбинаций инструментов, которые будут генерировать свои уникальные варианты пучков портфелей. Для этого сначала нужно зарегистрировать новый тип генерации в перечислении STREAM_TYPE, ознакомиться с содержимым функции SetupCombinations и дополнить её, используя имеющиеся там примеры. Для каждой генерации имеется свой блок кода, где перечисляются комбинации инструментов в текстовых константах. При этом можно прописывать лоты, используя синтаксис фиксированных формул. Также нужно учитывать макроконстанты: MAX_COMBOS — максимальное число комбинаций в генерации, MAX_SYMBOLS — максимальное число инструментов в одном портфеле, N_MODEL — индекс массива буферов для хранения модели, N_TOTAL — общее число расчетных буферов, включая пучок портфелей и модель, DIM_SIZE — общее число буферов, включая пучок портфелей, модель и суперпортфель.


Этап оптимизации

На этом этапе выполняется расчет оптимальных портфелей для каждой комбинации инструментов в генерации. В основе расчетов Portfolio Multigraph лежат те же алгоритмы, которые были описаны ранее в Portfolio Modeller: fixed, spread, trend, oscillator, hybrid, root, fitting, principal на основе многофакторой регрессии (МНК) и метода главных компонент (МКГ). Все типы моделей и их настройки идентичны, за исключением модели типа spread: в Portfolio Multigraph отсутствует Офсет, и в правую сторону уравнения регрессии всегда попадает последний инструмент в комбинации.

Оптимизация выполняется в интервале между стартовой позицией и финишной позицией. Эти позиции могут задаваться с помощью параметров Start_Time и Finish_Time (начальное и конечное время), либо с помощью параметров History_Shift (сдвиг в историю для правой границы) и Optimization_Length (длина интервала оптимизации). Если опция Use_Time включена то используются метки времени, если выключена то используются индексы баров. При этом данные берутся с рабочего таймфрейма (параметр Timeframe), который может не совпадать с текущим таймфреймом графика.

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

Сводная таблица по режимам работы:

Опция Use_time Опция Movable_Lines Положение Finish Line Режим работы индикатора
TRUE FALSE В истории Фиксированное окно
TRUE FALSE В будущем Расширяющееся окно
FALSE FALSE В истории Скользящее окно
FALSE FALSE В будущем Расширяющееся скользящее окно
TRUE TRUE В истории Фиксированное окно
TRUE TRUE В будущем Расширяющееся окно
FALSE TRUE В истории Фиксированное окно
FALSE TRUE В будущем Расширяющееся окно


Этап нормализации

На этом этапе производится приведение портфелей к одному масштабу. В индикаторе Portfolio Modeller производится нормирование к заданной суммарной стоимости позиций. Однако для пучка портфелей такой способ не является хорошим, так как стоимость портфеля не однозначно коррелирует с его волатильностью. Поэтому в индикаторе Portfolio Multigraph используется простое линейное масштабирование, с одинаковыми коэффициентами для всех портфелей в пучке, это более корректный метод нормализации, уменьшающий разброс портфелей относительно модели. Для масштабирования служит параметр Volume_Multiplicator — мультипликатор объема: чем выше мультипликатор, тем больше лоты будут при инструментах в портфелях.


Этап трансформации

Трансформация состоит из трех шагов: совмещение, переворот, фильтрация. Для каждого шага выбирается бар, с которого будут считаны актуальные значения всех портфелей для выполнения шага трансформации. Выбор бара осуществляется с рабочего таймфрейма (параметр Timeframe) с помощью параметров: Zero_Shift (сдвиг для точки совмещения), Inversion_Shift (сдвиг для точки выполнения переворота) и Filter_Shift (сдвиг для точки применения фильтра). Положительная величина сдвига означает сдвиг в будущее, отрицательная величина сдвига означает сдвиг в прошлое. Выбранные бары отмечаются специальными линиями-указателями. Отсчет сдвига для точек трансформации делается от их первоначального положения: точка совмещения на левой границе, точки переворота и фильтра на правой границе. Опция Movable_Lines позволяет свободно двигать линии-указатели курсором мыши. Точка совмещения, точка переворота и точка применения фильтра могут располагаться как в прошлом так и в будущем относительно интервала оптимизации, могут быть внутри этого интервала, совпадать с границами интервала, и все точки независимы друг от друга. Это позволяет гибко настраивать разнообразные сетапы для анализа.


Совмещение портфелей

Совмещение портфелей в нулевой точке является обязательной начальной операцией. Сдвиг нулевой точки выполняется только если включена опция Use_Zero_Shift. Если опция не включена то совмещенеи происходит на левой границе интервала оптимизации. При выполнении совмещения графики всех портфелей сдвигаются по вертикали так, чтобы в определенной точке все портфели имели нулевое значение. Точка совмещения (нулевая точка) устанавливается параметром Zero_Shift. Положительные значения сдвигают нулевую точку в будущее, отрицательные значения сдвигают нулевую точку в прошлое относительно левой границы интервала оптимизации. Совмещение не меняет структуру портфелей, а влияет только на отображение пучка портфелей. В результате совмещения графики всех портфелей разбегаются из выбранной нулевой точки вправо в будущее и влево в прошлое.


Переворот портфелей

Переворот портфелей применяется только если включена опция Use_Inversion. Переворот выполняется с учетом положения портфелей в пучке после их совмещения в нулевой точке. Каждый портфель переворачивается относительно нулевого уровня в положительную либо в отрицательную полуплоскость в зависимости от параметра Inversion_Side: +1 = положительный переворот, -1 = отрицательный переворот. Условием переворота является значение портфеля в точке, на которую указывает параметр Inversion_Shift. Если значение портфеля в точке переворота находится в требуемой полуплоскости, то переворот не делается. Если значение портфеля в точке переворота находится в противоположной полуплоскости, то выполняется переворот портфеля, путем умножения на -1. Таким образом, операция переворота всегда ориентирует портфели так, чтобы в моменте форварда они все имели требуемый знак (Inversion_Side). Переворот не меняет структуру портфелей, а меняет только их направление (знаки при лотах). В результате переворотов пучок портфелей приобретает несимметричность, перекос в ту или иную полуплоскость.


Фильтрация портфелей

Фильтрация портфелей применяется только если включена опция Use_Filter. Фильтрация выполняется с учетом положения портфелей после совмещения и переворотов. Положение портфелей в пучке оценивается по их значениям в точке, на которую указывает момент параметр Filter_Shift. Иными словами, используется ранжирование портфелей по высоте в точке применения фильтра. Фильтрация работает по принципу отбора крайних портфелей из пучка. Сначала отбираются крайние верхние портфели и крайние нижние портфели, за это отвечают параметры Select_Highest и Select_Lowest соответственно. Затем из числа отобранных отбрасываются самые крайние сверху и снизу, за это отвечают параметры Discard_Highest и Discard_Lowest соответственно. Далее, тем портфелям, которые не были отброшены присваиваются признаки направлений: Position_Highest для верхних портфелей, Position_Lowest для верхних портфелей, эти параметры могут иметь значения +1 для направления лонг и -1 для направления шорт. После этого отфильрованные портфели с признаками направлений передаются в суммаризацию.

Иллюстрация принципа работы алгоритма фильтрации:

Пучок (все портфели) Портфели отобранные с помощью Select_Highest Портфели исключенные с помощью Discard_Highest
Портфели прошедшие фильтр
Портфели не попавшие в действие фильтров
Портфели отобранные с помощью Select_Lowest Портфели прошедшие фильтр
Портфели исключенные с помощью Discard_Lowest


Этап суммаризации

Суммаризация является безусловным и последним этапом. Те портфели, которые прошли фильтрацию и получили признаки направлений, суммируются. Суперпортфель (суммарный портфель) это сумма всех позиций профильтрованных портфелей с учетом их направлений. Отброшенные портфели не влияют на суперпортфель. При суммировании позиций встречные позиции автоматически элиминируются. Тем не менее, суммарный портфель может получиться достаточно "массивным", поэтому может потребоваться дополнительное масштабирование. После суммирования лоты всех позиций делятся на деноминатор объема, который устанавливается параметром Total_Denominator. Меняя деноминатор можно менять масштаб суперпортфеля: чем больше деноминатор, тем меньше будут лоты в суперпортфеле. Если этот параметр равен нулю, то деноминатор определяется автоматически как число портфелей в пучке, прошедших фильтрацию, и в этом случае суперпортфель будет простым арифметическим средним для суммируемых портфелей, этот факт легко увидеть на графике: линия суперпортфеля проходит через центр профильтрованного пучка. Формула полученного суперпортфеля отображается на графике.

Опция Realistic_Total позволяет более реалистично отображать кривую суперпортфеля: точка отчета (нулевой уровень) для суперпортфеля помещается либо на самую крайнюю точку трансформации либо на правую границу интервала оптимизации, как если бы торговля велась с этого момента.


Выбор портфеля по номеру

Существует возможность явно указать портфель для включения в суперпортфель по его номеру. Для этого служит параметр Filter_Override, которая включает режим переопределения фильтров, при этом вместо фильтрации выбирается единственный портфель по номеру, указанному в этом параметре. Если значение параметра равно нулю, то действуют обычные фильтры. Отследить конкретный портфель в пучке можно с помощью параметра Highlight_Number.


Режим осциллятора

В данной реализации индикатора предусмотрена возможность отображать пучок портфелей в виде MACD-осцилляторов (разницы скользящих средних). Для этого используются параметры: Fast_Period для быстрой средней и Slow_Period для медленной средней. Этот режим можно использовать для идентификации конвергенций и дивергенций пучка портфелей, однако следует помнить, что показания портфелей в режиме осциллятора отличаются от реальных значений.


Ограничения отображения

В целях ускорения работы индикатора предусмотрены два параметра для ограничения участка отображения пучка и суперпортфеля: Limit_History — сколько баров истории отображать в прошлое, Limit_Forward — сколько баров истории отображать в будущее. Особенно актуально для слабых компьютеров.


Прочие настройки

Многие настройки Portfolio Multigraph повторяют одноименные настройки Portfolio Modeller. Далее будут рассмотрены только уникальные настройки.

  • Stream_Colors — задает цветовую палитру для пучка портфелей:
    • light — светлая палитра цветов;
    • dark — темная палитра цветов.
    ;
  • Main_Color — задает цвет линии суперпортфеля и текстовых меток;
  • Show_Model — отображает линию модели (целевой функции);
  • Show_Summary — отображает линию суперпортфеля;
  • Hide_By_Filter — скрывает портфели не прошедших фильтрацию;
  • Hide_Stream — скрывает весь пучок полностью, оставляет только суперпортфель;
  • Highlight_Number — выделяет портфель с указанным номером, уменьшая интенсивность остальных линий;
  • Print_Formulae — включает вывод формул всех портфелей и протокол действий в журнал экспертов.


Экспорт данных

Для анализа пучка портфелей внешними средствами можно экспортировать данные в файл CSV с помощью опций CSV_Export_File и CSV_Separator, которые аналогичны одноимённым параметрам в Portfolio Modeller. Файл данных размещается в папке MQL4\Files и содержит значения суперпортфеля и пучка всех баров с текущего графика.


Примеры использования

Стратегия Последовательность действий
Торгуем две пары крайних портфелей на схождение в центре (конвергенция) Выбираем два самых верхних портфеля с помощью Select_Highest=2 и два самых нижних портфеля с помощью Select_Lowest=2, отбрасывание не требуется, поэтому Discard_Highest=0 и Discard_Lowest=0, определяем направление шорт для верхних с помощью Position_Highest=-1 и направление лонг для нижних с помощью Position_Lowest=+1.
Торгуем на расширение пучка, отбирая самую быструю десятку портфелей (дивергенция) Выбираем пять самых верхних портфелей с помощью Select_Highest=5 и пять самых нижних портфелей с помощью Select_Lowest=5, отбрасывание не требуется, поэтому Discard_Highest=0 и Discard_Lowest=0, определяем направление лонг для верхних с помощью Position_Highest=+1 и направление шорт для нижних с помощью Position_Lowest=-1.
Торгуем самую медленную десятку портфелей в пучке на возврат (конвергенция) Здесь потребуется знать число портфелей в пучке, допустим это 28, половина от пучка будет 14, таким образом, нужно выбрать 14 крайних с каждой стороны и отбросить 9 самых крайних, чтобы осталось по 5 с каждой стороны, и эти портфели будут находиться в центре пучка, тогда: Select_Highest=14, Select_Lowest=14, Discard_Highest=9, Discard_Lowest=9, Position_Highest=-1, Position_Lowest=+1.
Торгуем положительные портфели в лонг и отрицательные в шорт (дивергенция) Включаем переворот в точке форварда с помощью Use_Inversion=true, отключаем фильтрацию с помощью Use_Filter=false, тогда портфели, находящиеся ниже нуля, будут перевернуты в положительную полуплоскость, что эквивалентно продаже этих портфелей.
Торгуем спред между двумя соседними портфелями в пучке Для начала нужно знать число портфелей в пучке (допустим 35) и какую пару выбирать (допустим пара двух верхних), тогда выбираем самый верхний портфель а шорт (Select_Highest=1, Discard_Lowest=0, Position_Highest=-1) и следующий за ним но отсчитывая с противоположной границы (Select_Lowest=34, Discard_Lowest=33, Position_Lowest=+1).


Индикатор Portfolio Exporter

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

Предусмотрено два режима работы, которые выбираются параметром Export_Mode:

  • HST - выгрузка OHLC данных в файл истории;
  • CSV - выгрузка OHLC данных в текстовый файл.

Перед началом работы нужно построить портфель с помощью Portfolio Modeller либо пучок портфелей с помощью Portfolio Multigraph и выбрать соответствующий тип индикатора с помощью параметра Indicator_Name (modeller, multigraph). Параметр Formula_Delimiter должен соответствовать настройкам индикатора-источника. Параметр CSV_Separator служит для задания символа-разделителя для формата CSV. Параметры Chart_Currency, FX_prefix, FX_postfix - аналогичны уже описанным выше. Если опция Auto_Open включена, то сгенерированный OHLC график портфеля будет открываться автоматически.

Принципы генерации OHLC баров следующие: индикатор берет исходные данные с младшего таймфрейма установленного параметром Data_Timeframe, и из этих данных рассчитывает портфельные бары для текущего таймфрейма графика, при этом учитываются направления позиций и лоты инструментов в портфеле. Для наиболее точной генерации баров нужно выбирать M1, в то время как старшие таймфреймы могут быть причиной некорректно длинных хвостов баров. Полученный OHLC график должен визуально соответствовать исходному графику портфеля. Если имеются искажения или обрывы, это значит что данные таймфрейма Data_Timeframe были загружены не полностью.

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

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

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


Примеры-скриншоты

Портфель с минимизированной дисперсией, построенный по методу МГК:

Портфель с минимизированной дисперсией, построенный по методу МГК

Портфель в виде гистограммы с каналами Боллинджера, RSI и MACD:

Портфель в виде гистограммы с каналами Боллинджера, RSI и MACD

Портфель сформированный на основе модели линейного тренда:

Портфель сформированный на основе модели линейного тренда:

Применение модели параболы квадратного корня:

Применение модели параболы квадратного корня

Применение гибридной модели (тренд + синус):

Применение гибридной модели (тренд + синус)

Спред представленный в виде пары линий:

Спред представленный в виде пары линий

Рабочий экран советника, открыта одна позиция, выставлены цель и стоп:

Рабочий экран советника, открыта одна позиция, выставлены цель и стоп

Пример расширяющегося пучка портфелей, суперпортфель построен по 3 крайним с каждой стороны:

Пример расширяющегося пучка портфелей, суперпортфель построен по 3 крайним с каждой стороны

Пример переворота пучка портфелей, суперпортфель построен по 20 верхним портфелям:

Пример переворота пучка портфелей, суперпортфель построен по 20 верхним портфелям

Пример пучка из трех инструментов (EURUSD, GBPUSD, EURGBP):

Пример пучка из трех инструментов (EURUSD, GBPUSD, EURGBP)

Пример пучка из 28 основных инструментов в виде осцилляторов:

Пример пучка из 28 основных инструментов в виде осцилляторов

Пример пучка портфелей построенного по трендовой модели:

Пример пучка портфелей построенного по трендовой модели

Spread_NiceForex Spread_NiceForex

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

Лентяй Лентяй

Советник выставляет Take Profit и Stop Loss для всех ордеров, у которых они не заполнены, и тралит Stop Loss. Внес исправления и пожелания.

cm_ind - Smart Gread cm_ind - Smart Gread

Индикатор расчета параметров сеточных стратегий.

News Trading News Trading

Советник для торговли по экономическому календарю сайта Investing.com.