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

iChaikin Divergence - эксперт для MetaTrader 5

Просмотров:
1498
Рейтинг:
(13)
Опубликован:
2019.08.28 08:27
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Идея торговой стратегии

Советник торгует по индикатору iChaikin (Chaikin Oscillator, CHO) и ищет дивергенцию или двойную дивергенцию.

Для поиска дивергенции и двойной дивергенции взят алгоритм 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) и всегда учитываю это число при обращении к массиву.


Результаты на EURUSD H1, параметры по-умолчанию, без оптимизации:

iChaikin Divergence


Подробнее о настройках советника:

Обратите внимание: торговый сигнал имеет наивысший приоритет! Ограничить его исполнение можно только при помощи параметра    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.

      Two Horizontal Line Two Horizontal Line

      Помощник в ручной торговле при помощи двух горизонтальных линий

      Magic Number Statistics Magic Number Statistics

      Вывод на график статистики по позициям и отложенным ордерам по всем magic number

      iOBV Day Trading iOBV Day Trading

      Стратегия по индикатору iOBV (On Balance Volume, OBV)

      Falling Cat Falling Cat

      Торговая стратегия на двух индикаторах iMA (Moving Aversage, MA) с применением мартингейла