Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Индикаторы

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

Просмотров:
43858
Рейтинг:
(82)
Опубликован:
2014.09.24 09:12
Обновлен:
2024.01.16 23:33
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

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

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

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

Примечание: индикатор и советник можно скомпилировать под MT5, переименовав mq4 в mq5.


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

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


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

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

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


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

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

Пример фиксированной формулы с явным указанием позиций 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 Данная модель оптимизирует корзину инструментов по МНК так, чтобы ее график был максимально похож на функцию квадратного корня на интервале оптимизации.
Exponent Данная модель оптимизирует корзину инструментов по МНК так, чтобы ее график был максимально похож на функцию экспоненты на интервале оптимизации.
Fitting Данный метод формирует симметричный флэтовый коридор по МНК на интервале оптимизации. Гарантируется симметричность графика портфеля вокруг нуля, но не гарантируется его минимальная дисперсия.
Principal Данный метод формирует максимально узкий флэтовый коридор по МГК на интервале оптимизации. Гарантируется минимальная дисперсия портфеля, но не гарантируется симметричность его графика.
Antiprincipal Метод МГК наоборот: формируется максимальный разброс на интервале оптимизации. Гарантируется максимальная дисперсия портфеля, и не гарантируется симметричность его графика.
Volatility Данный метод используется для выравнивания волатильности всех компонентов портфеля. В результате подбираются лоты такие, что волатильность всех компонентов одинакова в стоимостном выражении. Если в исходной формуле или в комбинации были указаны знаки (направления) то они сохраняются.


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

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

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


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

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


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

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

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

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


Режим консолидации портфелей

Консолидация портфелей - объединение нескольких уже существующих портфелей в новый пучок. Для параметра Generation_Type устанавливается значение consolidation, после чего можно ссылаться на портфели в пределах текущего окна, указывая их имена в параметре Portfolio_Formula. Например, если в текущем окне имеются три портфеля: PF1, PF2, PF3, то можно добавить четвертую копию индикатора, которая будет объединять три этих портфеля с помощью формулы: "PF1 PF2 PF3". Полученный портфель в свою очередь может быть консолидирован в другие портфели. Этот режим можно использовать, чтобы сравнить несколько портфелей между собой, построить график разницы портфелей, усреднить портфели и т.д. Результаты могут использоваться в советнике как и обычные портфели.


Режим декомпозиции портфелей

Декомпозиция портфелей - формирование пучка из инструментов из указанного перечня. Для для параметра Generation_Type устанавливается значение decomposition, после чего в параметре Portfolio Formula прописывается перечень инструментов. Например, если в формуле указано: "EURUSD GBPJPY EURGBP", то будет сформирован пучок из трех указанных инструментов. Этот режим можно использовать, чтобы быстро сравнить несколько торговых инструментов, визуально оценить их корреляцию, построить график разниц, суммировать растущие/падающие и т.д. Результаты могут использоваться в советнике как и обычные портфели.


Импорт комбинаций из файла

Этот режим работы позволяет брать комбинации для генерации пучка портфелей из заранее подготовленного текстового файла. Каждая строка этого файла должна содержать корректную формулу по правилам описанным ранее. Файл должен находиться в папке MQL4\Files. Для параметра Generation_Type должно быть установлено значение import.


Построение портфеля по текущим позициям в терминале

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

При этом в поле Porftolio_Formula указывается текстовая строка, которая ищется в комментариях ордеров. В портфель суммируются те позиции, для которых найдена данная подстрока. Например, если указать строку "ACBD", то будут объединяться позиции с комментариями "ABCD123", "XXX_ABCD", "ABCDEFG[123]". Если поле  Porftolio_Formula пустое, то в портфель попадают все текущие позиции. Если ордеров слишком много (более чем значение макропеременной MAX_SYMBOLS) то будут включены не все позиции.

Для параметра индикатора Generation_Type должно быть установлено значение terminal. Для того, чтобы советник мог корректно отслеживать такой портфель, нужно включить в его настройках опцию Terminal_Mode и указать ту же самую текстовую строку в параметре Comment_Filter, которая будет фильтром для комментариев ордеров. В целях удобства советник в этом режиме автоматически подменяет нулевой объем по портфелю на единичный.


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

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


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

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

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

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

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

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

Также дополнительно можно смещать линии границ синхронно (скользящее окно) с помощью кнопок клавиатуры вперёд и назад, число баров сдвига задается параметром Jumping_Bars, по умолчанию используются следующие кнопки (макропеременные KEY_LEFT и KEY_RIGHT):

Кнопка Действие
, Смещение границ влево
. Смещение границ вправо


Таймер перестроения

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


Задержка перерасчета

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


Синхронизация для последнего бара

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



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

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

Тип модели Параметры Характер влияния
Trend, Root, Hybrid Model_Growth Задает величину трендового прироста от стартовой до финишной точки.
Oscillator, Hybrid Model_Amplitude Задает амплитуду колебаний целевой функции.
Fitting, Principal, Antiprincipal, Spread Target_RMSE Задает целевую волатильность портфеля (среднеквадратичное отклонение от линии модели).
Volatility Model_Amplitude Задает целевую волатильность (СКО) каждого инструмента в портфеле.

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

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

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

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

  • Расчетные показатели портфеля (Range, RMSE);
  • Встроенные индикаторы каналов для портфеля;
  • Сетку уровней на графике;
  • Дополнительные линии уровней;
  • Инструмент "перекрестие".


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

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

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

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

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


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

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

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

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

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

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

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

Цвета линий пучка портфелей можно сделать ярче или темнее с помощью параметра Colors_Offset, этот же параметр отвечает за рандомизацию цветов в пучке.


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

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

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

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

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

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

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


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

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

В индикаторе предусмотрено несколько типов фильтров, выбираемые параметром Filter_Type:

  • Disabled - фильтры отключены
  • High_And_Low - включен фильтр по высоте: отбираются портфели по их положению в пучке (верхние/нижние)
  • RMSE_Min - из пучка отбирается заданное число лучших портфелей с наименьшим отклонением СКО от модели
  • RMSE_Max - из пучка отбирается заданное число лучших портфелей с наибольшим отклонением СКО от модели
  • Manual - выбирается единственный портфель из пучка по указанному номеру

Работа фильтров управляется следующими параметрами:

Параметры Принцип действия
Filter_Shift Выбор точки фильтрации. Этот параметр устанавливает сдвиг в барах относительно правой границы интервала расчета, чтобы определить точку (бар), в которой будет производится ранжирование портфелей по высоте. Бар фильтрации будет отмечен специальной пунктирной вертиальной линией. Если включена опция Movable_Lines, то можно двигать линии-указатели курсором мыши на графике.
Inversion_Mode Выбор режима переворотов. Этот параметр позволяет выполнить переворот пучка портфелей в положительную (positive) или отрицательную (negative) полуплоскость перед их ранжированием. Пучок становится визуально ассиметричным. Если выбрано направление нуль (null) то перевороты не применяются.
Highest_From, Highest_To,
Lowest_From, Lowest_To
Выбор портфелей. Эти параметры непосредственно указывают какие портфели следует отобрать по их положению в пучке (по высоте в заданной точке фильтра), иначе говоря, это диапазоны рангов верхних/нижних портфелей в пучке. Выбираются самые верхние с Highest_From по Highest_To, и самые нижние с Lowest_From по Lowest_To включительно.
Position_Highest, Position_Lowest Эти параметры позволяют включать отобранные портфели в итоговый (суммарный) портфель с указанными знаками, соответственно для первичного и вторичного фильтров: positive - с положительным знаком (покупка), negative - с отрицательным знаком (продажа), null - не включать вообще (ноль).
RMSE_Selection Этот параметр указывают сколько лучших/худших портфелей по критерию наименьшего среднеквадратичного отклонения относительно модели (RMSE) следует взять из пучка, лучшие портфели в данном случае - те которые лучше прилегают к линии модели на интервале расчета.
Manual_Selection Этот параметр указывает номер портфеля в пучке (номер комбинации), который будет выбран. Номер портфеля можно подсмотреть при наведении курсора на кривую портфеля.


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

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

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

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


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

  • Text_Corner - выбирает в каком углу графика выводить блок текстовой информации;
  • Chart_Grid_Size - ширина сетки уровней на графике портфеля;
  • Main_Color - цвет для основной линии графика и для текста на экране;
  • Signal_Color - цвет для индикаторных линий;
  • Colors_Offset - яркость, цветовой сдвиг палитры пучка портфелей (от 0 до 127);
  • Realistic_Total - смещает нулевой уровень итогового портфеля на первый бар форварда;
  • Draw_Markers - отображение маркеров для точек графика;
  • Draw_Histogram - представление графика в виде гистограммы;
  • Hide_Model - скрывает линию модели (целевой функции);
  • Hide_Total - отображает линию итогового (суммарного) портфеля;
  • Hide_By_Filter - скрывает портфели не прошедших фильтрацию;
  • Hide_Stream - скрывает весь пучок полностью, оставляет только итоговый портфель;
  • Hide_Text_Data - скрывает блок текстовой информации;
  • Hide_Zero_Lots - скрывает инструменты с нулевыми лотами.


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

  • Sync_Seconds - количество секунд для проверки синхронизации данных последнего бара;
  • Show_Bid_Ask - режим вывода линий спреда и комиссий на графике (none - нет, longs - покупки, shorts - продажи);
  • Commission_Rate - величина комиссии в процентах на полный лот;
  • Chart_Currency - валюта-измеритель для графика;
  • Lots_Digits - число разрядов для лотов;
  • FX_Prefix - префикс для валютных пар (если у брокера нестандартные тикеры);
  • FX_Postfix - суффикс для валютных пар (если у брокера нестандартные тикеры);
  • Print_Details - вывод формул всех портфелей и итоги расчетов в журнал экспертов.


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

К графику портфеля можно применить некоторые встроенные индикаторы: скользящие средние и каналы волатильности. Периоды скользящих средних задаются параметрами Main_Period, Fast_Period, Slow_Period. Первая линия используется также для построения каналов волатильности.

Параметр Channels_Type позволяет выбрать тип каналов:

  • empty - каналы не отображаются
  • standard - каналы стандартных отклонений
  • envelopes - огибающие линии с фиксированным расстоянием
  • transcendent - каналы суммарного движения
  • confidence1 - каналы доверительных интервалов без трендовой составляющей
  • confidence2 - каналы доверительных интервалов с трендовой составляющей
  • corridor - каналы фиксированного отклонения относительно линии модели
  • deviation - каналы RMSE-отклонения относительно линии модели

Ширина канала регулируется с помощью параметра Channel_Size. Для каналов standard, transcendent, confidence1, confidence2 указывается множитель-число отклонений. Для каналов envelopes и offset указывается фиксированное расстояние в денежных единицах.


Трансформация графика

С помощью трансформации можно превратить график портфеля в сигнальный осциллятор и торговать по сигналам этого осциллятора.

Тип осциллятора задается с помощью параметра Signal_Transformation:

  • normal - обычное представление портфеля без трансформаций;
  • zscore - представление в виде z-score (положение в канале СКО);
  • MACD - представление в виде MACD;
  • WPR - представление в виде WPR.

Период осциллятора задается параметром Signal_Period.

Плавающие средние и каналы можно применять к трансформированному графику портфеля.


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

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

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

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


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

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


OHLC графики

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

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

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

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


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

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

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

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


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

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


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

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

В новой версии кнопки заменены на более компактные иконки-символы:

  • BUY - стрелочка вверх
  • SELL - стрелочка вниз
  • CLOSE - крестик в квадратике
  • TRANS - символ инь-ян
  • SAVE - символ дискеты


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

В советнике предусмотрено управление с клавиатуры для ускорения работы. Соответствующие клавиатурные коды прописаны во внутренних параметрах KEY_SELL, KEY_BUY, KEY_CLOSE, KEY_TRANS, KEY_SAVE и при желании их можно поменять. Схема настроек управления по умолчанию:

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


Автоторговля по линиям

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

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

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


Модификаторы объема

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

Для команды TRANS цифры в круглых скобочках означают множитель, который будет применен к текущему открытому объему, например, TRANS(0.7) будет означать сокращение позиций на 30% или оставить 0.7 объема, а TRANS(1.5) будет означать увеличение объема в полтора раза. Отрицательное число будет означать переворот позиций портфеля, например TRANS(-2) означает переворот с удвоением.


Линии автопереворота

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

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

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

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


Счетчики срабатываний

Счетчик срабатывания - это параметр линии UPWARD/DOWNWARD, который ограничивает количество срабатываний этой линии. Параметр прописывается рядом с ключевым словом в фигурных скобках, например: UPWARD{2} означает что линия UPWARD сработает два раза: первоначальное открытие и один переворот позиций. Каждое срабатывание уменьшает счётчик на единицу. Когда счетчик достигнет нуля, произойдёт закрытие позиций и линия больше не будет работать. По аналогии, например: DOWNWARD{1} означает что линия DOWNWARD сработает только один раз. Если счётчик не указан, то линия будет работать неограниченное число раз.


Линии скользящих приказов

Линии скользящих приказов автоматически примагничиваются к значению той или иной индикаторной линии и двигаются вместе с ними. Для этого используются дополнительные ключевые слова в квадратных скобочках: [MAIN] - основной мувинг, [SLOW] - медленный мувинг, [FAST] - быстрый мувинг, [UPPER] - верхняя граница канала, [LOWER] - нижняя граница канала, [MODEL] - линия модели, [ZERO] - уровень нуля. Соответствующий суффикс/префикс должен быть в описании линии рядом с основным ключевым словом. Разумеется, для корректной работы нужно настроить вывод соответствующих индикаторных линий.

Примеры: BUY[MAIN] означает что линия покупки будет двигаться вместе с основным мувингом, [UPPER]SELL(1.5) означает что линия продажи с объемом 1.5 будет находиться всегда на верхней границе канала, CLOSE[SLOW] означает что линия закрытия будет сдвигаться вместе c медленным мувингом.


Отложенные условные приказы

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

Например: SETUP:115:BUY(3) означает что при срабатывании этой линии будет создана новая линия, содержащую команду "BUY(3)" по цене 115. Аналогично с остальными типами команд. Порядок следования ключевого слова, цены и новой команды менять нельзя. 

Линия SETUP может быть привязана к индикаторной линии, например: SETUP[FAST]:100:CLOSE будет означать, что линия SETUP будет скользить по значениям быстрого мувинга.

Имена для новых линии генерируются по правилу: AUTO-#-XXXX, где # - это номер команды в серии, а XXXX - это имя исходной линии-источника, и таким образом все имена всех новых линии заранее известны.

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


Линии деактивации

Линии деактивации позволяют отключать другие линии приказов по достижению заданной цены портфеля. Для этого используется ключевое слово DISABLE, после которого могут быть перечислены имена объектов (линий) подлежащий отключению, разделенные двоеточиями. Например, команда DISABLE:Line123:Line234:Line345 будет отключать три линии с указанными именами. Если команда использована без перечисления линий, то будет отключены все линии на текущем графике. Деактивация линий выполняется путем перевода ключевых слов в нижний регистр.


Линии оповещений

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


Серии команд в одной линии

В поле Описание для линий приказов можно прописывать не одну команду, а серию команд, разделенных тильдами, например: BUY(2)~ALERT~SETUP:100:SELL(2) будет означать покупку двух синтетических объемов, оповещение, и установку отложенного приказа по цене 100 для продажи двух синтетических объемов. Команды исполняются последовательно слева направо.


Вложенность простых команд

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

Пример: команда SETUP:200:SETUP,300,SELL(3) создает линию SETUP по цене 200, которая в свою очередь создает линию с командой SETUP:300:SELL(3) которая создает командой SELL(3) по цене 300.

Пример: команда SETUP:100:CLOSE<MAIN> создает линию SETUP по цене 100, которая при срабатывании создает линию с командой CLOSE, примагничивающуюся к индикаторной линии MAIN.

Пример: команда  SETUP:200:ALERT|BUY(2)|DISABLE,Line777 создает линию SETUP по цене 200, которая в свою очередь создает линию с серией команд, выполняемых последовательно: оповещение, покупка двух объемов и отключение линии c именем "Line777".


Вложенность сложных команд

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

Во вложенной команде SETUP второго уровня символы вертикальной черты должны быть заменены на символы решетки (хэш), левые угловые скобочки должны быть заменены на символ дроби (слэш), правые угловые скобочки должны быть заменены на символ обратной дроби (бэкслэш).

Пример: SETUP:0:<MAIN>ALERT|SETUP,0,/FAST\CLOSE#DISABLE при срабатывании создает линию c серией команд по цене 0, которая сразу примагничивается к индикаторной линии MAIN и содержит в себе команду [MAIN]ALERT~SETUP:0:<FAST>CLOSE|DISABLE полученную по правилам замены символов, которая в свою очередь при срабатывании генерирует оповещение и создание новой линии по цене 0 с командой [FAST]CLOSE~DISABLE для закрытия портфеля и отключению всех линий, которая сразу примагничивается к индикаторной линии FAST.


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

Советник автоматически закрывает позиции, если текущее значение прибыли или убытка всех позиций по портфелю превышает установленные лимиты в настройках.

Параметры мониторинга:

  • Stop_Loss - общий лимит потерь, после которого все позиции по портфелю будут закрыты
  • Take_Profit - целевое значение прибыли, после которого все позиции по портфелю будут закрыты
  • Breakeven_Level - уровень прибыли, при котором будет включена защита с выходом по безубытку
  • Max_Volume - ограничение на максимальный общий объем синтетических позиций
  • Scaling_Loss - метод масштабирования лимита потерь пропорционально открытому объему
  • Scaling_Profit - метод масштабирования целевой прибыли пропорционально открытому объему
  • Scaling_Breakeven - метод масштабирования уровня включения безубытка
  • Scaling_Reversal - метод масштабирования для уровня стоп-переворот
  • Reversals_Factor - коэффициент переворота
  • Reversals_Count - количество переворотов

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

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

  • Zero - уровень безубытка;
  • Stop - уровень лимита потерь;
  • Take - уровень целевой прибыли;
  • Safe - уровень срабатывания защиты позиции.

Также, если опция Show_Trades включена, то советник отмечает на графике время торговых операций вертикальными линиями:

  • Trade-opening - открытие позиции;
  • Trade-closing - закрытие позиции;
  • Trade-transformation - трансформация позиции;
  • Trade-part-closing - частичное закрытие позиции.


Масштабирование прибыли и убытка для закрытия

Два однотипных параметра отвечают за метод масштабирования, Scaling_Profit и Scaling_Loss:

  • no_scaling - масштабирование не применяется, введенные значения лимитов используются как есть
  • by_increment значения лимитов умножаются на инкремент (количество доливок включая первую)
  • last_volume - значения лимитов умножаются на объем последней доливки
  • next_volume - значения лимитов умножаются на объем следующей доливки
  • full_volume - значения лимитов умножаются на общий текущий объем


Защита от гэпов

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


Проверка торговых условий

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


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

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

Для корректной работы советника необходимо правильно указывать минимально разрешенный лот Lots_Digits в настройках советника и в настройках индикатора.

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

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

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


Режим пирамидинга (автомат)

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

Настройки работы пирамидинга:

  • Use_Adding - включает автоматические открытия/доливки;
  • Use_Correction - включает автоматические коррекции (трансформации);
  • Iteration_Minutes - частота торговых операций в минутах;
  • Adding_Threshold - начальный шаг прибыли/убытка между доливками;
  • Correction_Profit - порог прибыли для коррекций;
  • Correction_Loss - порог просадки для коррекций.
Значение параметра Тип пирамидинга
Adding_Threshold=0 Доливки выполняются безусловно (по времени)
Adding_Threshold<0 Доливки выполняются при просадке (усреднение)
Adding_Threshold>0 Доливки выполняются по мере роста прибыли (разгон)

Доливки и трансформации выполняются дискретно через установленные промежутки времени, для этого служит параметр Iteration_Minutes. Время первого открытия позиций привязывается к старту торгового периода Starting_From. Новые доливки выполняются только при достижении заданного уровня прибыли/убытка, который увеличивается по мере накопления объемов, что соответствует одинаковым интервалам на графике портфеля. Для выполнения новой доливки прибыль/убыток должны быть больше чем величина Adding_Threshold, умноженная на текущий открытый объем.

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

Советник вывод на экран блок текстовой информацию:

  • Iteration - время следующей торговой итерации;
  • Increment - номер последней доливки (число доливок);
  • Threshold - величина прибыли/убытка для следующей доливки.

Эти данные хранятся в соответствующих глобальных переменных терминала.


Прогрессии доливок

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

  • Equal - все доливки единичным объемом;
  • Fibo - доливки по прогрессии Фибоначчи;
  • Martin - доливки с удвоением объема;
  • Linear - доливки по линейной прогрессии.

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

Примечание: неконтролируемый рост объемов может быть опасен, и важно не забывать настраивать адекватные лимиты риска.


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

Динамические фильтры накладывают дополнительные условия для доливок и в виде: положения цены портфеля выше/ниже выбранной линии фильтра. Это позволяет например открывать позиции от границ каналов или выше/ниже скользящей средней. Включение динамических фильтров не отменяет условий заданной частотой торговых итераций и заданного порога просадки. Имеются две группы одинаковых настроек с одинаковыми названиями, которые отличаются только суффиксами "_1" и "_2". Фильтры работают по принципу логической конъюнкции (условия обоих фильтров должны быть истинными).

Линия фильтра выбирается параметрами Filter_Line_Buy для покупок и Filter_Line_Sell для продаж:

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

Условия фильтра задаются параметрами Filter_Op_Buy для покупок и Filter_Op_Sell для продаж:

  • Never - фильтр никогда не срабатывает;
  • Above - фильтр срабатывает когда портфель выше линии фильтра;
  • Below - фильтр срабатывает когда портфель ниже линии фильтра;
  • Always - фильтр работает всегда.


Переворот позиций

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

  • Reverse - при противоположном сигнале текущие позиции переворачиваются на весь объем;
  • Close - при противоположном сигнале все текущие позиции закрываются;
  • Ignore - при противоположном сигнале текущие позиции игнорируются.


Фильтр по качеству модели

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


Трейлинг-стоп

Трейлинг-стоп привязывается к одной из индикаторных линий, аналогично как линии фильтра для открытия позиций (zero, model, main, fast, slow, upper, lower) и отслеживается каждый тик. Линию, на пересечении которой исполняется трейлинг-стоп будем называть стоп-линией. При этом есть еще дополнительное условие: портфель сначала должен выйти в зону действия трейлинг-стопа, которая ограничена другой индикаторной линией (zero, model, main, fast, slow, upper, lower). Линию, которая ограничивает зону действия трейлинг-стопа, будем называть линией условия. 

Параметры работы трейлинг-стопа:

  • Use_Trailing - параметр включения-выключения трейлинга
  • Trailing_Long - стоп-линия для трейлинга длинных позиций
  • Trailing_Short - стоп-линия для трейлинга коротких позиций 
  • Condition_Long - линия условия, ограничивающая зону прибыли для длинных позиций
  • Condition_Short - линия условия, ограничивающая зону прибыли для коротких позиций 

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

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


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

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

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

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

Для того чтобы советник не отрывал невыгодные позиции в период расширения спредов при переходе через сутки служат параметры Stop_Hour, Stop_Minute, Resume_Hour, Resume_Minute - означающие час и минуту прекращения и возобновления торговли (stop - прекратить торговлю, resume - возобновить торговлю).


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

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


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

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


Автосохранение шаблонов

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

  • ручное или автоматическое открытие позиций;
  • ручное или автоматическое закрытие позиций;
  • ручная или автоматическая трансформация;
  • срабатывание лимита потерь или целевой прибыли.

Имя шаблона будет соответствовать имени портфеля.


Сохранение скриншотов

В ходе работы советник может сохранять скриншоты согласно параметрам:

  • Screenshot_Seconds - интервал сохранения скриншота;
  • Screenshot_Height - высота скриншота в пикселях;
  • Screenshot_Width - ширина скриншота в пикселях.

Начало отсчета времени для скриншотов привязывается к первой торговой итерации в авто-режиме.

Дополнительно делаются скриншоты по ключевым событиям советника и к имени файла добавляются окончания:

  • TIMER - скриншот по времени;
  • LIMITS - скриншот при срабатывании лимитов тейк профита или стоп лосса;
  • SERIES - скриншот при отработке очередной торговой итерации;
  • LINES - скриншот при пересечении линии виртуальных приказов.


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

Обычно для спредовых портфелей базовой стратегией считается торговля на возврат к средней линии спреда (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.