English 中文 Español Deutsch 日本語 Português
Конкурс советников внутри советника

Конкурс советников внутри советника

MetaTrader 4Торговые системы | 23 июля 2010, 10:12
6 159 9
Evgeniy Trofimov
Evgeniy Trofimov

Вcтупление

Господа разработчики и исследователи биржевых пространств!

Зачастую многие торговые системы (ТС) обладают стабильностью на определенных временных интервалах, но спустя некоторое время кривая баланса начинает двигаться вниз. Трейдер разочаровывается, начинает придумывать новые граали, оптимизировать параметры и т.д.

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

Полезность данного инструмента заключается в следующем:

  1. Возможность создавать адаптивные советники, которые будут включать или выключать реальные сделки в зависимости от ранее проведённых торгов.
  2. Вести рейтинг между несколькими торговыми системами (ТС) (в данном примере представлено 5 торговых систем) в процентном соотношении в зависимости от прибыльности. По итогам виртуального конкурса устанавливается предпочтительная торговая система для дальнейших торгов на реальном рынке.
  3. Возможность внедрять торговые стратегии, использующие несколько одновременно открытых сделок по одному инструменту, в торговую платформу MetaTrader 5, которая использует совокупные позиции (эта возможность не описана в данной статье, а предлагается, как вариант использования).

Остановимся на первых двух высказываниях.

Для примера адаптивного советника рассмотрим код Competition_v1.0.mq4, в котором на конкурсной основе производится выбор, какой торговой системой воспользоваться. В советнике используются 5 торговых систем (при желании можно добавить), выбранных мной случайно, которые более-менее стабильно работают на дневном графике EURUSD.

Важно! Необходимо использовать именно стабильные торговые системы, которые способны либо стабильно приносить прибыль, либо стабильно сливать на определённом промежутке времени.

Например, торговая система, череда выигрышей которой имеет вид: "ПППППППУУУУУУУУППУПППППППП" подходит для использования в данном советнике, а если порядок результатов сделок имеет вид: "УУППУПУУПППУУПУППУПУПУУУППУПУ", то не подходит ("У" – убыточная сделка, "П" – прибыльная сделка).

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

Стабильность торговой системы определяется «на глаз» по результатам тестов, выполненных за максимальный период (всю историю) в тестере. По полученному графику изменения баланса определяется средневзвешенное количество сделок по истечении которых происходит изменение тенденции. Например: Торговая система совершила следующую серию сделок: ППППППППУУУУУУПППППППППУПУУУУУУУУУУУПППППППУУУУУУУУУУУУУППППППУУУУУУУУУУПУПППУУПППППП. Тенденция баланса меняется примерно через 6-8 сделок. Период усреднения баланса при расчёте рейтинга рекомендуется устанавливать половине количества этих сделок. То есть 3 или 4.

Включение или отключение рейтинговой системы, помогающей советнику адаптироваться к изменению характера прибыльности, управляется параметром RatingON. С помощью её можно легко подобрать период усреднения баланса и установить его в параметр Tх.PeriodRating.

Каждую из торговых систем можно включать или отключать по желанию с помощью параметра Tх.Enabled, где х – номер ТС.

Все нижеприведённые тесты торговых систем выполнены на инструменте EURUSD (таймфрейм D1) на периоде с 1999.01.01 по 2010.06.01.

Торговая система №1

  • Условие входа: пересечение быстрой скользящей среднюю медленную (см. функцию T1_SignalOpen()).
  • Условие выхода: обратное пересечение (см. функцию T1_SignalClose()).

Рисунок 1. Тест торговой системы №1 без адаптации (RatingON = false)

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

Поэтому в параметр T1.PeriodRating устанавливается значение 20.

Рисунок 2. Тест торговой системы №1 с включенной адаптацией (RatingON = true)

Торговая система №2

  • Условие входа: Пересечение индикатором CCI определённого уровня сверху вниз. (См. функцию T2_SignalOpen())
  • Выход: появление сигнала в другом направлении. (См. функцию T2_SignalClose ())

При проведении теста за тот же период узнаём, что стабильность примерно равна 10 сделкам.

Рисунок 3. Тест торговой системы №2 без адаптации

Рисунок 4. Тест торговой системы №2 с включенной адаптацией

Торговая система №3

Логика входа и выхода такая же, как и у ТС №1, только периоды усреднения скользящих средних другие.

Небольшое отступление: можно вообще переписать весь Competition_v1.0.mq4 и собрать его из стратегий, которые будут содержать только скользящие средние с разными периодами.

Это интересное исследование я ещё не проводил, но если проведу, дам знать.

Рисунок 5. Тест торговой системы №3 без адаптации

Эта ТС совершает очень мало сделок за длительный период (почти 11 лет). В реальной торговле эту стратегию использовать я не рекомендую из-за катастрофически малого количества сделок в тестере.

В данную статью я её добавил для наглядности, чтобы примерно показать, как работает моя разработка адаптации. Для этой ТС параметр T3.PeriodRating устанавливается равным 2.

Рисунок 6. Тест торговой системы №3 с включенной адаптацией

Торговая система №4

Эта стратегия не раз попадалась мне на глаза в литературе.

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

  • Вход совершается при выстраивании трёх скользящих средних по порядку, и если MACD выше определённого уровня T4.LimitMACD. (см. функцию T4_SignalOpen())
  • Выход, если цена пересекает вторую скользящую среднюю (см. функцию T4_SignalClose()).

Рисунок 7. Тест торговой системы №4 без адаптации

Эта торговая стратегия имеет постоянную стабильность, поэтому период обработки данных для расчёта рейтинга должен быть не менее 20 сделок. Я устанавливаю T4.PeriodRating=20.

Рисунок 8. Тест торговой системы №4 с включенной адаптацией

Торговая система №5

Эту ТС разработал я сам и хочу ею поделиться с вами таким вот изощренным способом.

  • Покупку совершаем, если индикатор CCI пересекает определённый уровень T5.LevelCCI снизу вверх. (см. функцию T5_SignalOpen()). Устанавливаем уровень закрытия сделки MyLevel на T5.TralingCCI индикаторных пунктов ниже, чем уровень открытия T5.LevelCCI. Наблюдаем за индикатором CCI и подтягиваем уровень закрытия MyLevel с определёнными шагами, таким образом, чтобы расстояние между текущим значением индикатора CCI и уровнем MyLevel было не больше двойного T5.TralingCCI.
  • Закрываем открытую покупку, если индикатор CCI пересёк уровень MyLevel сверху вниз. (см. функцию T5_SignalClose()).

Рисунок 9. Тест торговой системы №5 без адаптации

Такой график даже можно не адаптировать, но для приличия установим T5.PeriodRating=10.

Рисунок 10. Тест торговой системы №5 с включенной адаптацией

Мультисистемный советник

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

Сейчас предлагается рассмотреть пример совместной работы всех этих советников:

Символ

EURUSD (Euro vs US Dollar)

Период

День (D1) 1999.05.24 00:00 - 2010.07.05 00:00 (1999.01.01 - 2010.07.05)

Модель

Контрольные точки (очень грубый метод, результаты нельзя принимать во внимание)

Параметры

RatingON=false; FastTest=true; file="virtual.csv"; MinRating=50; _tmp1_="---- Торговая система 1 ----"; T1.Enabled=1; T1.Magic=101; T1.lot=0.1; T1.Fast=10; T1.Slow=100; T1.TS=7000; T1.PeriodRating=20; _tmp2_="---- Торговая система 2 ----"; T2.Enabled=1; T2.Magic=102; T2.lot=0.1; T2.PeriodCCI=30; T2.LevelCCI=200; T2.SL=500; T2.PeriodRating=10; _tmp3_="---- Торговая система 3 ----"; T3.Enabled=1; T3.Magic=103; T3.lot=0.1; T3.Fast=30; T3.Slow=200; T3.TS=5000; T3.PeriodRating=2; _tmp4_="---- Торговая система 4 ----"; T4.Enabled=1; T4.Magic=104; T4.lot=0.1; T4.SL=5000; T4.TS=5000; T4.LimitMACD=0.002; T4.PeriodRating=60; _tmp5_="---- Торговая система 5 ----"; T5.Enabled=1; T5.Magic=105; T5.lot=0.1; T5.PeriodCCI=90; T5.LevelCCI=100; T5.TralingCCI=100; T5.SL=5000; T5.TS1=5000; T5.PeriodRating=10;






Баров в истории

2994

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

219840

Качество моделирования

n/a

Начальный депозит

500000.00





Чистая прибыль

617173.70

Общая прибыль

1342671.82

Общий убыток

-725498.13

Прибыльность

1.85

Матожидание выигрыша

2373.74



Абсолютная просадка

76798.13

Максимальная просадка

172676.05 (28.98%)

Относительная просадка

28.98% (172676.05)


Всего сделок

260

Короткие позиции (% выигравших)

126 (29.37%)

Длинные позиции (% выигравших)

134 (33.58%)


Прибыльные сделки (% от всех)

82 (31.54%)

Убыточные сделки (% от всех)

178 (68.46%)

Самая большая

прибыльная сделка

78151.67

убыточная сделка

-18831.39

Средняя

прибыльная сделка

16374.05

убыточная сделка

-4075.83

Максимальное количество

непрерывных выигрышей (прибыль)

6 (89681.19)

непрерывных проигрышей (убыток)

21 (-100325.23)

Максимальная

непрерывная прибыль (число выигрышей)

95057.65 (3)

непрерывный убыток (число проигрышей)

-100325.23 (21)

Средний

непрерывный выигрыш

2

непрерывный проигрыш

4


Рисунок 11. Тестирование мультисистемного советника без адаптации

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

А теперь посмотрим такой же тест, но с включенным параметром RatingON.

Период

День (D1) 1999.05.24 00:00 - 2010.07.05 00:00 (1999.01.01 - 2010.07.05)

Модель

Контрольные точки (очень грубый метод, результаты нельзя принимать во внимание)

Параметры

RatingON=true; FastTest=true; file="virtual.csv"; MinRating=1; _tmp1_="---- Торговая система 1 ----"; T1.Enabled=1; T1.Magic=101; T1.lot=0.1; T1.Fast=10; T1.Slow=100; T1.TS=7000; T1.PeriodRating=20; _tmp2_="---- Торговая система 2 ----"; T2.Enabled=1; T2.Magic=102; T2.lot=0.1; T2.PeriodCCI=30; T2.LevelCCI=200; T2.SL=500; T2.PeriodRating=10; _tmp3_="---- Торговая система 3 ----"; T3.Enabled=1; T3.Magic=103; T3.lot=0.1; T3.Fast=30; T3.Slow=200; T3.TS=5000; T3.PeriodRating=2; _tmp4_="---- Торговая система 4 ----"; T4.Enabled=1; T4.Magic=104; T4.lot=0.1; T4.SL=5000; T4.TS=5000; T4.LimitMACD=0.002; T4.PeriodRating=60; _tmp5_="---- Торговая система 5 ----"; T5.Enabled=1; T5.Magic=105; T5.lot=0.1; T5.PeriodCCI=90; T5.LevelCCI=100; T5.TralingCCI=100; T5.SL=5000; T5.TS1=5000; T5.PeriodRating=10;






Баров в истории

2994

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

219840

Качество моделирования

n/a

Начальный депозит

500000.00





Чистая прибыль

227123.75

Общая прибыль

388438.79

Общий убыток

-161315.05

Прибыльность

2.41

Матожидание выигрыша

2341.48



Абсолютная просадка

10921.17

Максимальная просадка

76482.03 (12.48%)

Относительная просадка

12.48% (76482.03)


Всего сделок

97

Короткие позиции (% выигравших)

50 (40.00%)

Длинные позиции (% выигравших)

47 (46.81%)


Прибыльные сделки (% от всех)

42 (43.30%)

Убыточные сделки (% от всех)

55 (56.70%)

Самая большая

прибыльная сделка

71192.28

убыточная сделка

-12680.47

Средняя

прибыльная сделка

9248.54

убыточная сделка

-2933.00

Максимальное количество

непрерывных выигрышей (прибыль)

5 (80463.85)

непрерывных проигрышей (убыток)

13 (-50753.48)

Максимальная

непрерывная прибыль (число выигрышей)

80463.85 (5)

непрерывный убыток (число проигрышей)

-50753.48 (13)

Средний

непрерывный выигрыш

2

непрерывный проигрыш

3

Рис. 12. Тестирование мультисистемного советника с включенной адаптацией

Линия баланса выровнялась, количество резких просадок уменьшилось, прибыль уменьшилась в 2.71 раз, просадка уменьшилась в 2.32 раза, количество сделок уменьшилось в 2.68 раз, прибыльность возросла в 1.3 раза.

На рис. 12, в отличие от предыдущих тестов, появился график объёмов. Это произошло вследствие активности рейтинговой системы.

Она действует следующим образом: вначале суммируются прибыли Tх.PeriodRating закрытых виртуальных сделок и делится на количество дней, за которое эти сделки были совершены. К полученному числу прибавляется суммарная прибыль всех открытых позиций, делённая на количество дней активности открытых позиций.

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

Рейтинговая система отличает одну торговую стратегию от другой с помощью магических чисел присвоенных активным торговым стратегиям в начальных параметрах Tх.Magic. Производится поиск наиболее прибыльной ТС по максимальному значению прибыли и назначается этой торговой системе рейтинг 100%.

Всем остальным ТС назначается рейтинг относительно рейтинга лидирующей ТС. В результате проведённых действий создаётся таблица с тремя столбцами.

Пример:

Magic
Profit
Rating, %
1
9
40.9
2
0
0.0
3
3
13.6
4
10
45.5
5
0
0.0
6
17
77.3
7
0
0
8
12
54.5
9
0
0.0
10
22
100.0

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

Для того, чтобы в реальной торговле участвовала только лидерная торговая система, нужно параметр MinRating в эксперте Competition_v1.0 задать равным 100.

Заключение

Представленная методика не даёт 100% гарантий прибыльности, но могу с уверенностью сказать, что сглаживание кривой баланса ­– обеспечено. А именно: уменьшение прибыли, просадки и количества совершаемых сделок – гарантированно! Увеличение прибыльности – неоднозначно.

Плохо это или хорошо – решать вам.

Расшифровка параметров советника Competition_v1.0.mq4:

  • RatingOn выключатель рейтинга (если выключен, то сделки в файле должны совпадать с реальной торговлей)
  • FastTest – не изменять файл при каждом изменении массива виртуальных сделок при тестировании.
  • file - файл виртуальной торговли (появляется в каталоге TerminalPath()+"\experts\files")
  • MinRating – минимальный рейтинг в процентах необходимый для открытия реальной позиции
  • Tх.Enabled – выключатель ТС
  • Tх.Magic – Магическое число
  • Tх.lot – Величина максимального лота, которым торгует стратегия при 100% рейтинге
  • Tх.Fast – Период быстрой МА
  • Tх.Slow – Период медленной МА
  • Tх.SL – Стоп лосс в пунктах
  • Tх.TS1 – Одноразовый трейлингстоп в пунктах (переводит StopLoss в безубыток)
  • Tх.TS – Трейлинг стоп в пунктах
  • Tх.PeriodRating - период усреднения рейтинга (количество сделок истории)
Похожие по теме ссылки: http://forum.mql4.com/ru/23455
Прикрепленные файлы |
RealTrend.mqh (8.2 KB)
VirtualTrend.mqh (36.1 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (9)
Виктор
Виктор | 26 июл. 2010 в 13:35

Да, спасибо.

Т.е. все зависит от стабильности результатов стратегии в будующем.

 Может попробовать к лавине прикрутить )). Пару переворотов виртуальных не повредят ). 

Evgeniy Trofimov
Evgeniy Trofimov | 26 июл. 2010 в 17:29
К Лавине прикрутить лучше что-нибудь по проще. Почитайте https://www.mql5.com/ru/forum/124482/page381 Там после моих постов я объяснил, как добиться подобных результатов.
Artyom Trishkin
Artyom Trishkin | 27 июл. 2010 в 19:32
Azzx:

Довольно любопытная статья - вечером обязательно внимательно прочитаю, - но вот сразу возник вопрос - чем обусловлено тестирование по "контрольным точкам"?

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


Качество моделирования n/a - т.е. практически никакое... Желательно загрузить все котировки и провести тесты по всем тикам с качеством моделирования 90% - тогда результаты будут результатами. А так... слов нет... ИМХО.
Evgeniy Trofimov
Evgeniy Trofimov | 28 июл. 2010 в 19:02
artmedia70:
Качество моделирования n/a - т.е. практически никакое... Желательно загрузить все котировки и провести тесты по всем тикам с качеством моделирования 90% - тогда результаты будут результатами. А так... слов нет... ИМХО.

Протестируйте грубо (Только для советников с явным контролем открытия баров). Там нет моделирования. Получите тоже самое.

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

dav1977
dav1977 | 13 окт. 2014 в 08:58

Спасибо автору


Подправил под новый build

прикрепил

Взаимодействие MetaTrader 5 и MATLAB Взаимодействие MetaTrader 5 и MATLAB
Статья раскрывает детали реализации связки MetaTrader 5 и математического пакета MatLab. Детально раскрывается механизм преобразования данных, процесс разработки универсальной библиотеки для взаимодействия с рабочим столом MatLab, также рассматривается вопрос использования DLL библиотек, сгенерированных средой MatLab. Данная статья рассчитана на подготовленных читателей, знающих C++ и MQL5.
Оптимальный метод подсчета объема совокупной позиции по заданному магическому номеру Оптимальный метод подсчета объема совокупной позиции по заданному магическому номеру
В статье рассматривается проблема необходимости подсчета совокупной позиции по заданному символу и магическому номеру. Предложенный метод подсчета объема позиции в процессе работы загружает только минимально необходимую часть истории сделок. В процессе же самой работы обработка происходит только по последним сделкам. Дополнительно рассматривается метод формирования уникальных имен глобальных переменных.
Интервью с Николаем Косициным: мультивалютные эксперты менее рискованны (ATC 2010) Интервью с Николаем Косициным: мультивалютные эксперты менее рискованны (ATC 2010)
Мы побеседовали с Николаем Косициным о его разработках. Он считает мультивалютники перспективным направлением и занимается разработкой именно таких экспертов. На чемпионатах Николай также выступает только с мультивалютниками. Именно его советник стал единственным мультивалютником, который вышел в победители Чемпионата за все время проведения соревнования.
Перенос индикаторов из MQL4 в MQL5 Перенос индикаторов из MQL4 в MQL5
Статья посвящена особенностям переноса в MQL5 ценовых конструкций, используемых в индикаторах, написанных на MQL4. Для упрощения переноса индикаторных расчетов из MQL4 в MQL5 предложена библиотека функций mql4_2_mql5.mqh, применение которой рассмотрено на примере переноса индикаторов MACD, Stochastic и RSI.