Главная » Статьи » Форекс Советники |
Рождение форекс эксперта. Стохастическая Система ч2Рождение форекс эксперта. Стохастическая Система ч1В таком состоянии эксперта можно откомпилировать и запустить на выполнение, чтобы получить возможность проанализировать его работу. По крайней мере, тех функций и правил, которые в него уже заложены. Делается это очень просто. Берем график EUR/USD M5, накладываем на него индикатор Stochastic с теми же параметрами, что и индикатор, используемый в эксперте. Этот индикатор будет использоваться для определения значений Стохастика в определенные моменты времени. Затем запускаем эксперта на небольшом участке истории, например 3 дня и смотрим, какие сделки совершал эксперт и когда. При этом проверяем, используя график Стохастика, были ли на самом деле сигналы на открытие ордеров. Так же проверяем выполнение условий для закрытия ордеров. Все должно соответствовать тем правилам, которые были заложены в эксперта. Таким образом, вручную, проверяется работоспособность любого эксперта.Если все хорошо, то следуем дальше. Нам еще надо реализовать выход с рынка при 2-ом снижении (повышении) Стохастика, ну и защитить от обратного движения. Сначала поставим защиту от обратного движения Стохастика:
Здесь все просто: в этот блок заходим только, если OrdersTotal()>0, т.е. есть открытые ордера, иначе нам просто незачем туда заходить. Далее, с помощью функции OrderSelect(), выбираем первый ордер (порядковый номер 0), затем, если тип выбранного ордера - BUY, то проверяем значение Стохастика и, если оно меньше 40, то закрываем все открытые позиции:
Аналогично работает блок для закрытия позиции SELL. На данный момент у нас имеется эксперт, который открывает сделки в период с 13.00 по 21.00 CET, закрывает часть позиции (один из двух ордеров) при достижении профита в 10 пунктов и закрывает все позиции, если Стохастик идет в противоположную сторону.Нам осталось реализовать закрытие BUY-позиции на 2-ом снижении линии %К, а так же закрытие SELL-позиции на 2-ом повышении линии %К. На MQL4 это выглядит следующим образом:
Как видите здесь тоже все просто. В блоке используются две глобальные переменные – down и up. Переменная down это счетчик понижений, который считает, сколько понижений Стохастика прошло после открытия сделки. Переменная up считает, соответственно, количество повышений Стохастика. Эти переменные объявляются вместе с переменной K_level и должны обнуляться во время открытия сделки, поэтому в блоки открытия сделок добавляем строчки обнуления переменных down и up. Идем дальше. В строке:
происходит проверка на наличие очередного понижения Стохастика, если
таковое было, то счетчик увеличивается на 1 (оператор down++). Наличие
понижения определяется очень просто – сравниваются значения Стохастика
один бар назад, два бара назад и три бара назад, переменные - stoch_1,
stoch_2 и stoch_3 соответственно. Понижение было, если stoch_3 Переменная NWave содержит в себе значение равное количеству понижений (повышений) после которого необходимо закрывать сделку. Изначально, по правилам системы, это значение равно 2, но я решил иметь возможность изменять этот параметр во время тестирования эксперта. Поэтому переменная NWave объявлена как внешняя. Далее, если число повышений (понижений) Стохастика равно NWave, то происходит закрытие ордеров с помощью функции CloseDirect(…). Эту функцию мы уже разбирали. Вот и все. Но, забегая вперед, хочу отметить, что при тестировании эксперта выявилось следующее: при значениях переменных stoch_2 >50, stoch_1<30, K_level=70, т.е. когда Стохастик находившийся выше линии 70 пересекает сверху вниз линию 50 при этом, достигая уровня ниже 30, по правилам системы имеем сигнал на продажу, но сделка не совершается. Причина, как выяснилось, в том, что значение Стохастика (переменная stoch_1) меньшее тридцати переключает значение переменной K_level в 30 вот в этой строчке:
Но нас это не устраивает, поэтому внесем изменения в код и заменим строки:
на код:
Тем самым, добавив дополнительную проверку на отсутствие пересечения с линией 50 при входе в зону, где изменяется значение переменной K_level. Таким образом, теперь, прежде чем изменить значение переменной K_level мы, дополнительно проверяем, не было ли пересечения уровня 50. Теперь все, и наш эксперт принял окончательный вид:
Теперь можно тестировать его, оптимизировать, изменять, словом делать с ним все, что душе угодно. Надеюсь, написание эксперта Вам не показалось сложным. Все, на самом деле достаточно просто, если писать программу по частям, разделив ее на небольшие блоки. Такая, блочная структура программы, очень практична, т.к. отдельные блоки, с небольшими изменениями, можно будет использовать в будущем в других экспертах. Это несколько облегчает труд программирования на MQL4. | |
Просмотров: 2170 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |