Торговая система Morton+ характерные особенности использования

Лучшие брокеры бинарных опционов за 2020 год:
  • Бинариум
    Бинариум

    1 место — самый лучший брокер бинарных опционов за 3 года!
    Бесплатное обучение и демо-счет на любую валюту на сумму 1000 $.
    Заберите свой бонус за регистрацию:

Торговые системы: особенности разработки

Дискреционный трейдинг

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

— со временем можно выстроить свою эффективную технику с учетом собственных особенностей и знаний. Недостатки:

— часто присутствует психологическая составляющая, которая не дает торговать с максимальной эффективностью;

— дискреционный трейдинг нестабилен. Мало кому из трейдеров удается зарабатывать каждый месяц хорошо зарабатывать.

Системный трейдинг

— в данном виде трейдинга нет лишних эмоций, которые давят на психику и мешают торговать;

— вероятные убытки можно прогнозировать и, соответственно, защищаться от повышенных рисков;

— прибыль можно получать при движении рынка в любом из направлений. Это позволяет быть «на коне» в любой текущей ситуации;

— при долгосрочной торговле можно рассчитывать на максимальную прибыль. Недостатки:

Лучшие платформы бинарных опционов за 2020 год:
  • Бинариум
    Бинариум

    1 место — самый лучший брокер бинарных опционов за 3 года!
    Бесплатное обучение и демо-счет на любую валюту на сумму 1000 $.
    Заберите свой бонус за регистрацию:

— если трейдер не имеет достаточного опыта, то ему приходится много времени проводить в убытках;

— нет возможности оперативно реагировать на новости и события;

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

Особенности создания торговой стратегии

• Точка входа – это основной критерий для входа на рынок. Здесь у каждой стратегии свои тонкости. К примеру, вам необходимо выставить торговый фильтр для длинной позиции. Какие параметры? Здесь все просто – дневной таймфрейм, 10-ти или 30-ти периодная скользящая, указывающая на восходящий тренд (цена располагается между скользящими), рынок S&P 500 говорит о необходимости покупки, а торговля ведется вблизи уровня поддержки.

• Торговые фильтры представляют собой целую систему условий, которые должны быть подтверждены рынком для исполнения сделки. Торговый фильтр играет роль подушки безопасности для вашей точки входа. И еще, при входе в рынок желательно прописывать типы ордеров, которые будут участвовать в открытии позиции. 6) Определиться с правилами выхода из рынка. Данный этап не менее важен. Вы должны четко представлять, когда необходимо покинуть позицию. Наличие в вашей стратегии данного пункта является обязательным. К примеру, если вы торгуете акциями, то убытка не будет до тех пор, пока позиция открыта. Следовательно, от вашего решения по закрытию позиции зависит конечный размер депозита. Но при разработке правил для выхода необходимо учитывать, что в торговле всегда есть два пути – убыточный и доходный. Вы должны уметь своевременно ограничить и зафиксировать полученную прибыль или финансовые потери. Какие критерии необходимо учитывать? Их несколько – уровни трейлинг-стоп и стоп-лосс, стратегию управления позицией, а также время закрытия из позиции.

Адаптивные торговые системы и их использование в терминале MetaTrader 5

Введение

Сотни тысяч трейдеров во всем мире используют торговые платформы, разработанные MetaQuotes Software Corp. Ключевой фактор успеха — технологическое превосходство, в основе которого лежит многолетний опыт и лучшие программные решения.

Многие уже оценили новые возможности, ставшие доступными с появлением нового языка MQL5, который отличается высокой скоростью работы и возможностью применения объектно-ориентированного программирования. Кроме того, с появлением мультивалютного тестера стратегий в торговом терминале MetaTrader 5 трейдеры получили уникальные инструменты для разработки, изучения и использования сложных торговых систем.

Осенью начнется Automated Trading Championship 2020, в котором примут участие тысячи торговых роботов, написанных на MQL5. Победит эксперт, заработавший максимальную прибыль за время проведения соревнования. Но какая торговая стратегия окажется наиболее эффективной?

Тестер стратегий терминала MetaTrader 5 позволяет найти наилучший набор параметров, при которых торговая система обеспечивала максимальную прибыль на указанном временном интервале. Но как это сделать в реальном времени? Идея об использовании виртуальной торговли нескольких стратегий в советнике обсуждалась в статье «Конкурс советников внутри советника», в которой приведена ее реализация на MQL4.

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

1. Особенности адаптивных торговых стратегий

Рынки постоянно меняются. Торговые стратегии нуждаются в адаптации к текущим рыночным условиям.

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

На рисунке 1 представлены графики изменения средств на счете (equity) десяти советников (MA_3. MA_93), каждый из которых торговал по стратегии скользящих средних, но с разными периодами (3,13. 93). Тестирование стратегий осуществлялось на валютной паре EURUSD H1, интервал тестирования 4.01.2020-20.08.2020.

Рисунок 1. Графики изменения средств на счете (equity) десяти стратегий

Как видно из рис. 1, в первые две недели работы все советники показывали приблизительно одинаковые результаты, но со временем они стали существенно различаться по заработанной прибыли. В конце периода тестирования в тройке лидеров оказались советники, которые использовали в торговле скользящие средние с периодами, равными 63, 53 и 43.

Рынок сам выбрал лучших. Почему бы не следовать за его выбором? Что получится, если все эти десять стратегий объединить в одном советнике, обеспечить каждой стратегии возможность ведения «виртуальной» торговли, а в реальной торговле периодически (например, в начале каждого нового бара) определять наилучшую стратегию и вести реальную торговлю в соответствии с ее сигналами?

Результаты тестирования полученной адаптивной стратегии приведены на рисунке 2. Динамика графика средств на счете при адаптивной торговле выделена красным цветом. Обратите внимание на то, что более половины времени форма динамики изменения средств на счете для адаптивной стратегии повторяет форму стратегии MA_63, которая в конечном счете, оказалась победителем.

Рисунок 2. Графики изменения средств на счете адаптивной стратегии, использующей сигналы 10 торговых систем

Графики изменения баланса имеют похожую динамику (рис. 3):

Рисунок 3. Графики изменения баланса адаптивной стратегии, использующей сигналы 10 торговых систем

Если на текущий момент ни одна из стратегий не является прибыльной, адаптивная система не должна вести торговлю. Пример такого случая приведен на рис. 4 (интервал с 4 по 22 января 2020г).

Рисунок 4. Временной интервал, когда адаптивная стратегия прекратила открытие новых позиций из-за отсутствия прибыльных стратегий

С начала января 2020 лидером по результативности была стратегия MA_3. Поскольку на тот момент MA_3 (синяя) заработала больше всего средств, то адаптивная стратегия (красная) следовала за ее сигналами. В период с 8 по 20 января все рассматриваемые торговые стратегии были в минусе, поэтому адаптивная стратегия не открывала новых торговых позиций.

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

2. Программная реализация адаптивной торговой стратегии

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

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

Эта статья вас УДИВИТ:  Бинарные опционы - зарабатываем на Бернанке

Далее мы рассмотрим код двух его потомков — класса CStrategyMA и класса CStrategyStoch, представляющих собой стратегии торговли по скользящим средним и стохастическому осциллятору. Разобравшись в их структуре, вы легко сможете написать и добавлять свои собственные классы, реализующие ваши стратегии.

2.1. Код советника

Код эксперта выглядит очень просто:

Первые три строчки характеризуют свойства программ, далее следует директива #include, указывающая препроцессору на необходимость включения файла CAdaptiveStrategy.mqh. Угловые скобки обозначают, что этот файл следует взять из стандартного каталога (обычно это каталог_терминала\MQL5\Include).

В следующей строке декларируется объект Adaptive_Expert (экземпляр класса CAdaptiveStrategy), а код функций OnInit, OnDeinit и OnTick эксперта состоит из вызовов соответствующих функций Expert_OnInit, Expert_OnDeInit и Expert_OnTick объекта Adaptive_Expert.

2.2. Класс CAdaptiveStrategy

Класс адаптивного советника CAdaptiveStrategy расположен в файле CAdaptiveStrategy.mqh. Начнем с включаемых файлов:

Мы включаем файл ArrayObj.mqh, поскольку для работы с классами различных стратегий удобно использовать объект класса CArrayObj, представляющий собой динамический массив указателей на экземпляры классов, порожденными от базового класса CObject и его наследников. Этим объектом будет массив m_all_strategies, он будет выступать роли «контейнера» торговых стратегий.

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

Для запроса свойств текущей позиции и для совершения торговых операций мы будем использовать классы CPositionInfo и CTrade Стандартной библиотеки, поэтому включаем файлы PositionInfo.mqh и Trade.mqh.

Рассмотрим структуру класса CAdaptiveStrategy.

Для реализации единого подхода к объектам различных классов торговые стратегии (точнее экземпляры их классов) хранятся в динамическом массиве m_all_strategies (типа CArrayObj), который выступает в роли «контейнера» классов стратегий. По этой причине базовый класс торговых стратегий SampleStrategy порожден от класса CObject.

Функция ProceedSignalReal реализует «синхронизацию» направления и объема реальной позиции с заданным направлением с заданным объемом:

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

Функция RealPositionDirection запрашивает параметры реальной открытой позиции и возвращает ее направление:

Теперь перейдем к рассмотрению основных функций класса СAdaptiveStrategy.

Начнем с функции Expert_OnInit:

В функции Expert_OnInit подготавливается набор торговых стратегий. Сначала создается объект динамического массива m_all_strategies.

В данном случае мы создали десять экземпляров класса CStrategyMA. Для каждого из них произвели инициализацию (в данном случае задали различные периоды и разрешили «виртуальную» торговлю), вызвав функцию Initialization.

Затем при помощи функции SetStrategyInfo мы задали финансовый инструмент, имя стратегии и комментарий.

При необходимости, при помощи функции Set_Stops(TP,SL) можно указать значения (в пунктах) Take Profit и Stop Loss, которые будут исполняться в процессе «виртуальной» торговли. У нас эта строка закомментирована.

После того, как класс стратегии создан и настроен, мы добавляем его в контейнер m_all_strategies.

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

Вместо десяти указанных нами средних (3,13,23. 93) можно добавить целый веер из сотни скользящих средних (экземпляров класса CStrategyMA):

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

В таком случае в контейнере будет содержаться 10 стратегий со скользящими средними и 5 стратегий стохастического осциллятора.

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

Завершается функция Expert_OnInit выводом списка всех стратегий, содержащихся в контейнере m_all_strategies. Отметим, что здесь все стратегии в контейнере мы рассматриваем как потомков класса CSampleStrategy. Классы торговых стратегий CStrategyMA и CStrategyStoch также являются его потомками.

Тот же фокус используется в функции Expert_OnDeInit. Для каждой из стратегий в контейнере мы вызываем функцию SaveVirtualDeals, которая сохраняет историю проведенных виртуальных сделок.

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

Если вас не интересуют виртуальные сделки, совершенные стратегиями, уберите строку с вызовом tStrategy.SaveVirtualDeals. Напомню, что при использовании тестера, файлы сохраняются в каталоге: /каталог_тестера/Files/.

Рассмотрим функцию Expert_OnTick класса CAdaptiveStrategy, которая вызывается каждый раз при появлении нового тика:

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

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

Теперь среди всех стратегий, находящихся в массиве m_all_strategies нужно найти наиболее успешную. Для этого мы использовали массив Performance[], в него заносятся значения, которые каждая из стратегий возвращает функцией StrategyPerformance(). В базовом классе CSampleStrategy эта функция представляет собой разность между текущими значениями «виртуальных» Equity и Balance.

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

После этого запрашивается направление виртуальной позиции этой стратегии (best_direction). Если оно отлично от текущего направления реальной позиции, то производится корректировка (при помощи функции ProceedSignalReal) текущего направления реальной позиции в соответствии с направлением best_direction.

2.3. Класс CSampleStrategy

Стратегии, помещенные в контейнер m_all_strategies, рассматривались нами как потомки класса CSampleStrategy.

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

Приведем структуру этого класса.

Подробное описание его реализации мы опустим, детали вы можете найти в файле CSampleStrategy.mqh. Там же расположена функция проверки нового бара IsNewBar.

3. Классы торговых стратегий

В этом разделе мы рассмотрим структуру классов торговых стратегий, используемых в адаптивном советнике.

3.1. Класс CStrategyMA — стратегия торговли по скользящим средним

Класс CStrategyMA является потомком класса CSampleStrategy, в котором реализован весь функционал виртуальной торговли.

В секции protected объявлены внутренние переменные, которые будут использоваться в классе стратегии. Это переменная m_handle — хэндл индикатора iMA, m_period — период средней, и массив m_values[], который будет использован в функции CheckTradeConditions для получения текущих значений индикатора.

В секции public есть три функции, обеспечивающие реализацию торговой стратегии.

  • Функция Initialization. Здесь стратегия инициализируется. Если требуется создать индикаторы, создавайте их здесь.
  • ФункцияDeinitialization. Здесь стратегия деинициализируется. Здесь производится освобождение индикаторных хэндлов.
  • ФункцияСheckTradeConditions. Здесь стратегия проверяет условия торговли и генерирует торговые сигналы, на основе которых ведется виртуальная торговля. Для проведения виртуальных торговых операций вызывается функция SetSignalState родительского класса CStrategy, в которую передается один из четырех торговых сигналов:
  1. Сигнал на открытие длинной позиции (SIGNAL_OPEN_LONG)
  2. Сигнал на открытие короткой позиции (SIGNAL_OPEN_SHORT)
  3. Сигнал на закрытие длинной позиции (SIGNAL_CLOSE_LONG)
  4. Сигнал на закрытие короткой позиции (SIGNAL_CLOSE_SHORT)

Принцип работы очень прост: по состояниям индикаторов и цен определяется тип сигнала (new_state), запрашивается текущее состояние виртуальной стратегии (при помощи функции GetSignalState) и если они не равны, вызывается функция SetSignalState, которая производит «корректировку» виртуальной позиции.

Эта статья вас УДИВИТ:  Эмоции проигравшего трейдера.

3.2. Класс CStrategyStoch — стратегия торговли по стохастику

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

Как видно, структура класса CStrategyStoch отличается от класса CStrategyMA лишь функцией инициализации (другие параметры), типом используемого индикатора и торговыми сигналами.

Таким образом, для использования ваших стратегий в адаптивном советнике нужно переписать их в виде классов такого типа и загрузить их в контейнер m_all_strategies.

4. Результаты исследования адаптивных торговых стратегий

В данном разделе мы рассмотрим некоторые аспекты практического применения адаптивных стратегий и методы их улучшения.

4.1. Дополнение системы стратегиями с инверсией сигналов

Скользящие средние плохо работают при отсутствии трендов. Мы уже сталкивались с этой ситуацией — на рисунке 3 видно, что в период с 8 по 20 января тренда не было, поэтому все 10 стратегий, торгующих по скользящим средним, были в виртуальной «просадке». Адаптивная система прекратила торговлю из-за отсутствия стратегии с положительным количеством заработанных средств. Можно ли сделать так, чтобы избежать ухода в минус?

Добавим к нашим десяти стратегиям MA_3, MA_13, . MA_93 еще десять классов CStrategyMAinv, торговые сигналы которых перевернуты (условия те же, но SIGNAL_OPEN_LONG/SIGNAL_OPEN_SHORT и SIGNAL_CLOSE_LONG/SIGNAL_CLOSE_SHORT в этом классе поменялись местами). Таким образом, наряду с десяти трендовыми стратегиями (экземпляры класса CStrategyMA) мы имеем также десять контр-трендовых стратегий (экземпляторы класса CStrategyMAinv).

Результаты использования адаптивной системы, состоящей из двадцати стратегий, представлены на рис. 5.

Рисунок 5. Графики изменения средств на счете адаптивной стратегии, использующей сигналы 20 торговых систем: 10 средних CAdaptiveMA и 10 «зеркальных» CAdaptiveMAinv

Как видно из рис. 5, в период, когда все стратегии CAdaptiveMA были в минусе, следование за стратегиями CAdaptiveMAinv позволило советнику избежать нежелательных просадок в самом начале торговли.

Рисунок 6. Временной интервал, когда адаптивная стратегия использовала сигналы «контр-трендовых» стратегий CAdaptiveMAinv

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

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

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

4.2. Имеет ли смысл инвертировать сигналы наихудшей стратегии?

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

Можно ли простым изменением торговых сигналов убыточную стратегию превратить в прибыльную? Для ответа на этот вопрос нужно в функции Expert_OnTick() класса CAdaptiveStrategy заменить ArrayMaximum на ArrayMinimum и реализовать замену направлений путем умножения значения переменной BestDirection на -1.

Также нужно закомментировать ограничение реальной торговли в случае отрицательной эффективности (поскольку мы рассматриваем результативность наихудшей):

График изменения средств адаптивного советника, торгующего по сигналам, обратным сигналам наихудшей стратегии приведен на рис. 7:

Рисунок 7. Графики изменения средств на счете десяти стратегий и адаптивной системы, торгующей по сигналам, противоположным сигналам наихудшей системы

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

Копирование (и обращение) сигналов наихудшей стратегии не приводит к улучшению эффективности торговли.

4.2. Почему веер скользящих средних не так эффективен, как кажется?

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

Для этого нужно слегка изменить код в классе CAdaptiveStrategy:

Однако следует понимать, что близкие скользящие средние неизбежно будут пересекаться, лидер будет меняться, а адаптивная система будет переключать свои состояния и открывать/закрывать позиции чаще, чем нужно. Как следствие, получим ухудшение характеристик адаптивной системы. Вы можете убедиться в этом самостоятельно, сравнив статистические характеристики систем (вкладка «Результаты» в тестере).

Не стоит строить адаптивные системы из большого количества стратегий с очень близкими параметрами.

5. Над чем следует подумать

В контейнер m_all_strategies можно поместить тысячи вариантов предложенных стратегий, можно даже добавить все известные стратегии с разными параметрами, однако для победы в Чемпионате Automated Trading Championship 2020 необходимо поработать над системой управления капиталом. Напомним, при проведении тестирования на истории (и в коде классов) мы использовали объем, равный 0.1 лота.

5.1 Как повысить прибыльность адаптивного советника

В классе CSampleStrategy есть виртуальная функция-заглушка MoneyManagement_CalculateLots:

Для управления количеством лотов можно использовать статистическую информацию о результатах и характеристиках виртуальных сделок, которая протоколируется в массиве m_deals_history[].

При необходимости увеличить количество лотов (например, удвоить, если последние виртуальные сделки в m_deals_history[] были успешными или уменьшить) следует соответствующим образом изменить возвращаемое значение.

5.2 Использование статистики сделок для расчета результативности

Для расчета результативности стратегий в классе CSampleStrategy реализована функция StrategyPerformance().

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

Расчет эффективностей входов, выходов и эффективности сделки (поля entry_eff, exit_eff и trade_eff структур массива m_deals_history[]) производится автоматически при виртуальной торговле (см. класс CSampeStrategy). Эту статистическую информацию можно использовать для конструирования своих, более сложных показателей результативности стратегии.

Например, в качестве характеристики эффективности можно взять среднюю прибыль последних трех сделок (используем поле pos_Profit из архива сделок m_deals_history[]):

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

5.3 Использование Take Profit и Stop Loss

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

В нашем примере (см. 2.2, функция инициализации классов скользящих средних) функция установки стопов в виртуальной торговле закомментирована.

5.4. Периодическое обнуление накопленной виртуальной прибыли

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

Эта статья вас УДИВИТ:  My-Trades.net — отзывы трейдеров. Развод или нет

Для этого в классе CSampleStrategy предусмотрены функции:

CheckPoint такого рода можно применять периодически, например после завершения каждых N баров.

5.4. Чудес не бывает

Следует помнить, что адаптивная система не является граалем (USDJPY H1, 4.01.2020-20.08.2020):

Рисунок 8. График изменения баланса и средств адаптивной системы, торгующей по сигналам наилучшей из 10 стратегий (USDJPY H1)

Графики динамики средств всех стратегий представлены на рис 9.

Рисунок 9. Графики изменения средств на счете адаптивной системы, построенной на базе 10 стратегий (USDJPY H1)

Если в адаптивной системе нет прибыльных стратегий, то их использование не будет эффективным. Используйте прибыльные стратегии.

Следует рассмотреть еще один важный и интересный момент. Обратите внимание на поведение адаптивной стратегии в самом начале торговли:

Рисунок 10. Графики изменения средств на счете 10 стратегий адаптивной системы

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

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

В самом начале, когда рынок еще не определился с наилучшей стратегией, лучше воздержаться от реальной торговли.

Выводы

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

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

Morton Trade Systems

Дубровский Фёдор
Посмотреть профиль
Отправить личное сообщение для Дубровский Фёдор
Посетить домашнюю страницу Дубровский Фёдор
Найти ещё сообщения от Дубровский Фёдор

Торговая стратегия Morton была создана примерно в 2020 году(достоверно не известно). Впервые о стратегии я узнал на иностранном форуме про Форекс, где трейдер под ником Morton рассказывал о ней. Поэтому стратегия так и называется, в честь этого трейдера.
Индикаторы, которые входят в её состав, начали массово применять в различных системах, поэтому, скорее всего в данной стратегии вы ничего не увидите нового. Стратегия предназначена для торговли на таких валютных парах как евро/доллар, фунт/доллар, доллар/канадец.
Если взглянуть на систему в целом, то ее можно применять на любой валютной паре. Торговля ведется на часовом графике, хотя можно изменить как в меньшую, так и в большую сторону. Поскольку стратегия трендовая, то она для скальпинга не пригодна!

Установка торговой стратегии

Перед началом работы ее необходимо установить. Для этого скачайте индикаторы с шаблоном в конце статьи и через меню файл откройте каталог данных в вашем торговом терминале Meta Trader 4. Поместите индикаторы в папку под названием Indicators, а шаблон в папку Template. После вам следует перезапустить ваш терминал. Далее в списке шаблонов выберете шаблон под названием Morton Trade. Если в процессе установки вы не допустили ошибок, то график терминала изменится так:

Кратко по стратегии, индикаторах, возможной оптимизации:

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

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

• Heiken Ashi – индикатор выглядит в виде сечей красного и голубого цвета. В стратегии отвечает за функцию фильтра тренда. Обычно если хвост свечи длинный – это указывает на силу движения рынка. Если свечи синего цвета – тренд бычий, красного – тренд медвежий. Хвос свечи всегда указывает в сторону движения рынка, в отличии от обычной свечи.

• Signal – индикатор находится на графике с ценой и рисует красные и синие стрелки вверх или вниз. В стратегии отвечает за нахождения сигнала. Суть индикатора заключается в том, что при пересечении скользящих средних, которые заданы в самом индикаторе, появляется стрелка в ту или иную сторону. Поддается оптимизации путем изменения параметров скользящих средних в самом индикаторе.

• Top Bottom – индикатор находится на графике цены и появляется в виде бомб красного цвета. Данный индикатор символизирует об скором развороте. В стратегии используется для выхода с позиции. Красная бомба сигнализирует о развороте вниз, а синяя о развороте вверх.

• Forex Signal30 – индикатор находится в первом дополнительном окне в виде крестиков красного и синего цвета. В стратегии отвечает за фильтр тренда. Если крестик красного цвета – тренд медвежий, если синего – тренд бычий. К сожалению, все настройки закрыты, и вы сможете сменить только цвет индикатора.

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

Сигналы торговой стратегии:

Входим в позицию на покупку при одновременном соблюдении ряда таких условий:

1. Индикатор Signal покажет стрелку вверх.
2. Зеленая линия индикатора Moving Average будет находится над красной линией индикатора.
3. Цвет свечи индикатора Heiken Ashi должен быть голубого цвета.
4. Показания индикатора Forex Signal30 отображены, синим цветом.

Входим в позицию только по закрытой свече! Сигналы индикаторов могут перерисовывается. Пример смотрим на картинке:

Входим в позицию на продажу при одновременном соблюдении ряда таких условий:

1. Индикатор Signal рисует стрелку вниз.
2. Зеленая линия индикатора Moving Average находится под красной линией индикатора.
3. Цвет свечи индикатора Heiken Ashi красного цвета.
4. Показания индикатора Forex Signal30 отображены, красным цветом.

Входим в позицию только по закрытой свече! Сигналы индикаторов могут перерисовывается. Пример смотрим на картинке:

Установка стоп приказа

Стоп приказ устанавливаем на локальных минимумах и максимумах, а так же вблизи уровней поддержки и сопротивления. Выходим с позиции при появлении бомбы индикатора Top Bottom. Установку стоп приказа смотрим на картинке:

Данная стратегия заслуживает внимания из-за того что в ней четко прописаны точки входа и выхода, а так же вариант установки стоп приказа. Так же очень удивило то, что большинство индикаторов созданы на основе классического трендового индикатора Moving Average. Перед нами оказалась чисто трендовая стратегия, которая имеет как свои плюсы так и минусы ( ложные сигналы во флете). Отлично подойдёт как новичкам так и профи.

Самые честные и надежные брокеры бинарок:
  • Бинариум
    Бинариум

    1 место — самый лучший брокер бинарных опционов за 3 года!
    Бесплатное обучение и демо-счет на любую валюту на сумму 1000 $.
    Заберите свой бонус за регистрацию:

Понравилась статья? Поделиться с друзьями:
Основы торговли бинарными опционами