Портфельная торговля в MetaTrader 4 Статьи по MQL4 валютный портфель Forex

7 мая 2020 Автор: Eduard

Портфельная торговля в MetaTrader 4.
Магнус ab интегро saeclorum nascitur ordo Publius Вергилий Маро, Эклоги.
Введение.

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

В 1980-х годах исследовательская группа из Morgan Stanley разработала первую стратегию торговли спредами, которая открыла путь для группы нейтральных к рынку стратегий. Современная теория портфеля разнообразна и сложна, поэтому практически невозможно описать все стратегии портфеля в одной статье. Поэтому здесь будет рассмотрен только небольшой спектр спекулятивных стратегий и их возможная реализация в платформе MetaTrader 4..

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

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

Они создаются и продаются немного по-другому. Что касается Forex, то торговля портфелем на самом деле является мультивалютной, однако не все мультивалютные стратегии являются портфельными. Если символы торгуются независимо и динамика общего результата не отслеживается, это торговля несколькими символами.

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

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

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

Портфель может быть представлен следующим уравнением:
A * k1 + B * k2 + C * k3 +. = F,
A, B, C. временные ряды, соответствующие символам портфеля.
к1, к2, к3. являются символьными лотами (положительный — купить, отрицательный — продать)

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

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

Например, при разработке простого растущего портфеля (трендового портфеля) целевой портфель будет иметь значения 0, 1 * S, 2 * S, 3 * S и т. Д., Где S — приращение — денежная стоимость, к которой портфель должен быть увеличен на каждом баре на заданном интервале. Алгоритм OLS добавляет A, B, C,. временные ряды, так что их общая сумма стремится повторить целевой график функции. Для этого алгоритм OLS минимизирует сумму квадратов отклонений между суммой ряда и целевой функцией. Это стандартная статистическая задача.

Не требуется детального понимания работы алгоритма, так как вы можете использовать готовую библиотеку.
Также может случиться, что целевая функция содержит только нулевые значения (плоский портфель). В этом случае необходимо добавить дополнительный предел суммы коэффициента (например, k1 + k2 + k3 +. = 1), чтобы обойти решение уравнения регрессии с нулевыми корнями. Альтернативой является перемещение члена уравнения вправо, что делает его целевой функцией, получающей отношение -1, тогда как остальные члены оптимизируются как обычно. В этом случае мы приравниваем корзину инструментов к выбранному инструменту, создавая таким образом портфель спреда.

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

Мы будем использовать известную математическую библиотеку ALGLIB, адаптированную для MT4. Иногда могут возникнуть проблемы при его установке, поэтому я остановлюсь подробнее на этом. Если на ПК установлено несколько терминалов, очень важно найти правильную папку данных, поскольку компилятор не видит библиотеку, если она находится в папке данных другого терминала..
Установка библиотеки ALGLIB:
скачать библиотеку (https://www.mql5.com/ru/code/11077), распаковать zip-файл; откройте папку «include» и найдите каталог Math внутри; запустить платформу МetaТrader 4, к которой следует добавить библиотеку; выберите команду меню: Файл — Открыть папку данных; откройте MQL4 и включите подпапку; скопировать папку Math в папку «Включить» терминала; проверьте результаты: файлы * .mhq должны находиться внутри MQL4 \ Include \ Math \ Alglib. Первый ключевой этап: преобразование временных рядов из ценовых точек в валюту депозита.

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

Поэтому очень важно точно конвертировать ряды данных, чтобы избежать существенного дисбаланса в портфеле..
Пример функции расчета цены контракта показан ниже:
Эта функция всегда будет использоваться в будущем. Работает с валютными парами, индексами, фьючерсами и CFD. Кроме того, он также учитывает префиксы и постфиксы символов (FX_prefix, FX_postfix), применяемые некоторыми брокерами.

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

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

Каждый раз мы сдвигаемся вправо на один временной интервал в цикле:
В приведенном фрагменте кода zero_time — время левой границы вычисленного интервала, limit_time — время правой границы рассчитанного интервала, Timeframe — количество минут в одном баре рабочего периода, points — общее количество обнаруженных точек в рассчитанном интервале. , В приведенном выше примере используется правило строгого соответствия метки времени. Если столбец для определенной метки времени отсутствует даже для одного символа, позиция пропускается, и выполняется переход к следующему. Управление метками времени очень важно для предварительной подготовки данных, поскольку смещение данных по разным символам может привести к серьезным искажениям в портфеле..

Примерные данные портфолио для трех символов и независимой функции (параболы с квадратным корнем):
ДАТА / ВРЕМЯ AUDJPY GBPUSD EURCAD МОДЕЛЬ 03.08.16 14:00 0 0 0 0 03.08.16 15:00 -61,34 -155 -230,06 10,21 03.08.16 16:00 -82,04 -433 -219 , 12 14,43 03.08.16 17:00 -39,5 -335 -356,68 17,68 03.08.16 18:00 147,05 -230 -516,15 20,41 03.08.16 19:00 169, 73 -278 -567,1 22,82 03.08.16 20:00 -14,81 -400 -703,02 25 03.08.16 21:00 -109,76 -405 -753,15 27 03.08.16 22:00 -21,74 -409 -796,49 28,87 03.08.16 23:00 51,37 -323 -812,04 30,62 04.08.16 00:00 45,43 -367 -753,36 32,27 04.08 .16 01:00 86,88 -274 -807,34 33,85 04.08.16 02:00 130,26 -288 -761,16 35,36 04.08.16 03:00 321,92 -194 -1018,51 36,8 04.08.16 04:00 148,58 -205 -927,15 38,19 04.08.16 05:00 187 -133 -824,26 39,53 04.08.16 06:00 243,08 -249 -918 , 82 40,82 04.08.16 07:00 325,85 -270 -910,46 42,08 04.08.16 08:00 460,02 -476 -907,67 43,3 04.08.16 09:00 341,7 -671 -840,46 44,49.
Теперь, когда мы подготовили данные, пришло время отправить их в модель оптимизации.

Оптимизация должна выполняться с использованием функций LRBuildZ, LSFitLinearC и PCABuildBasis из библиотеки ALGLIB. Эти функции кратко описаны внутри самой библиотеки, а также на официальном веб-сайте проекта: http://www.alglib.net/dataanalysis/linearregression.php и здесь: http://www.alglib.net/dataanalysis/principalcomponentsanalysis. PHP.

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

Параметр Model_Growth устанавливает значение роста для всего интервала расчета (значение, на которое портфель должен расти в валюте депозита). Параметры Model_Absolute и Model_Phase являются необязательными и не имеют значения на текущем этапе. Матрица создана для расчетов (MATRIX). Данные о виртуальной прибыли всех контрактов из массива EQUITY, а также значения целевой функции из массива MODEL загружаются в последнюю строку матрицы.

Количество независимых переменных уравнения регрессии хранится в «переменных». Функция LRBuildZ впоследствии вызывается для выполнения расчета. После этого корни уравнения регрессии записываются в массив ROOTS с помощью функции LRUnpack. Вся сложная математика находится внутри библиотеки, при этом вы можете использовать готовые функции. Основная трудность здесь носит технический характер и связана с правильной настройкой всех вызовов и сохранением данных во время подготовки..

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

Ниже приведен пример более сложной функции, представляющей сумму линейного тренда и гармонических колебаний:
В приведенном выше примере можно управлять размером тренда (используя параметр Model_Growth) и амплитудой колебаний (используя параметр Model_Amplitude). Количество циклов колебаний задается с помощью Model_Cycles, а фазовый сдвиг колебаний — с использованием Model_Phase..
Кроме того, вертикальное смещение должно быть выполнено, чтобы функция была равна нулю в нулевой точке, чтобы гарантировать правильность вычислений:
Эти примеры облегчают разработку пользовательской функции.

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

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

Здесь функция PCABuildBasis вычисляет коэффициенты так, чтобы график портфеля оставался максимально сжатым в интервале расчета:
Если вы чувствуете себя разбитым всеми этими математическими понятиями, не волнуйтесь. Как я уже сказал, вам не нужно разбираться во всех математических деталях для разработки и использования портфелей. Как правило, последовательность этапов выглядит следующим образом:
1 Расчет виртуальной прибыли для символов портфеля с одиночными лотами 2 Расчет значений целевой функции 3 Алгоритм оптимизации лота 4 Нормализация объема портфеля 5 Расчет графика и торговля с использованием портфеля.

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

Поэтому гораздо разумнее проводить нормализацию по цене портфеля или его волатильности..
Ниже приведен простой пример алгоритма нормализации по цене портфеля:
Здесь цена портфеля приравнивается к требуемой через пропорции.

Portfolio_Value — требуемая цена портфеля, total_value — общая цена портфеля с коэффициентами по умолчанию, scale_volume — коэффициент масштабирования, Lots_Digits — емкость лота, LOTS — массив значений лота, подходящих для торговли.
Значения лота формируют окончательную структуру портфеля. Положительные лоты соответствуют длинной позиции, а отрицательные — короткой. Зная структуру портфеля, мы можем построить его график и провести торговые операции с портфелем. Ниже приведен пример структуры портфеля после нормализации:

Символ AUDJPY GBPUSD EURCAD Лот -0,07 -0,11 -0,11.
График портфеля строится только по ценам закрытия и отображается в отдельном подокне индикатора. Чтобы построить график портфеля, нам нужно рассчитать каждый столбец графика таким же образом, как ранее вычислялась виртуальная прибыль для отдельных символов.

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

Я пропустил технические аспекты, связанные с индикаторными буферами, форматированием и тому подобным. Пример готового портфельного индикатора описан в разделе ниже.
Здесь вы можете изучить пример построения графа портфеля (нижнее подокно индикатора) с прикрепленным графиком целевой функции:
Здесь в качестве целевой функции используется парабола квадратного корня, симметричная относительно контрольной точки (Model_Absolute = true). Границы расчетного интервала показаны в виде красных пунктирных линий, в то время как график портфеля имеет тенденцию перемещаться вдоль линии целевой функции как внутри, так и вне расчетного интервала..

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

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

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

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

Ниже приведен пример минималистичного интерфейса для советника:
Иногда необходимо построить не один, а несколько портфелей. В простейшем случае это необходимо для сравнения двух портфелей.

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

В этом фрагменте кода DIM_SIZE устанавливает максимальный размер для хранения портфелей. Структура организована следующим образом: символ — массив символов портфеля, лот — массив лотов для символов портфеля, формула — текстовая строка с уравнением портфеля, направление — направление портфеля (длинный или короткий), фильтр — атрибут фильтра (включен / исключен) , Применение массива структуры более удобно и разумно, чем использование отдельных массивов..
Массив структуры также может быть создан для хранения буферных массивов графа портфолио:

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

Давайте рассмотрим следующую последовательность этапов здесь:
1 Расчет графиков отдельных портфелей 2 Объединение набора портфелей в нулевой точке 3 Реверсирование портфелей относительно нулевого уровня 4 Применение фильтра к набору портфелей 5 Суммирование — формирование суперпортфеля.
Изображение ниже иллюстрирует эти шаги:

Вертикальный сдвиг используется для объединения портфелей. Портфель переворачивается при умножении на -1. Наконец, фильтр применяется путем сортировки и выборки по значениям.

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

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

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

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

Portfolio Multigraph — генератор наборов портфелей с теми же моделями и параметрами и дополнительными опциями для трансформации и фильтрации портфеля, а также создания суперпортфолио.
Portfolio Manager — советник для работы с портфелями и суперпортфолио. Он работает совместно с индикатором портфеля и позволяет открывать и управлять синтетическими позициями, а также имеет функцию коррекции портфеля и режим автоматической торговли на основе графических линий виртуальных ордеров..
Торговые стратегии.
Есть много торговых стратегий, основанных на применении синтетических инструментов.

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

Этот подход хорош для фондового рынка, но он ограничен в использовании на Forex, поскольку валюты, в отличие от акций, обычно не демонстрируют устойчивого роста.
Ниже представлен долгосрочный портфель Уоррена Баффета:
При работе со стандартными инвестиционными портфелями необходимо тщательно оценивать текущее состояние актива, чтобы купить его во время движения цены вниз.
Первый и самый простой вариант для спекулятивной торговли портфелем — это парная торговля, создающая спред из двух коррелирующих символов.

Портфельная торговля в MetaTrader 4.
Магнус ab интегро saeclorum nascitur ordo Publius Вергилий Маро, Эклоги.
Введение.

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

В 1980-х годах исследовательская группа из Morgan Stanley разработала первую стратегию торговли спредами, которая открыла путь для группы нейтральных к рынку стратегий. Современная теория портфеля разнообразна и сложна, поэтому практически невозможно описать все стратегии портфеля в одной статье. Поэтому здесь будет рассмотрен только небольшой спектр спекулятивных стратегий и их возможная реализация в платформе MetaTrader 4..

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

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

Они создаются и продаются немного по-другому. Что касается Forex, то торговля портфелем на самом деле является мультивалютной, однако не все мультивалютные стратегии являются портфельными. Если символы торгуются независимо и динамика общего результата не отслеживается, это торговля несколькими символами.

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

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

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

Портфель может быть представлен следующим уравнением:
A * k1 + B * k2 + C * k3 +. = F,
A, B, C. временные ряды, соответствующие символам портфеля.
к1, к2, к3. являются символьными лотами (положительный — купить, отрицательный — продать)

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

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

Например, при разработке простого растущего портфеля (трендового портфеля) целевой портфель будет иметь значения 0, 1 * S, 2 * S, 3 * S и т. Д., Где S — приращение — денежная стоимость, к которой портфель должен быть увеличен на каждом баре на заданном интервале. Алгоритм OLS добавляет A, B, C,. временные ряды, так что их общая сумма стремится повторить целевой график функции. Для этого алгоритм OLS минимизирует сумму квадратов отклонений между суммой ряда и целевой функцией. Это стандартная статистическая задача.

Не требуется детального понимания работы алгоритма, так как вы можете использовать готовую библиотеку.
Также может случиться, что целевая функция содержит только нулевые значения (плоский портфель). В этом случае необходимо добавить дополнительный предел суммы коэффициента (например, k1 + k2 + k3 +. = 1), чтобы обойти решение уравнения регрессии с нулевыми корнями. Альтернативой является перемещение члена уравнения вправо, что делает его целевой функцией, получающей отношение -1, тогда как остальные члены оптимизируются как обычно. В этом случае мы приравниваем корзину инструментов к выбранному инструменту, создавая таким образом портфель спреда.

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

Мы будем использовать известную математическую библиотеку ALGLIB, адаптированную для MT4. Иногда могут возникнуть проблемы при его установке, поэтому я остановлюсь подробнее на этом. Если на ПК установлено несколько терминалов, очень важно найти правильную папку данных, поскольку компилятор не видит библиотеку, если она находится в папке данных другого терминала..
Установка библиотеки ALGLIB:
скачать библиотеку (https://www.mql5.com/ru/code/11077), распаковать zip-файл; откройте папку «include» и найдите каталог Math внутри; запустить платформу МetaТrader 4, к которой следует добавить библиотеку; выберите команду меню: Файл — Открыть папку данных; откройте MQL4 и включите подпапку; скопировать папку Math в папку «Включить» терминала; проверьте результаты: файлы * .mhq должны находиться внутри MQL4 \ Include \ Math \ Alglib. Первый ключевой этап: преобразование временных рядов из ценовых точек в валюту депозита.

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

Поэтому очень важно точно конвертировать ряды данных, чтобы избежать существенного дисбаланса в портфеле..
Пример функции расчета цены контракта показан ниже:
Эта функция всегда будет использоваться в будущем. Работает с валютными парами, индексами, фьючерсами и CFD. Кроме того, он также учитывает префиксы и постфиксы символов (FX_prefix, FX_postfix), применяемые некоторыми брокерами.

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

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

Каждый раз мы сдвигаемся вправо на один временной интервал в цикле:
В приведенном фрагменте кода zero_time — время левой границы вычисленного интервала, limit_time — время правой границы рассчитанного интервала, Timeframe — количество минут в одном баре рабочего периода, points — общее количество обнаруженных точек в рассчитанном интервале. , В приведенном выше примере используется правило строгого соответствия метки времени. Если столбец для определенной метки времени отсутствует даже для одного символа, позиция пропускается, и выполняется переход к следующему. Управление метками времени очень важно для предварительной подготовки данных, поскольку смещение данных по разным символам может привести к серьезным искажениям в портфеле..

Примерные данные портфолио для трех символов и независимой функции (параболы с квадратным корнем):
ДАТА / ВРЕМЯ AUDJPY GBPUSD EURCAD МОДЕЛЬ 03.08.16 14:00 0 0 0 0 03.08.16 15:00 -61,34 -155 -230,06 10,21 03.08.16 16:00 -82,04 -433 -219 , 12 14,43 03.08.16 17:00 -39,5 -335 -356,68 17,68 03.08.16 18:00 147,05 -230 -516,15 20,41 03.08.16 19:00 169, 73 -278 -567,1 22,82 03.08.16 20:00 -14,81 -400 -703,02 25 03.08.16 21:00 -109,76 -405 -753,15 27 03.08.16 22:00 -21,74 -409 -796,49 28,87 03.08.16 23:00 51,37 -323 -812,04 30,62 04.08.16 00:00 45,43 -367 -753,36 32,27 04.08 .16 01:00 86,88 -274 -807,34 33,85 04.08.16 02:00 130,26 -288 -761,16 35,36 04.08.16 03:00 321,92 -194 -1018,51 36,8 04.08.16 04:00 148,58 -205 -927,15 38,19 04.08.16 05:00 187 -133 -824,26 39,53 04.08.16 06:00 243,08 -249 -918 , 82 40,82 04.08.16 07:00 325,85 -270 -910,46 42,08 04.08.16 08:00 460,02 -476 -907,67 43,3 04.08.16 09:00 341,7 -671 -840,46 44,49.
Теперь, когда мы подготовили данные, пришло время отправить их в модель оптимизации.

Оптимизация должна выполняться с использованием функций LRBuildZ, LSFitLinearC и PCABuildBasis из библиотеки ALGLIB. Эти функции кратко описаны внутри самой библиотеки, а также на официальном веб-сайте проекта: http://www.alglib.net/dataanalysis/linearregression.php и здесь: http://www.alglib.net/dataanalysis/principalcomponentsanalysis. PHP.

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

Параметр Model_Growth устанавливает значение роста для всего интервала расчета (значение, на которое портфель должен расти в валюте депозита). Параметры Model_Absolute и Model_Phase являются необязательными и не имеют значения на текущем этапе. Матрица создана для расчетов (MATRIX). Данные о виртуальной прибыли всех контрактов из массива EQUITY, а также значения целевой функции из массива MODEL загружаются в последнюю строку матрицы.

Количество независимых переменных уравнения регрессии хранится в «переменных». Функция LRBuildZ впоследствии вызывается для выполнения расчета. После этого корни уравнения регрессии записываются в массив ROOTS с помощью функции LRUnpack. Вся сложная математика находится внутри библиотеки, при этом вы можете использовать готовые функции. Основная трудность здесь носит технический характер и связана с правильной настройкой всех вызовов и сохранением данных во время подготовки..

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

Ниже приведен пример более сложной функции, представляющей сумму линейного тренда и гармонических колебаний:
В приведенном выше примере можно управлять размером тренда (используя параметр Model_Growth) и амплитудой колебаний (используя параметр Model_Amplitude). Количество циклов колебаний задается с помощью Model_Cycles, а фазовый сдвиг колебаний — с использованием Model_Phase..
Кроме того, вертикальное смещение должно быть выполнено, чтобы функция была равна нулю в нулевой точке, чтобы гарантировать правильность вычислений:
Эти примеры облегчают разработку пользовательской функции.

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

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

Здесь функция PCABuildBasis вычисляет коэффициенты так, чтобы график портфеля оставался максимально сжатым в интервале расчета:
Если вы чувствуете себя разбитым всеми этими математическими понятиями, не волнуйтесь. Как я уже сказал, вам не нужно разбираться во всех математических деталях для разработки и использования портфелей. Как правило, последовательность этапов выглядит следующим образом:
1 Расчет виртуальной прибыли для символов портфеля с одиночными лотами 2 Расчет значений целевой функции 3 Алгоритм оптимизации лота 4 Нормализация объема портфеля 5 Расчет графика и торговля с использованием портфеля.

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

Поэтому гораздо разумнее проводить нормализацию по цене портфеля или его волатильности..
Ниже приведен простой пример алгоритма нормализации по цене портфеля:
Здесь цена портфеля приравнивается к требуемой через пропорции.

Portfolio_Value — требуемая цена портфеля, total_value — общая цена портфеля с коэффициентами по умолчанию, scale_volume — коэффициент масштабирования, Lots_Digits — емкость лота, LOTS — массив значений лота, подходящих для торговли.
Значения лота формируют окончательную структуру портфеля. Положительные лоты соответствуют длинной позиции, а отрицательные — короткой. Зная структуру портфеля, мы можем построить его график и провести торговые операции с портфелем. Ниже приведен пример структуры портфеля после нормализации:

Символ AUDJPY GBPUSD EURCAD Лот -0,07 -0,11 -0,11.
График портфеля строится только по ценам закрытия и отображается в отдельном подокне индикатора. Чтобы построить график портфеля, нам нужно рассчитать каждый столбец графика таким же образом, как ранее вычислялась виртуальная прибыль для отдельных символов.

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

Я пропустил технические аспекты, связанные с индикаторными буферами, форматированием и тому подобным. Пример готового портфельного индикатора описан в разделе ниже.
Здесь вы можете изучить пример построения графа портфеля (нижнее подокно индикатора) с прикрепленным графиком целевой функции:
Здесь в качестве целевой функции используется парабола квадратного корня, симметричная относительно контрольной точки (Model_Absolute = true). Границы расчетного интервала показаны в виде красных пунктирных линий, в то время как график портфеля имеет тенденцию перемещаться вдоль линии целевой функции как внутри, так и вне расчетного интервала..

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

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

Портфельная торговля в MetaTrader 4 Статьи по MQL4 валютный портфель Forex

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

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

Ниже приведен пример минималистичного интерфейса для советника:
Иногда необходимо построить не один, а несколько портфелей. В простейшем случае это необходимо для сравнения двух портфелей.

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

В этом фрагменте кода DIM_SIZE устанавливает максимальный размер для хранения портфелей. Структура организована следующим образом: символ — массив символов портфеля, лот — массив лотов для символов портфеля, формула — текстовая строка с уравнением портфеля, направление — направление портфеля (длинный или короткий), фильтр — атрибут фильтра (включен / исключен) , Применение массива структуры более удобно и разумно, чем использование отдельных массивов..
Массив структуры также может быть создан для хранения буферных массивов графа портфолио:

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

Давайте рассмотрим следующую последовательность этапов здесь:
1 Расчет графиков отдельных портфелей 2 Объединение набора портфелей в нулевой точке 3 Реверсирование портфелей относительно нулевого уровня 4 Применение фильтра к набору портфелей 5 Суммирование — формирование суперпортфеля.
Изображение ниже иллюстрирует эти шаги:

Вертикальный сдвиг используется для объединения портфелей. Портфель переворачивается при умножении на -1. Наконец, фильтр применяется путем сортировки и выборки по значениям.

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

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

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

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

Portfolio Multigraph — генератор наборов портфелей с теми же моделями и параметрами и дополнительными опциями для трансформации и фильтрации портфеля, а также создания суперпортфолио.
Portfolio Manager — советник для работы с портфелями и суперпортфолио. Он работает совместно с индикатором портфеля и позволяет открывать и управлять синтетическими позициями, а также имеет функцию коррекции портфеля и режим автоматической торговли на основе графических линий виртуальных ордеров..
Торговые стратегии.
Есть много торговых стратегий, основанных на применении синтетических инструментов.

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

Этот подход хорош для фондового рынка, но он ограничен в использовании на Forex, поскольку валюты, в отличие от акций, обычно не демонстрируют устойчивого роста.
Ниже представлен долгосрочный портфель Уоррена Баффета:
При работе со стандартными инвестиционными портфелями необходимо тщательно оценивать текущее состояние актива, чтобы купить его во время движения цены вниз.
Первый и самый простой вариант для спекулятивной торговли портфелем — это парная торговля, создающая спред из двух коррелирующих символов.

На Форексе этот подход значительно ограничен, поскольку даже сильно коррелирующие валютные пары не имеют коинтеграции и, следовательно, могут значительно расходиться со временем. В этом случае мы имеем дело с «разбитым спредом». Кроме того, такая торговля парами превращается в торговлю синтетическим кросс-курсом, поскольку пары со единой валютой обычно включаются в спред.

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

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

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

Спреды также могут состоять из рыночных индексов и фьючерсов, но для этого необходимо учитывать особенности биржевой торговли..
Тупиковая ветвь торговли спредом представлена ​​мультиблоком, когда выбираются циклически связанные валютные пары (например, EURUSD-GBPUSD-EURGBP) и используются для формирования сбалансированного спреда. В этом случае мы имеем идеальный спред, которым невозможно торговать, поскольку общие спреды и комиссии слишком высоки. Если мы попытаемся немного разбалансировать лоты, график станет более трендовым, что противоречит спред-трейдингу, в то время как затраты остаются достаточно высокими, что делает этот подход бессмысленным.
Ниже приведен пример сбалансированного мультиблокировки.

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

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

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

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

Чтобы разработать настройку прорыва спреда, нам нужно создать очень компактный краткосрочный спред с минимальной волатильностью в ожидании сильного движения. Чем больше мы сжимаем волатильность портфеля, тем сильнее он «взрывается». Для ускоренного прорыва спреда можно сформировать настройку перед началом торговых сессий и перед новостями, выбирая определенные интервалы тихого рынка. Метод оптимизации PCA лучше всего подходит для сжатия волатильности. В этой настройке мы заранее не знаем, в каком направлении должен произойти прорыв, поэтому вход уже определен при переходе от границ спреда..

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

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

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

Если бы на рынках было нормальное распределение Гаусса, основанный на времени закон квадратного корня всегда работал бы идеально, но поскольку распределение рынка является фрактальным и нестационарным по своей природе, требуется ситуативная корректировка.
Вы можете найти больше информации о распределении рынка в следующих книгах Эдгара Питерса:
Хаос и порядок на рынках капитала Анализ фрактальных рынков.
Ниже приведен пример того, как портфель отходит от параболической функции:
Эта установка идеально подходит для адаптации к среднесрочной волатильности.

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

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

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

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

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

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

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

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

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

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

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

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

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

Кроме того, по мере развития ситуации трейдеры могут адаптировать свои портфели к новым рыночным условиям..
Недостатки торговли портфелем: стандартные отложенные ордера не применимы, более жесткие требования к минимальному объему, большие спреды на М30 и более низкие графики, затрудненный внутридневной скальпинг, отсутствие данных OHLC, не все индикаторы могут быть применены к портфелям.
Вообще, это довольно специфический подход в трейдинге. Здесь мы только сделали вводный обзор свойств портфеля и методов работы.

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

Похожие статьи

Оставить комментарий

XHTML: Разрешенные теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>