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

Gold Dust - Золотоносный песок - эксперт для MetaTrader 4

Просмотров:
10873
Рейтинг:
(5)
Опубликован:
2011.03.03 08:52
Обновлен:
2014.04.21 14:55
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу


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

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

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

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

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

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

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

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

Что это дает?

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

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

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

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


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

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

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

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

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

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

Чтобы алгоритм не заклинивало на маржинколлах во время оптимизации начальную сумму нужно брать очень большую, например, $1000000. Входные параметры: lots - объем открываемых позиций в лотах и mn - уникальный магический номер, чтобы советник не перепутал управление своими (которые он открыл) ордерами с чужими (которые он не открывал).

  • На первом этапе нам нужно узнать какими должны быть значения входных переменных p и sl. Для этого выбираем два последних участка истории, т.е. от 6 месяцев назад и до сегодня. Выставляем все параметры весов перцептронов в значения от Start = 0 до Stop = 200 с шагом 1. Значение p от Start = 3 до Stop =100 с шагом 1, значение sl от Start = 100 до Stop =750 с шагом 10 (или от 10 до 75 с шагом 1 для четырехзначных котировок). Значение pass выставляем в 1. Помечаем галочкой оптимизируемые параметры: x11, x21, x31, x41, p и sl. Все остальные галочки должны быть отключены. Запускаем оптимизацию. После завершения подгонки устанавливаем входные параметры по лучшему проходу.
  • Второй этап. Подгонка весов первого перцептрона на втором участке исторических данных. Устанавливаем дату и время оптимизации от 6 месяцев назад, до 3 месяцев назад. Убираем галочки оптимизируемых параметров только с входных переменных p и sl. Запускаем оптимизацию. После завершения подгонки устанавливаем входные параметры по лучшему проходу.
  • Третий этап. Подгонка весов второго перцептрона на третьем участке исторических данных. Устанавливаем дату и время оптимизации от 3 месяцев назад и по сегодняшний день. Убираем галочки с оптимизируемых параметров: x11, x21, x31, x41 и выставляем для x12, x22, x32 и x42. Остальные галочки должны быть отключены. Выставляем значение входной переменной pass равным 2. Запускаем оптимизацию. После завершения подгонки устанавливаем входные параметры по лучшему проходу.
  • Четвертый этап. Наша торговая система уже оптимизирована под исторические данные от 6 месяцев назад и по сегодняшний день. Сохраняем значения входных параметров в файл настроек. Выставляем входную переменную pass в значение 3. Теперь нам необходимо проверить робастность нашей торговой системы, т.е. вероятность того, что входные параметры советника не подогнаны под исторические данные, а имеют некоторую вероятность давать профит вне участков на которых проводилась оптимизация. Для этого выставляем даты от 9-ти и до 6 месяцев назад от сегодняшнего дня (участок на котором оптимизация не проводилась) и запускаем тестирование.
    Если в режиме 3 результат теста будет убыточным, то с большой вероятностью мы имеем дело с подгонкой по весовым коэффициентов обоих перцептронов одновременно. В этом случае необходимо прогнать оптимизацию заново, так чтобы на первом этапе получить другие значения для входных параметров sl и p - причина может быть именно в них. Также причиной неудачи может быть малое количество сделок при оптимизации первого и второго этапа (их должно быть не менее 100) и тогда следует уменьшить значение максимального диапазона Stop для параметра sl.

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

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

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

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

Все этапы оптимизации и тестирования торговых систем можно автоматизировать путем вызова терминала MetaTrader из внешних приложений через командную строку с соответствующими параметрами и настройками. В общей сложности автоматизированный метод занимает порядка 15-20 минут времени в зависимости от производительности компьютера. Т.е. переоптимизацию можно проводить в случае необходимости достаточно часто.

Литература:

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


Выгрузка котировок любого инструмента любого ТФ из МТ в csv Выгрузка котировок любого инструмента любого ТФ из МТ в csv

Эксперт создавался для выгрузки котировок из МТ в другую программу ТА. Управление экспертом происходит через внешние файлы.

Индикатор группового движения - i_Stocks_OSMA_04 Индикатор группового движения - i_Stocks_OSMA_04

Показывает несколько инструментов в одном окне (разности пар машек).

VR---GAP VR---GAP

Советник торгует на гэпе

Советник Flet Canal Советник Flet Canal

Советник Flet Canal построен на пробое флетового канала.