
Impulse Candle H1
Год выпуска: 2014
Валютные пары: пока usdchf, gbpusd, eurusd, usdcad
Таймфрейм: Н1
Актуальная версия: 1.02
Описание:
Идея для советника взята из статьи Кристиана Стерна "Как разработать свою прибыльную торговую стратегию"
Вот суть этой идеи:
После заметно большой свечи, как правило, следует откат, после которого движение продолжается по направлению этой самой большой импульсной свечи.
Я взял предложенную автором идею и немного переработал ее на свой лад.
Высота импульсной свечи измеряется не в пунктах, а в ATR, умноженном на коэффициент. Таким образом высота свечи должна быть не меньше ImpulseCandleMin и не больше ImpulseCandleMax, чтобы пропускать слишком уж сильные движения (как на франке пару лет назад).
Тем не менее, можно посмотреть и базовый вариант, для этого есть настройка ImpulseCandlePip - минимальная высота свечи в пунктах. При этом CandleVariant нужно выбрать "Свеча по пунктам", а не "Свеча по атр".
Далее следует настройка EnterVariant с вариантами "Вход по базовым правилам" и "Вход по WPR". Дело в том, что в стратегии, предложенной автором, предлагалось просто после появления импульсной ожидать EnterCandle свечей и после этого входить в сделку. Предполагается, что за это время откат как раз завершится и движение в сторону свечи продолжится. Я подумал, что ситуации бывают разные и ждать конкретное количество свечей не очень верно и поэтому ввел такое правило: Если в течение EnterCandle свечей с момента появления импульсной свечи индикатор WPR с периодом WPRPer станет выше/ниже WPRLevel, то можно входить в сделку. То есть по сути окончание отката определяется осциллятором и если показания осциллятора подходящие и прошло не больше, чем EnterCandle свечей, можно входить. При желании всегда можно переключиться на базовые правила (EnterVariant).
И последний мой фильтр состоит в том, чтобы брать сделки на импульсах только в направлении тренда. Для этого мы смотрим на машку с периодом TrendMAPer (по факту это всегда 100) и на цену закрытия последней свечи - если цена выше, только покупки, если ниже - только продажи.
Стоп лосс для стратегии определяется по ATR (SLCoef) исходя из текущей волатильности. Тейк присутствует, но по факту не используется (TPProc = 900 - это 900% от величины стопа).
Выходы.
В тс включено 4 варианта выхода - базовый, по истечении ExitCandle свечей сделка автоматом закрывается, выход по ADX, по WPR и по Stochastic.
Выход по ADX с периодом EADXPer - три варианта на выбор:
Выше уровня EADXLevel
Пересек уровень EADXLevel
Падает 3 свечи подряд и пересек уровень EADXLevel
Выход осуществится, если с момента открытия ордера прошло не менее ExitProfitMinutesADX свечей
Выход по WPR с периодом EWPRPer - также три варианта:
Выше верхнего уровня EWPRLevel
Была выше верхнего уровня, стала ниже EWPRLevel
Пересек -50
Выход осуществится, если с момента открытия ордера прошло не менее ExitProfitMinutesWPR свечей
Выход по Stochastic с периодами ESTOKPer, ESTODPer, ESTOSPer:
Выше верхнего уровня ESTOLevel
Была выше верхнего уровня, стала ниже ESTOLevel
Пересек 50
Пересек сигнальную
Пересек сигнальную выше нуля
Пересек сигнальную выше уровня ESTOLevel
Выход осуществится, если с момента открытия ордера прошло не менее ExitProfitMinutesSTO свечей
Тралы.
Позиции переводятся в безубыток при достижении прибыли в BEPerc % от величины стопа.
Также применяется трал по скользящей средней, по теням свечей и по АТР.
Кроме того, в бот встроен удобный планировщик. Можно отключать торговлю в отдельные дни недели или часы. Предусмотрен GMTOffset для применения у различных брокеров, авто перевод на летнее/зимнее время (CalculateDST) по европейским или американским стандартам (DSTVariant).
Что касается ММ, то тут выбор невелик - либо фиксированный лот FixLot, либо % от депозита Risk. Выбор между вариантами осуществляется параметром LotVariant.
В версии 1.01 добавлено:
1. Убрал размер импульсной свечи в пунктах совсем.
2. Добавил несколько вариантов стопа: Фикс в пунктах (SL), По ATR (SLCoef), BBandsStop (BBSMA_Length, BBSDeviation, BBSDev_Length, BBSMoneyRisk) и по экстремуму (SLHist, SLDev)
3. Добавил фикс тейк (TP), за переключение отвечает TakeVariant: 0-Фикс, 1-в % от стопа
4. Добавил трал по Трал по BBandsStop.
5. Добавил фильтр ADR - MaxADR - максимальное движение с начала дня в % от среднего АДР, после которого входить нельзя.
6. Добавил выход по STOJMA
7. Добавил выход по AbsoluteStrength
8. Добавил трал по TrendEnv1
9. Добавил фильтр RangeFilter
10. Добавил фильтр по AbsoluteStrength
11. Добавил фильтр по STOJMA
12. Добавил ММ по кривой баланса: MAMMPer и MADev - период и отклонение боллинджера, CCIMMPer - период CCI. FallCoef - постоянный понижательный коэффициент лота для баланса ниже нижней ББ, RizeCoef - постоянный повышательный коэффициент лота для баланса выше верхней ББ, DecrCoef - понижательный коэффициент для нижней части ББ, IncrCoef - повышательный коэффициент для нижней части ББ. В верхней части - торговля базовым лотом.
Версия 1.02
Техническая. Подчищены баги.
Версия ImpulseCandle 1.02 Exp - экспериментальный образец.
Суть эксперимента - бот на автомате проводит оптимизацию и форвард тестирование. Для отбора проходов с периода оптимизации используются различные критерии, анализирующие отклонение различных статистических характеристик на периодах оптимизации и форвард теста. Затем происходит автоматическое определение лучшего сета. Также проводится тест System Parameter Randomisation для лучшего сета. Смысл его в том, что берется сет, который автоматически отобрал советник в качестве лучшего и настройки сета изменяются рандомно в пределах 30% вверх или 30% вниз. Проводится 1000 тестов с разными настройками и по итогам определяется лучший и худший вариант. Лучший - то, как может торговать бот в лучшем сценарии. Худший - в худшем. То есть это тест устойчивости к изменениям рынка. Так вот, задача эксперимента - определить перспективы и результаты такого подхода.
Что уже интересного удалось выяснить. Условно характеристики любого бота можно разделить на три группы по влиянию на его устойчивость к изменениям рынка. Самое сильное влияние - правила входа, тейки и стопы, а также тралы, среднее - условия выхода. Слабо влияет на устойчивость фильтрация по времени (часам, дням недели и так далее), практически не оказывает влияния.
Добавлен автооптимизатор.
OptCriteria - критерий оптимизации
OptVariant - стадия оптимизации:
OPTVAR0=0, // Init optimisation - оптимизация всех параметров, какие захочется
OPTVAR1=1, // Init forvard - форвард тест этих параметров
OPTVAR2=2, // Init filtration - выбор лучшего сета
OPTVAR3=3, // Init SPR - тест спр
OPTVAR4=4, // Block optimisation - оптимизация параметров конкретного блока
OPTVAR5=5, // Block forvard - ...
OPTVAR6=6, // Block filtration - ...
OPTVAR7=7, // Block SPR - ...
OPTVAR8=8, // Final Test - финальный тест, сохранение настроек
OPTVAR9=9, // Final SPR - тест спр конечных настроек
OPTVAR10=10, // Final trade - режим торговли и тестов начисто
1. Ставим даты с 2000 года по настоящий день
2. Ставим Init optimisation и оптим любые параметры. Создается файл оптимизации.
3. Проводим фильтрацию. Вариант FilVariant. Создается файл Best_all. Открываем и переносим в настройки совы.
4. Можно провести тест спр для определения устойчивости, в режиме теста. F3 для просмотра рез-тов.
5. Для блоков то же самое, так же переносим лучшие параметры из Бест файла в параметры совы руками
6. Final Test - сохраняет настройки совы (текущие) в файл Final
7. Можно провести Final SPR.
8. Final trade - режим для тестов с настройками по файлу Final. На нем и торговать на реале.
В итоге нужно перенести из tester/files в mql4/files все файлы final и mm для каждой валюты.
Алгоритм оптимизации бота Exp.
1. Ставим Init testing, загружаем сет Template init opt, ставим дату с 2000 года по сегодня, проводим инициализирующую оптимизацию. Нам не сильно важны хорошие данные, просто нужен + и побольше сделок. Рекомендую тф М15, по ценам открытия.
2. Все параметры совы разделены на блоки. Начинаем с блока 1. Ставим OptVariant = Optimisation, проставляем все галочки в блоке, не забываем поставить генетику, оптим, ждем. В папке тестера files появятся файлы OptReport_OptBlock(номер блока)_Optim_ImpulseCandle_(пара)_(тф).htm и txt - это все результаты оптимизации. Оптимизация автоматом идет на 2/3 истории, даты менять не надо.
3. Жмем F3, находим переменную count, копируем значение и удаляем все глобальные переменные. Открываем настройки совы, убираем все галочки. Скопированное значение вставляем в стоп для Counter, ставим галочку. Должно получиться старт 100001, шаг 1, стоп то, что было в глобальной переменной. Режим выбираем Forvard, удираем генетику. Жмем оптимизацию. По окончании в папке появятся новые файлы, не Optim, а Forvard или типа того. Там будут все настройки блока, которые прошли удачно форвард период (1/3 истории, даты менять не надо). Критерии для форварда: минимальное кол-во сделок (100), минимальный профит фактор (1,3), максимальная просадка (10%) - если на форварде этого нет, проход отсеивается. И еще два самых главных критерия - максимальное расхождение PF и DD в %. Если на периоде оптимизации и на периоде форварда профит фактор или просадка различаются более, чем на заданное количество процентов, проход в топку. В итоге остаются проходы, которые успешно прошли форвард тест.
4. Стадия Filtration. За нее отвечает настройка FilVariant. Будет фильтровать все сеты из предыдущего этапа и оставит один лучший согласно выбранному критерию. Рекомендую "По кастомному критерию оптимизации". Чтобы начать фильтровать, снимаем все галочки в настройках совы, жмем F3, удаляем все глобальные переменные, в режиме теста запускаем сову. Останется лучший вариант, на его тест можно сразу и посмотреть. Появится файл с названием Best.
5. Стадия SPR. Смысл тут в том, что все параметры блока рандомно изменяются SPRCounter раз в пределах заданного % от начального значения. Это нужно, чтобы оценить, что будет с совой, если рынок изменится. SPRCounter ставим галочку, чистим глобальные, запускаем оптимизацию. Нажимаем F3 и видим минимальные и максимальные значения баланса, просадки, профит фактора. Особое внимание нужно обратить на минимальные - это то, как будет торговать бот в худшем сценарии.
6. Если все ок, OptBlock1 ставим false, OptBlock2 true, чистим все глобальные, убираем галочки, проставляем галочки у параметров блока 2, галочку на генетику и погнали второй заход с блоком 2. Потом 3, 4, 5 и так далее, пока не пройдем все блоки. Все файлы, кстати, можно удалить, кроме файлов Best.
7. Когда прошли по всем блокам, выбираем Final Test. Он соберет все настройки из файлов Best блоков в один файл Best для пары. И сделает тест с лучшими настройками. Не забудьте глобальные переменные снова почистить.
8. Далее у нас Final SPR. Тут все так же, жмем F3 и смотрим, но уже не по блоку, а целиковые настройки. Если все ок, приступаем к новой паре.
9. Когда все готово к торговле, нужно файлы Best для пар перенести в папку files в mql4 из папки tester. Настройки все подгрузятся автоматом, магики тоже будут разные для разных пар, типа 10001, 10003, 10021 и так далее. Все короче само установится, кроме ММ и настроек GMT (стоит 2, DST true и перевод - Америка - для альпари настройки). Нужно накинуть бота на график нужной пары и выставить мм, который вам подходит.
10. Дальше можно наслаждаться.
Исправлена ошибка с лотами (для бота Exp)
Добавлен режим MM Testing - создает файл с данными тестирования мм - результаты сделок. Их он будет использовать в дальнейшей торговле, чтобы не копить сначала 30-60 сделок для расчета.
Добавлен режим Real - торговля на реале с автозагрузкой всех настроек.
Файл Final и MM нужно класть в mql4/files.
Мониторинг в Роботесте:
ImpulseCandle.mq4
Impulse_Candle_sets.rar
ImpulseCandle_v1.02.rar
Impulse_Candle_102.rar




