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

Gold Dust - эксперт для MetaTrader 5

Опубликовал:
Vladimir Karputov
Просмотров:
3172
Рейтинг:
(32)
Опубликован:
2018.11.14 09:43
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Автор идеи - Yury Reshetov

автор кода mq5 - barabashkakvn

Gold Dust


Немного теории

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

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

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

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

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

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

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

Что это дает?

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

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

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

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


Методика оптимизации, тестирования и выявления робастности входных параметров торговой системы

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

А для раздельного тестирования и оптимизации в коде советника есть функция-переключатель Supervisor() с помощью которой торговая система имеет три режима работы в зависимости от входного параметра pass:

  1. Подгонка и тестирование первого перцептрона;
  2. Подгонка и тестирование второго перцептрона;
  3. Фильтрация путем отсева противоречивых показаний обоих перцептронов в режиме тестирования без оптимизации.

Подгоняемыми под исторические данные являются весовые коэффициенты перцептронов: x11, x12 … x42, а также MA: averaging period и Stop Loss. Входной параметр Stop Loss – является константой для всех участков. По этому самому значению выставляются уровни стоплосс для всех открываемых позиций. Еще один входной параметр MA: averaging period – временной период лага для разницы цен открытия, также является константой. 

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

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

На первом этапе нам нужно узнать какими должны быт

ь значения входных переменных MA: averaging period и Stop Loss. Для этого выбираем два последних участка истории, то есть от 6 месяцев назад и до сегодня. Выставляем все параметры весов перцептронов в значения от Start = 0 до Stop = 100 с шагом 10. Значение MA: averaging period от Start = 3 до Stop =100 с шагом 10, значение Stop Loss от Start = 10 до Stop =75 с шагом 10. Значение pass выставляем в 1. Помечаем галочкой оптимизируемые параметры: x11, x21, x31, x41MA: averaging period и Stop Loss. Все остальные галочки должны быть отключены. Запускаем оптимизацию. После завершения подгонки устанавливаем входные параметры по лучшему проходу.

Второй этап. Подгонка весов первого перцептрона на втором участке исторических данных. Устанавливаем дату и время оптимизации от 6 месяцев назад, до 3 месяцев назад. Убираем галочки оптимизируемых параметров только с входных переменных MA: averaging period и Stop Loss. Запускаем оптимизацию. После завершения подгонки устанавливаем входные параметры по лучшему проходу. Значение pass оставляем в значении 1. 

Третий этап. Подгонка весов второго перцептрона на третьем участке исторических данных. Устанавливаем дату и время оптимизации от 3 месяцев назад и по сегодняшний день. Убираем галочки с оптимизируемых параметров: x11, x21, x31, x41 и выставляем для x12, x22, x32 и x42. Остальные галочки должны быть отключены. Выставляем значение входной переменной pass равным 2. Запускаем оптимизацию. После завершения подгонки устанавливаем входные параметры по лучшему проходу.

Четвертый этап. Наша торговая система уже оптимизирована под исторические данные от 6 месяцев назад и по сегодняшний день. Сохраняем значения входных параметров в файл настроек. Выставляем входную переменную pass в значение 3. Теперь нам необходимо проверить робастность нашей торговой системы, то есть вероятность того, что входные параметры советника не подогнаны под исторические данные, а имеют некоторую вероятность давать профит вне участков на которых проводилась оптимизация. Для этого выставляем даты от 9-ти и до 6 месяцев назад от сегодняшнего дня (участок на котором оптимизация не проводилась) и запускаем тестирование.
Если в режиме 3 результат теста будет убыточным, то с большой вероятностью мы имеем дело с подгонкой по весовым коэффициентов обоих перцептронов одновременно. В этом случае необходимо прогнать оптимизацию заново, так чтобы на первом этапе получить другие значения для входных параметров sl и p - причина может быть именно в них. Также причиной неудачи может быть малое количество сделок при оптимизации первого и второго этапа (их должно быть не менее 100) и тогда следует уменьшить значение максимального диапазона Stop для параметра sl.

Если четвертый этап прошел успешно, то мы с высокой долей вероятности можем предполагать, что либо первый, либо второй перцептрон, либо оба сразу могут давать прибыль вне оптимизационных участков, а следовательно их можно использовать в трейдинге. Осталось только определиться, с конкретным перцептроном. Для этого выставляем даты от 9-ти месяцев назад и до сегодняшнего дня и прогоняем тесты советника в режимах pass 1 и 2.

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

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

Вполне понятно, что вышеприведенная методика выявления робастного набора параметров торговой системы не является простой. Но в тоже самое время, она гораздо проще и в большинстве случаев надежнее по сравнению с классической методикой, изложенной в книге Роберта Пардо [1], т.к. исключает практически бесполезный и ресурсоемкий анализ ТС после форвардного теста.

Литература:

1. Роберт Пардо. Разработка, тестирование, оптимизация торговых систем для биржевого трейдера (Design, Testing and Optimisation of Trading System). - Минакс, 2002. - 224 с. ISBN 5-902270-01-4

Float_Pivot_Smoothed_Digit Float_Pivot_Smoothed_Digit

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

Float_Pivot_Digit Float_Pivot_Digit

Альтернатива каналу Bollinger Bands® с фоновой заливкой внутренности канала в цветном облачном виде, с отображением последних значений в виде ценовых меток и с возможностью округлять уровни канала на требуемое количество порядков

Gap DM Gap DM

Советник ожидает гэпа на открытии бара.

XFisher_org_v1_Vol_Supr_Zer XFisher_org_v1_Vol_Supr_Zer

Индикатор XFisher_org_v1_Vol_Supr с дополнительной сигнализацией цветными круглыми точками моментов пробоя индикаторной линией линии нуля