Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 1832
- Рейтинг:
- Опубликован:
- 2019.08.04 07:08
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Идея торговой стратегии
Советник торгует по индикатору iOsMA (Moving Average of Oscillator, OsMA) и ищет дивергенцию или двойную дивергенцию.
Для поиска дивергенции и двойной дивергенции взят алгоритм CompareMaps из модуля торговых сигналов [data folder] \ MQL5 \ Include \ Expert \ Signal \ SignalMACD.mqh.
Для облегчения понимания, как работает битовая карта, описание функций ExtState и CompareMaps на русском языке:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Victor Kirillin, 2011.05.24 17:19
Посмотреть код можно в исходнике. Для поиска дивергенции используются два метода:
1. Метод bool CSignalMACD::ExtState(int ind) - подготавливает данные для поиска;
2. Метод bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) - ищет рыночную модель с указанными параметрами.
Если поможет, вот комментарии к методам на русском языке:
Для метода bool CSignalMACD::ExtState(int ind)
//--- результатом работы этого метода является битовая карта экстремумов //--- фактически, битовая карта экстремумов представляет собой "массив" 4-битовых полей //--- каждый "элемент массива" однозначно описывает соотношение //--- текущих экстремумов осцилятора и цены с предыдущими //--- назначение битов элемента анализируемой битовой карты //--- бит 3 - не используется (всегда 0) //--- бит 2 - имеет значение 1 если текущий экстремум осцилятора "экстремальней" предыдущего //--- (более высокий пик или более глубокая впадина), иначе 0 //--- бит 1 - не используется (всегда 0) //--- бит 0 - имеет значение 1 если текущий экстремум цены "экстремальней" предыдущего //--- (более высокий пик или более глубокая впадина), иначе 0 //--- кроме того, формируются: //--- массив значений экстремумов осцилятора, //--- массив значений экстремумов цены и //--- массив "расстояний" между экстремумами осцилятора (в барах) //--- следует отметить, что при использовании результатов расширенной проверки состояния, //--- нужно учитывать, какой экстремум осцилятора (пик или впадина) //--- является "точкой отсчёта" (т.е. был обнаружен при анализе первым) //--- если первым был обнаружен пик, то чётные элементы всех массивов //--- будут содержать данные о пиках, нечётный данные о впадинах //--- если первой была обнаружена впадина, соответственно, наоборот
Для метода bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)
//--- битовая карта образца представляет собой "массив" 4-битовых полей //--- каждый "элемент массива" однозначно описывает искомое соотношение //--- текущих экстремумов осцилятора и цены с предыдущими //--- назначение битов элемента образца битовой карты //--- бит 3 - имеет значение 1 если нам неважно соотношение экстремумов осцилятора //--- имеет значение 0 если мы хотим "найти" соотношение экстремумов осцилятора определённое значением бита 2 //--- бит 2 - имеет значение 1 если мы хотим "найти" ситуацию когда текущий экстремум осцилятора "экстремальней" предыдущего //--- (текущий пик более высокий или текущая впадина более глубокая) //--- имеет значение 0 если мы хотим "найти" ситуацию когда текущий экстремум осцилятора менее "экстремальный" чем предыдущий //--- (текущий пик менее высокий или текущая впадина менее глубокая) //--- бит 1 - имеет значение 1 если нам неважно соотношение экстремумов цены //--- имеет значение 0 если мы хотим "найти" соотношение экстремумов цены определённое значением бита 0 //--- бит 0 - имеет значение 1 если мы хотим "найти" ситуацию когда текущий экстремум цены "экстремальней" предыдущего //--- (текущий пик более высокий или текущая впадина более глубокая) //--- имеет значение 0 если мы хотим "найти" ситуацию когда текущий экстремум цены менее "экстремальный" чем предыдущий //--- (текущий пик менее высокий или текущая впадина менее глубокая)
Основная проблема - это оптимальное количество баров, на которых необходимо получать данные индикатора. Например в функции StateMain расчёт может производится от бара ind и до самой левой свечи графика:
//+------------------------------------------------------------------+ //| Check of the oscillator state. | //| ExtState -> for(int i=0;i<10;i++) -> StateMain(pos) | //+------------------------------------------------------------------+ int StateMain(int ind) { int res=0; double var; //--- Main from ind to the leftmost candle of the chart!!! for(int i=ind;;i++)
В своей реализации я это решил так: всегда копирую 300 элементов массива (число 300 хранится в глобальной программной переменной ExtCount) и всегда учитываю это число при обращении к массиву.
Подробнее о настройках советника:
Обратите внимание: торговый сигнал имеет наивысший приоритет! Ограничить его исполнение можно только при помощи параметра Only one positions. Если Only one positions равен "true" и количество позиций открытых этим советником на данном символе больше "1" - тогда торговый сигнал игнорируется.
Параметр Close opposite равен "true": сначала ЗАКРЫВАЕМ противоположную позицию, потом отрабатываем торговый сигнал.
Торговые настройки
В советнике можно как включать, так и выключать Trailing Stop. Для отключения параметр установить в "0.0".
Трейлинг и поиск торгового сигнала может срабатывать или через N- секунд или только в момент рождения нового бара. Интервал Трейлинга в секундах задаётся в Trailing, in seconds, а интервал поиска торговых сигналов в Search signals, in seconds. Для этих двух параметров общее правило: если интервал задать меньше, чем "10" - это означает работу ТОЛЬКО в момент рождения нового бара, если же интервал задать ровно или более "10" - это означает работу каждые "N" секунд.
Дополнительные возможности
- Only one positions - в рынке всегда только одна позиция
- Reverse - переворот торгового сигнала
- Close opposite - закрытие позиций противоположных торговому сигналу, причём сначала идёт гарантированное закрытие противоположной позиции и только потом открытие новой позиции в направлении сигнала
Обратите внимание: торговый сигнал имеет наивысший приоритет! Ограничить его исполнение можно только при помощи параметра Only one positions. Если Only one positions равен "true" и количество позиций открытых этим советником на данном символе больше "1" - тогда торговый сигнал игнорируется.
Параметр Close opposite равен "true": сначала ЗАКРЫВАЕМ противоположную позицию, потом отрабатываем торговый сигнал.
Управление размером позиции (расчёт лота)
Лот может быть как постоянный (Money management установить в Constant lot и задать размер лота в The value for "Money management") так и динамический - в процентах риска на сделку (Money management установить в Risk in percent for a deal и задать процент риска в The value for "Money management"). Также можно задать постоянный лот равный минимальному лоту - Money management установить в Lots Min.

Таблица параметров OCHL последних 10-ти баров на текущем графике и текущем таймфрейме. Также, показывает параметр tick.volume и количество пунктов каждого бара.

Торговая стратегия по индикатору iMACD (Moving Average Convergence/Divergence, MACD) с фильтром минимального значения индикатора

Краткое описание

Торговая стратегия на двух осцилляторах iStochastic (Stochastic Oscillator) - при этом второй индикатор берётся с таймфрейма, отличного от текущего