Создаем кроссплатформенный советник-сеточник: тестируем мультивалютный советник

6 апреля 2020, 13:57
Roman Klymenko
3
3 059

Введение

Данная статья является своеобразным послесловием для цикла статей о советниках-сеточниках:

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

Основная цель данной статьи — протестировать, как будет работать советник на основе усреднения или мартингейл на рынке, для которого он не предназначен. Сможет ли советник, который торгует только в Long, пережить падение S&P 500 с 3400 до 2200? То есть, более чем на 30 процентов.

Основные правила торговой системы

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

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

Направление входа. Все позиции будут открываться только в Long.

Выбор данного направления очевиден, если посмотреть на график стоимости большинства акций фондового рынка на длительном периоде времени. Особенно если брать период с 2010 года и до последних событий 2020 года. Например, давайте посмотрим на недельный график акций Microsoft:

Акция Microsoft, недельный график

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

Точка входа. Открывать позицию мы будем на основе показаний советника RSI. В зависимости от актива, показания будут интерпретироваться по-разному. На одних активах мы будем входить, когда значение RSI станет меньше 30. А на других — когда значение RSI превысит 70. Где-то лучше работает один метод, а где-то другой.

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

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

То есть, если сетка по инструменту состоит максимум из 3 шагов, а цена уже доходит до уровня, на котором нужно открывать 4 шаг, то на данном уровне вместо открытия новой позиции будут закрыты все позиции по инструменту. Таким образом мы торгуем при помощи усреднения, но при этом используем стоп лоссы.

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

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

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

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

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

Тип усреднения
Кол-во шагов цепочки
 Потери при стоп лоссе
 Фиксированный
 2
 3
 Фиксированный  3
 6
 Фиксированный  4
 10
 Увеличение на величину нач. лота
 2
 4
 Увеличение на величину нач. лота  3
 10
 Увеличение на величину нач. лота  4  20

Потери при стоп лоссе на соответствующем шаге цепочки указаны в количестве шагов. То есть, если размер шага равен 7 пунктам, то потери при фиксированном усреднении на 4 шаге цепочки будут равны 10*7 = 70 пунктов.

Таким образом, при увеличении объема на величину начального лота мы уже не можем использовать более 3 шагов в цепочке. Так как уже на 4 шаге потери при стоп лоссе становятся очень большими.

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

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

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

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

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

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

Входящие параметры для увеличения рабочего лота

Итоги. В целом это все правила, из которых состоит наша торговая система. Самое время проверить на единичных инструментах, прибыльная ли она, и насколько.


Параметры оптимизации на отдельных инструментах

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

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

Сортировка результатов оптимизации проводилась по фактору восстановления. Точнее, если в результате тестирования была получена прибыль, то возвращается значение фактора восстановления. Если же получен убыток, то вместо фактора восстановления выводится процент, на который снизился баланс счета (с отрицательным знаком). При этом, если в результате работы советника было совершено менее 30 сделок, то возвращается 0. Так как это слишком маленькое количество сделок для получения объективной статистики.

Такого способа сортировки нет среди стандартных вариантов. Этот вариант заложен в сам советник. И для его использования на вкладке Настройки тестера стратегий нужно выбирать Максимум пользовательского критерия (см. рисунок ниже).

Максимум пользовательского критерия

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

Инструменты, отобранные в состав мультивалютного советника

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

AAPL:

AAPL, 2016-2020

BRK.B:

BRK.B, 2016-2020

PEP:

PEP, 2016-2020

WMT:

WMT, 2016-2020

CVX:

CVX, 2016-2020

EBAY:

EBAY, 2016-2020

MSFT:

MSFT, 2016-2020

DIS:

DIS, 2016-2020

JPM:

JPM, 2016-2020

JNJ:

JNJ, 2016-2020

S&P500:

S&P 500, 2016-2020

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

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

 Символ Фактор восстановления (бэк/форвард)
Прибыльность (бэк/форвард)  Макс. просадка (бэк/форвард) Трейдов (бэк/форвард)
 AAPL
 7.25 / 11.04
 3.93 / 37.99
 49.41 / 30.36
 134 / 58
 BRK.B  7.41 / 1.79
 3.11 / 2.01
 15.06 / 14.96
 70 / 29
 PEP  5.2 / 3.26
 2.49 / 5.42
 13.96 / 10.42
 55 / 15
 WMT  5.9 / 3.19
 2.51 / 2.56
 25.52 / 20.7
 67 / 25
 CVX  6.51 / 3.25
 3.03 / 4.26
 19.17 / 14.82
 78 / 24
 EBAY  4.57 / 1.95
 8.87 / 8.85
 20.7 / 12.96
 43 / 12
 MSFT  7.41 / 3.13
 6.69 / 5.26
 16 / 20.93
 72 / 44
 DIS  3.97 / 1.19
 2.32 / 1.84
 26.97 / 32.02
 101 / 49
 JPM  4.34 / 3.07
 1.75 / 2.81
 12.69 / 10.86
 164 / 54
 JNJ  6.24 / 1.23
 5.66 / 2.31
 28.94 / 44.36
 68 / 29
 S&P500  2.55 / 1.98
 1.65 / 1.57
 17.81 / 21.18
 85 / 91

Все отчеты тестера стратегий прикреплены к данной статье.

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

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

В остальном же форвард-тестирование только усложняет интерпретацию результатов.

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

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

Тестирование мультивалютного советника на периоде до падения рынка

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

График баланса при торговле сразу на 11 инструментах (фиксированный лот

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

 Фактор восстановления  Прибыльность Чистая прибыль
 Макс. просадка Трейдов
 20.56  2.94
 1 992
 96.91
 1 308

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

Начальный депозит при тестировании был равен 200 долларов. Через 4 года мы получили 1 992 доллара. То есть при использовании фиксированного лота прибыль за 4 года получилась равной почти 900 процентам.

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

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

Данный советник после тестирования выводит на вкладке Журнал информацию о максимальной марже, которая была достигнута во время тестирования. И в нашем случае максимальная маржа равна 190 долларов. То есть, для комфортной торговли нужно иметь депозит минимум 97 + 190 = 280 долларов. Округлим до 300 долларов. Значит прибыль за 4 года равна практически 600 процентам.

Мы получили прибыль за 4 года при торговле фиксированным лотом. Но что, если увеличивать лот при каждом увеличении баланса на размер первоначальной суммы, которая была на депозите? Советник позволяет увеличивать начальный лот максимум в 25 раз. Но думаю, что для тестов нам будет достаточно и такого увеличения:

График баланса при торговле сразу на 11 инструментах (увеличивающийся лот)

Как видите, теперь график не такой гладкий. Но зато какая итоговая прибыль! С 200 (ну ладно, 300) долларов депозит увеличился до 20 701 долларов. То есть, практически 7 000 процентов прибыли за 4 года!

Максимальный лот при этом начинает применяться уже при депозите в 7 100 долларов. Так что, если вам не страшно, то вы могли и дальше увеличивать размер рабочего лота.

Тестирование мультивалютного советника на периоде с падением рынков

Все это хорошо. Но как быть с падением рынков, которое все-таки наступило?

Ну что же, мы подошли к основной теме данной статьи. На этот раз период тестирования будет с 2016.01.01 по 2020.04.01.

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

График баланса при торговле сразу на 11 инструментах (фиксированный лот)

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

 Фактор восстановления  Прибыльность Чистая прибыль
 Макс. просадка Трейдов
 13.91  2.54
 1 971
 141.69
 1 400

Разница конечно есть. Фактор восстановления снизился на 7. Максимальная просадка увеличилась в 1.5 раза. Прибыль же практически не изменилась. То есть, мы в итоге потеряли то, что было заработано с января по конец февраля. И уж конечно это не 30-процентное снижение счета.

Теперь давайте посмотрим на результаты тестирования с лотом, постепенно увеличенным в 25 раз:

График баланса при торговле сразу на 11 инструментах (увеличивающийся лот)

В принципе, даже в этом случае падение не столь существенное. Прибыль при этом равна 20 180 долларов, что на каких-то 600 долларов меньше, чем была на момент начала 2020 года.

Подводим итоги

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

Заключение

В качестве заключения хотелось бы обратить ваше внимание, что после последнего существенного падения рынков (2008 год) прошло более 10 лет. В течение всего этого времени рынки неуклонно росли. И как знать, не начнется ли и после падения 2020 года десятилетний рост рынков? То есть, идеальное время для торговых систем, подобных описанной в данной статье.

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

Прикрепленные файлы |
article_files.zip (2235.92 KB)
griderKatMultiEA.ex5 (615.21 KB)
griderKatMultiEA.mq5 (410.71 KB)
griderKatMultiEA.ex4 (482.52 KB)
griderKatMultiEA.mq4 (410.71 KB)
SERGEI TABALENKOV
SERGEI TABALENKOV | 10 апр 2020 в 14:31
Сложно проверить Ваши выводы. Советник не запускается ни в какую. И ошибок не выдает.
Valery Pavlushev
Valery Pavlushev | 15 апр 2020 в 06:00

Такая большая работа проведена, а увидеть её не получается.

Загрузил ваш set файл из архива. Пишет ошибку в левом углу окна: Timer NOT SET

Сможете выложить рабочий set файл,  для GbpUsd?

noteca
noteca | 23 апр 2020 в 21:56

Всем доброго времени суток.


Кто-нибудь разобрался с работой советника ?

Попробовал со штатным set файлом , пару дней счет постоял, ничего не произошло.
Посмотрел различия в настройках в отчете тестера и в настройках set файла - различие в marketwatch false-true и allSymb_max_prices=200 .

За что они отвечают не очень понял.

Язык MQL как средство разметки графического интерфейса MQL-программ. Часть 2 Язык MQL как средство разметки графического интерфейса MQL-программ. Часть 2

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

Работа с таймсериями в библиотеке DoEasy (Часть 40): Индикаторы на основе библиотеки - реалтайм обновление данных Работа с таймсериями в библиотеке DoEasy (Часть 40): Индикаторы на основе библиотеки - реалтайм обновление данных

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

Язык MQL как средство разметки графического интерфейса MQL-программ (Часть 3). Дизайнер форм Язык MQL как средство разметки графического интерфейса MQL-программ (Часть 3). Дизайнер форм

В этой статье мы завершаем описание концепции построения оконного интерфейса MQL-программ с помощью конструкций языка MQL. Специальный графический редактор позволит интерактивно настраивать раскладку, состоящую из основных классов элементов GUI, и затем экспортировать её в MQL-описание для использования в вашем MQL-проекте. Представлено внутреннее устройство редактора и руководство пользователя. Исходные коды прилагаются.

Работа с таймсериями в библиотеке DoEasy (Часть 41): Пример мультисимвольного мультипериодного индикатора Работа с таймсериями в библиотеке DoEasy (Часть 41): Пример мультисимвольного мультипериодного индикатора

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