Скачать MetaTrader 5

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

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

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

Индикаторы

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

Просмотров:
25852
Рейтинг:
голосов: 52
Опубликован:
2014.09.24 09:12
Обновлен:
2017.11.03 12:02
\MQL4\Indicators\\MQL4\Experts\

Назначение и возможности

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

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


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

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


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

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

  • formula - создание портфеля по заданной формуле;
  • basic28 - пучок из 28 основных валютных пар (мажоры и кроссы);
  • fours35 - пучок из 35 комбинаций четверок из 7 долларовых мажоров;
  • threes35 - пучок из 35 комбинаций троек из 7 долларовых мажоров;
  • fours105 - пучок из 105 комбинаций четверок из 28 основных пар;
  • threes420 - пучок из 420 комбинаций троек из 28 основных пар;
  • twos210 - пучок из 210 комбинаций двоек из 28 основных пар.


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

Формула портфеля вводится в параметр Portfolio_Formula. Формула может содержать явное указание позиций (инструмент, направление, лот) либо только перечисление инструментов без указания объемов и направлений. Между тикером инструмента и цифрами лотов должен ставиться специальный разделитель Formula_Delimiter (по умолчанию используется знак равенства). Между тикерами в формулах должен ставиться разделитель Formula_Separator (по умолчанию используется пробел).

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


Типы моделей

Модель оптимизации портфелей задается параметром Model_Type:

Тип модели Характеристики модели
Fixed Данная модель предполагает ручной подбор лотов без оптимизации. Лоты и направления позиций прописываются в формуле портфеля согласно правилам синтаксиса. Если лоты и направления не указаны, то принимаются равными +1.
Spread Данная модель оптимизирует спред между корзиной инструментов и графиком некоторого выбранного инструмента. Этот выбранный инструмент указывается последним в перечне инструментов в формуле портфеля параметре.
Trend Данная модель оптимизирует корзину инструментов так, чтобы ее график был максимально похож на линейный тренд на интервале оптимизации.
Oscillator Данная модель оптимизирует корзину инструментов так, чтобы ее график был максимально похож на синусоиду на интервале оптимизации.
Hybrid Данная модель оптимизирует корзину инструментов так, чтобы ее график был максимально похож на сумму линейного тренда и синусоиды на интервале оптимизации.
Root Данная модель оптимизирует корзину инструментов так, чтобы ее график был максимально похож на функцию квадратного корня на интервале оптимизации.
Fitting Данный метод формирует симметричный флэтовый коридор на интервале оптимизации. Гарантируется симметричность графика портфеля вокруг нуля, но не гарантируется его минимальная дисперсия.
Principal Данный метод формирует максимально узкий флэтовый коридор на интервале оптимизации. Гарантируется минимальная дисперсия портфеля, но не гарантируется симметричность его графика.


Параметры моделей

Модели имеют следующие параметры:

  • Model_Growth - высота прироста на правой границе интервала оптимизации, измеряется в валюте графика, применяется для моделей trend, root, hybrid;
  • Model_Amplitude - размах амплитуды колебаний, измеряется в валюте графика, применяется для моделей oscillator, hybrid;
  • Model_Cycles- число полных циклов колебаний на расчетном интервале, применяется для моделей oscillator, hybrid;
  • Model_Phase - сдвиг по горизонтали в единицах ширины расчетного интервала, применяется для моделей oscillator, hybrid, root;
  • Model_Absolute - симметричность относительно нулевого уровня (оба хвоста графика в одной полуплоскости), применяется для всех типов моделей.


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

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


Работа с пучком портфелей

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


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

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


Выбор интервала времени

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

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

Параметры границ расчетного диапазона:

  • Start_Time - метка времени для левой границы интервала;
  • Finish_Time - метка времени для правой границы интервала;
  • History_Shift - сдвиг в историю для правой границы интервала;
  • Optimization_Length - длина интервала оптимизации в барах.

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


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

Для работы с портфелем очень важно знать его волатильность, которая зависит от общего объема позиций по компонентам портфеля. На волатильность портфелей оказывают влияние параметры модели, например, для моделей trend, root, hybrid на масштаб портфеля будет влиять значение Model_Growth.

Волатильность портфеля можно регулировать специальными параметрами:

  • Multiplicator_Total - мультипликатор объема, линейно влияет на волатильность конечного портфеля;
  • Portfolio_Value - стоимость портфеля (суммарная стоимость позиций в портфеле) к которой подгоняется объем портфеля, имеет приоритет перед мультипликатором.

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


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

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

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

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


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

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

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

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

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

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

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

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


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

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

Отображаемая информация включает в себя формулу портфеля и некоторые показатели:

  • Range - максимальный размах портфеля на расчетном интервале;
  • RMSE - среднеквадратичное отклонение портфеля от модели на расчетном интервале;
  • Value - стоимость портфеля (суммарная стоимость позиций в портфеле);
  • Margin - величина маржи для одной синтетической позиции в валюте депозита;
  • Commission - величина комиссий по портфелю в расчетной валюте;
  • Spread - величина спреда по портфелю в расчетной валюте.

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

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

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


Трансформация пучка портфелей

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

  • Use_Zero_Shift - использовать сдвиг нулевой точки;
  • Use_Inversion - использовать переворот в одну полуплоскость;
  • Use_Filter - использовать фильтрацию по высоте.

Нулевая точка, точка переворота и точка фильтрации могут располагаться в произвольном порядке внутри или вне интервала оптимизации, и все точки независимы друг от друга. Это позволяет гибко настраивать разнообразные сетапы для анализа. Если активирована опция Movable_Lines, то можно двигать линии-указатели курсором мыши на графике.

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

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

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

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

Параметры управляющие настройками фильтрации:

  • Select_Highest - сколько крайних верхних портфелей отобрать предварительно;
  • Select_Lowest - сколько крайних нижних портфелей отобрать предварительно;
  • Discard_Highest - сколько самых крайних верхних портфелей отбросить из числа отобранных;
  • Discard_Lowest - сколько самых крайних нижних портфелей отбросить из числа отобранных;
  • Position_Highest - направление для верхних портфелей (+1 = покупать, -1 = продавать, 0 = игнорировать);
  • Position_Lowest - направление для нижних портфелей (+1 = покупать, -1 = продавать, 0 = игнорировать).

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

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


Формирование суперпортфеля

Портфели, прошедшие фильтр, поэлементно суммируются с учетом присвоенных признаков направлений (+1, 0, -1), встречные позиции автоматически элиминируются, а суммированные остатки делятся на число отфильтрованных портфелей. Таким образом, полученный портфель (суперпортфель) является средним для отфильтрованных портфелей, этот факт легко увидеть на графике: линия итогового суперпортфеля проходит через центр отфильтрованного пучка. Для увеличения или уменьшения объемов суперпортфеля можно использовать параметры Multiplicator_Total или Portfolio_Value.

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


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

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

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

Стратегия Последовательность действий
Торгуем две пары крайних портфелей на схождение в центре (конвергенция) Выбираем два самых верхних портфеля с помощью 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).


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

  • Hide_Model - скрывает линию модели (целевой функции);
  • Hide_Total - отображает линию итогового (суммарного) суперпортфеля;
  • Hide_By_Filter - скрывает портфели не прошедших фильтрацию;
  • Hide_Stream - скрывает весь пучок полностью, оставляет только суперпортфель;
  • Highlight_Number - выделяет портфель с указанным номером, уменьшая интенсивность остальных линий;
  • Print_Formulae - включает вывод формул всех портфелей и итоги расчетов в журнал экспертов.


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

  • Main_Color - цвет для основной линии графика и для текста на экране;
  • Offset_Color - цвет для графика функции модели;
  • Signal_Color - цвет для индикаторных линий;
  • Stream_Colors - цветовая палитра пучка портфелей (light, dark);
  • Chart_Grid_Size - ширина сетки уровней на графике портфеля.


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

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


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

К графику портфеля можно применить некоторые встроенные индикаторы: скользящие средние и три вида каналов волатильности. Периоды скользящих средних задаются параметрами Main_Period, Fast_Period, Slow_Period. Первая линия используется также для построения каналов волатильности. Параметр Channels_Type позволяет выбрать тип каналов: empty - каналы не отображаются, stdev - каналы стандартных отклонений, envelopes - огибающие линии с фиксированным расстоянием, transcendent - каналы суммарного движения. Ширина канала регулируется с помощью параметра Channel_Size - расстояние от скользящей средней до границ каналов. Для каналов стандартных отклонений используется число среднеквадратичных отклонений, для огибающих линий используется фиксированное расстояние в денежных единицах, для трансцендентных линий используется количество величин суммарного движения.


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

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

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

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


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

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


OHLC графики

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

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

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

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


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

  • Версия терминала МetaТrader 4 не ниже 900

  • Корректно установленная библиотека ALGLIB

    Правильный путь установки библиотеки ALGLIB: \MQL4\Include\Math\Alglib

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


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

Перед запуском советника нужно предварительно настроить в текущем окне графика портфельный индикатор 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, которые инициируют те же действия, что и одноименные кнопки в ручном режиме, но без запроса подтверждения, то есть торговые операции выполняются автоматически. Используя эти ключевые слова и размещая линии выше или ниже текущего значения портфеля, можно реализовать работу виртуальных отложенных ордеров и фиксацию профита/убытка. Каждая линия срабатывает только один раз, и ее описание автоматически корректируется.

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

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

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

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


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

Автопереворот позиций выполняется при касании или пересечении линий, имеющих специальные ключевые слова в поле Описание. Если происходит пересечение линии с ключевым словом UPWARD, то осуществляется стоп-переворот в лонг, если происходит пересечение линии с ключевым словом DOWNWARD, то осуществляется стоп-переворот в шорт.

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

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


Линия отмены

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


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

Советник автоматически закрывает позиции, если текущее значение прибыли или убытка всех позиций по портфелю превышает установленные лимиты в настройках. Для ограничения убытка служит параметр Total_Loss, для фиксации прибыли служит параметр Total_Profit. Эти параметры могут быть установлены с отрицательными значениями, что соответствует перенесенному в положительную область стоп-лоссу и перенесенному в отрицательную область тейк-профиту. Параметр Max_Volume позволяет ограничивать максимальный объем открываемых синтетических позиций. Если включена опция Show_Levels советник отмечает на графике уровень безубыточности портфеля, уровень фиксации прибыли и уровень фиксации убытка с учетом издержек (спред + комиссия).


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

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

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

В редких случаях, когда из-за системного сбоя неожиданно прекращается работа терминала, может произойти пропадание всех глобальных переменных. В этом случае необходимо восстановить значения переменных вручную. Советник дублирует глобальные переменные в виде скрытых объектов графика с аналогичными именами, для их просмотра нужно зайти в окно Список объектов (CTRL+B).

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


Режим пирамидинга

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

Советник может выполнять автоматические открытия/доливки и трансформации по настроенным правилам. Для этого предназначены параметры:

  • Use_Adding - выполнять открытия/доливки;
  • Use_Correction - выполнять коррекции (трансформации) портфеля.

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

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


Агрессивные доливки в пирамидинге

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


Динамические фильтры

Динамические фильтры накладывают дополнительные условия для доливок в режиме пирамидинга, и управляются параметром Dynamic_Filter:

  • Off - фильтр отключен;
  • Zero - фильтр по нулевому уровню;
  • Model - фильтр по линии модели;
  • Main - фильтр по главной линии скользящей средней;
  • Fast - фильтр по быстрой линии скользящей средней;
  • Slow - фильтр по медленной линии скользящей средней;
  • Upper - фильтр по верхней границе динамических каналов;
  • Lower - фильтр по нижней границе динамических каналов.

Условия фильтра задаются параметром Filter_Sign: +1 = выше линии фильтра, -1 = ниже линии фильтра. Направление торговли задается параметром Position_Sign: +1 = покупки, -1 = продажи. Таким образом, это позволяет настраивать условия доливок в зависимости от положения цены портфеля от выбранной линии, имитируя логику скользящих отложенных приказов.


Ограничение времени работы

Советник учитывает время ограничений из параметров:

  • Starting_From - не начинать новую серию позиций до указанного времени;
  • Finishing_From - не начинать новую серию позиций после указанного времени.

при этом для существующих позиций продолжается сопровождение и доливки, если необходимо.


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

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


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

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


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

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


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

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


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

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


Скриншоты с примерами

Портфель по трендовой модели (линейный тренд):

Портфель по модели МГК (минимизация волатильности):

Портфель по гибридной модели (тренд+осциллятор):

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

Пучок портфелей по модели МГК с фильтром (расширение пучка):

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

OHLC оффлайн-график портфеля (отдельный график):

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

Spread_NiceForex Spread_NiceForex

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

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

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

cm_ind - Smart Gread cm_ind - Smart Gread

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

News Trading News Trading

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