Советники Fibo Magic, Forex Fibonacci и другие фибо-роботы

Советник по Фибоначчи – обзор нескольких вариантов (Fibo Magic, Forex Fibonacci и другие)

Аналитические инструменты на основе чисел Фибоначчи уже давно доказали свою высокую эффективность. Многие трейдеры совершили с их помощью множество выгодных сделок, принесших им немалый доход. Поэтому на основе этого инструментария для теханализа созданы разнообразные советники – Fibo Magic, Forex Fibonacci и другие, о которых мы вам кратко расскажем.

p, blockquote 1,0,0,0,0 —>

Советник Fibo Magic

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

p, blockquote 2,0,0,0,0 —>

Рисунок 1. Типичная разметка графика, сделанная советником Fibo Magic.

Рисунок 1. Типичная разметка графика, сделанная советником Fibo Magic.

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

p, blockquote 3,0,0,0,0 —>

Советник Fibonacci Forex

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

p, blockquote 4,0,1,0,0 —>

  • защита от чрезмерного расширения спреда;
  • система частичной фиксации прибыли;
  • авторасчет лота в зависимости от размера депозита.

В этом советнике Forex Fibonacci фибо-разметка имеет базовое назначение – открытие позиций происходит при достижении котировкой уровня. При этом трейдер может изменить процентное значение рассчитываемых фибо-уровней. Это может потребоваться, если фибо-советник планируется применять на активах и таймфреймах, отличных от рекомендуемых EURUSD,M1. Также в настройках можно задать:

p, blockquote 5,0,0,0,0 —>

  • величину максимального лота;
  • предпочтительное направление открытия позиций – только короткие (на нисходящем тренде), только длинные (на восходящем тренде), и короткие и длинные (на боковике);
  • временной интервал для открытия позиций в одном направлении;
  • скрытие СтопЛосса и ТейкПрофита от брокера.

Для использования советника Forex Fibonacci необходим депозит объемом не меньше $100 на счете с небольшим спредом (ECN). Также крайне желательно активировать советник на торговом терминале, установленном на VPS (но если у трейдера надежная интернет-связь и бесперебойное электроснабжение, то можно использовать и МетаТрейдер, установленный на ПК, не отключая при этом его на протяжении всего торгового времени).

p, blockquote 6,0,0,0,0 —>

Рисунок 2. Результаты тестирования фибо-советника Fibonacci Forex, приводимые его автором.

Рисунок 2. Результаты тестирования фибо-советника Fibonacci Forex, приводимые его автором.

Советник Fibo Method

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

p, blockquote 7,0,0,0,0 —>

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

p, blockquote 8,1,0,0,0 —>

Закрытие открываемых по тренду позиций происходит при смене тренда. После этого фибо-советник приостанавливает свою работу и чтобы его вновь активировать, необходимо снова вручную набросит фибо-уровни на новый тренд. Для определения рыночной тенденции используется разновидность мувинга, называющаяся HMA.

p, blockquote 9,0,0,0,0 —>

Следует учитывать, что советник Fibo Method не производит никаких действий перед, во время или после выхода новостей. Поэтому трейдеру необходимо самостоятельно позаботиться об ограничении рисков в эти периоды. Для этого можно либо закрыть позиции, либо уменьшить их СтопЛосс.

p, blockquote 10,0,0,0,0 —>

Рекомендуемые для трейдинга валютные пары – EURUSD и GBPUSD.

p, blockquote 11,0,0,0,0 —>

Рисунок 3. Информация по версиям советника Fibo Method.

Рисунок 3. Информация по версиям советника Fibo Method.

Существует 3 версии этого советника (рис. 3) и все они платные.

p, blockquote 12,0,0,1,0 —>

Советник по Фибоначчи и Параболику

В нем алгоритм строит сначала Parabolic, а затем ожидает его пробоя котировкой. Если этот пробой произошел вверх, то строятся фибо-уровни от последнего минимума до максимума пробойной свечи. Если же котировка пробила Параболик вниз, то построение фибо-уровней происходит от последнего максимума до минимума пробойной свечи.

p, blockquote 13,0,0,0,0 —>

Сделка совершается в момент достижения котировкой фибо-уровня 50%. Ее ТейкПрофит устанавливается на уровне 161,8%. СтопЛосс размещается:

p, blockquote 14,0,0,0,0 —>

  • для покупки – под последним минимумом;
  • для продажи – над последним максимумом.

Рисунок 4. Результаты теста советника по Фибоначчи и Parabolic.

Рисунок 4. Результаты теста советника по Фибоначчи и Parabolic.

Рекомендуется торговать по этому Fibo-советнику на паре EURUSD и ТФ M15.

p, blockquote 15,0,0,0,0 —>

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

Использование ORDER_MAGIC для торговли разными экспертами на одном инструменте

Nikolay Demko

Введение

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

Но прежде чем перейти к непосредственной теме статьи, разберём подробнее, что представляет собой магик. Что может быть магического в номере, который определяет, какой эксперт его выставил? Чудеса начинаются с возможностей, которые закладывают разработчики в тип ulong , которым объявляется магик.

Тип ulong самый длиииииииииннннннннннный

При детальном рассмотрении целочисленного типа long выясняется, что максимальное значение этого типа просто феноменально:

Размер в байтах

Аналог в языке С ++

Вам будет интересно  Торговая форекс стратегия для MA, stochastic и fractals; Финансовый журнал

-9 223 372 036 854 775 808

9 223 372 036 854 775 807

18 446 744 073 709 551 615

Таблица 1. Свойства типов данных long и ulong

но тип ulong переплюнул и его за счёт объединения положительной и отрицательной мантиссы.

Итак, длина задана огромная, но как она использовалась раньше?

По опыту работы на mql4, я частенько обращал внимание на бессмысленность кодирования магика многими разработчиками. Нет, магик использовался осмысленно, но вот его кодировка вызывала, по меньшей мере, улыбку. Что можно сказать об индивидуальности магика 12345, такой магик использует практически половина пишущей братии. Вторая половина пользуется магиками 55555, 33333 и 77777, вот, пожалуй, исчерпывающий набор. Хочу обратить внимание читателя, что на его компьютере вряд ли установлено более 1000 советников, так что заветное число 1000 будет достаточно для кодирования индивидуального имени всех ваших советников.

1000 — это всего 3 полных разряда, что же делать с остальными 15-ти полными разрядами, которые имеются в типе ulong ? Ответ прост: кодировать.

Что же говорит всезнайка Вики о слове код:

Код — правило (алгоритм) сопоставления каждому конкретному сообщению строго определённой комбинации символов (знаков) (или сигналов).

Значит, будем составлять правила. Предлагаю прописать в коде магика не только сам идентификатор советника, но и инструмент, на котором он запущен. Ведь то, что советник запущен, к примеру, на EURUSD, совсем не означает, что советник будет выставлять ордера только по этому инструменту. Также, думаю, будет полезно прописать код взаимодействия советников, что-то вроде «свой/чужой», чтобы советник, проверяя позиции, мог понять, что текущий приказ выставлен дружественным советником. Думаю, этого будет достаточно для создания очень сложной системы.

Итак, подведём итог: какие возможности мы закладываем в систему:

  1. Возможность двум и более советникам работать на одном инструменте и не конфликтовать.
  2. Возможность двум и более советникам работать на разных инструментах и дополнять друг друга.
  3. Возможность идентификации ордера по инструменту, с которого работает советник.

Итак, задача поставлена, приступим к реализации.

Простой советник

Набросаем код простого советника — например, держать позицию в сторону Мувинга, или в простонародье, машки. Думаю, читатель, взявшийся за разбор магика, уже прочёл статью Пошаговое руководство по написанию советников в MQL5 для начинающих, если нет, то рекомендую, т.к. подробно останавливаться на создании советника я не буду. По сути, советник будет открывать позицию единожды, а в остальном переворачивать. Поэтому нам понадобится функция для открытия позиции, т.е. для выставления торгового запроса (он же торговый ордер).

Создадим вспомогательный класс, который будет рассчитывать нам параметры для заполнения полей структуры торгового запроса:

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

Запустим его и убедимся, что советник не отличается прибыльностью, но при этом ведёт торговлю точно в соответствии с заданной нами логикой, чего мы от него и требуем.

Рисунок 1. Работа одного советника на одном инструменте

Рисунок 1. Работа одного советника на одном инструменте

Теперь попробуем запустить этот советник, но на разных таймфреймах одного инструмента (для опытов мы выбрали первый попавшийся инструмент, первым попался EURUSD :o)

Рисунок 2. Конфликт двух советников на одном инструменте на разных таймфреймах

Рисунок 2. Конфликт двух советников на одном инструменте на разных таймфреймах

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

Позиция или виртуальная позиция?

Поскольку в MetaTrader 5 разработчики вместо учёта ордеров перешли на учёт позиций, то имеет смысл более детально рассмотреть функции, связанные с учётом позиций.

Идентификаторы перечислений для функций получения запроса соответствующих свойств позиций PositionGetDouble, PositionGetInteger и PositionGetString приведены в таблицах 2-4.

Уровень Stop Loss для открытой позиции

Уровень Take Profit для открытой позиции

Текущая цена по символу

Таблица 2. Значения перечисления ENUM_POSITION_PROPERTY_DOUBLE

Время открытия позиции

Magic number для позиции (смотри ORDER_MAGIC)

Идентификатор позиции — это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Переворот позиции не изменяет идентификатора позиции.

Таблица 3. Значения перечисления ENUM_POSITION_PROPERTY_INTEGER

Символ, по которому открыта позиция

Комментарий к позиции

Таблица 4. Значения перечисления ENUM_POSITION_PROPERTY_STRING

Из функций хорошо видно, что в языке не ведётся разделение позиций по принципу «кто выставил ордер», но возможность учёта предусмотрена т.к. ORDER_MAGIC , POSITION_MAGIC и DEAL_MAGIC являются одним числом, и берутся от установленного пользователем магического номера. POSITION_MAGIC берётся из открывающего позицию DEAL_MAGIC, а DEAL_MAGIC в свою очередь, из ORDER_MAGIC выставленного ордера.

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

Раз уж мы имеем возможность работать с ООП, то объявим еще и собственную структуру (заодно и попрактикуемся писать объектно).

Выше по тексту (там, где выложен код класса CProvision) не велось объяснения того, откуда что берётся и куда чего девается, поскольку разработка советника не является предметом этой статьи.

Класс CPositionVirtualMagic же мы разберём подробно:

К классу придана структура:

которая используется для принятия результатов вычислений, такое себе глобальное объявление внутри класса, благодаря pvm (переменной структуры), эта структура будет доступна везде в любом методе класса.

Далее следуют два метода класса:

Эти методы объявлены как public, а значит, будут доступны через вызывающую переменную класса в любом месте программы, и предназначены для вывода значений структуры в затребованном месте.

В этой же секции объявлен метод:

Это основная функция класса, именно её мы разберём наиболее подробно, а пока, забегая наперёд, опишу функцию под спецификатором доступа private:

Вам будет интересно  Арбитражные роботы (советники) Форекс

Этот метод производит запись тикетов сделок в массив, по сути, является циклом, и мог быть описан в вызываемой функции, но уж больно хотелось уменьшить размер (для увеличения читабельности кода) функции PositionVirtualMagic(), поэтому я вынес этот цикл за её пределы, а заодно и продемонстрировал, как пользоваться спецификатором доступа private.

Итак, вернёмся к PositionVirtualMagic(), функция в самом своём начале имеет однострочное вычисление точности, до которой требуется округлять double-значение объёма рассчитанной позиции.

Требуется это для проведения операции сравнения с нулём, иначе какой-нибудь остаток в 8 знаке после запятой не даст приравнять значение нулю и вызовет ошибку исполнения.

Округляется же объём позиции до минимального шага. И если минимальный шаг больше 1, то округление идёт до целочисленной части. Далее идёт цикл while, но используется он по-новому (не так, как в mql4), т.к. проверка выражения истинности производиться не в начале цикла, а в конце:

Применён такой подход потому, что выражение истинности вычисляется в самом цикле и при входе ещё не готово к проверке.

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

Думаю, стоит объяснить используемую мной систему выбора имён переменных.

Внимательный читатель уже заметил, что имена классам задаются с помощью начальной буквы «C», этого не требует синтаксис и имя может быть любым, но читать намного проще. Если перед именем стоит буква «C», сразу ясно, это имя класса, если «S» — значит это структура. Если же переменная принимает значение какой-либо встроенной функции, то я просто меняю составляющие названия функции и получаю имя переменной, например вот так:

Просто и читабельно, сразу видно, что хранит переменная. Тем более, что в редакторе MetaEditor имеется функция перетаскивания выделенной части кода в указанное место.

Разбирая код дальше, мы видим, что после подгрузки истории идёт вызов функции:

с сохранением количества сделок в переменную. По тому же условию будет проводиться проверка на выход из цикла. Зачем эта проверка? И почему нельзя просто подгрузить историю и затем запрашивать из неё сделки?

Дело в том, что при работе советников история будет запрашиваться отдельно каждым советником, и, соответственно, если советники запущены в разное время, то и глубина истории будет разная. А значит, когда один советник вошёл в цикл и подгрузил историю за свой период, то, не дойдя до конца цикла, он может обнаружить, что история уже подгружена по запросу другого советника, поэтому сделана проверка на аутентичность.

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

Так организована проверка того, не было ли за время работы функции prHistory_Deals() изменений в истории сделок. Если изменений не было, то переменная History_Total_Deals будет равна HistoryDealsTotal() и произойдёт выход из цикла за один проход. Если же изменения были, система пойдёт на повтор, и так до тех пор, пока не будет загружена история тикетов без ошибок (и не забываем «;» в конце ставить):

Далее в цикле for идёт подсчёт виртуальной позиции.

Если сделка успешно прошла ряд фильтров (время совершения сделки и магик сделки), то её объем увеличивает ту часть виртуальной позиции, типу которого принадлежит сделка.

Хочу отметить, что я прописываю подсчёт виртуальной позиции только от запуска советника, хотя возможны варианты.

Тут нужно отметить, как вообще рассчитывается позиция. По счётной книге, которой все мы пользуемся с незапамятных времён и по сей день, мы имеем расход и приход, и подсчёт баланса ведётся как разность этих величин, Так же и при подсчёте позиции: если вы открыли 0.2 лота на Sell и 0.3 на Buy, то это значит, что вы держите позицию объёмом 0.1 на Buy. Время открытия и разность в уровнях — это уже категории прибыли, но позиция у вас будет 0.1 лота, тип Buy.

Именно поэтому мы просто суммируем все сделки, совершённые советником на Buy и отдельно на Sell, потом их сравниваем и получаем общую позицию (собственно, этим и занимается остальная часть разбираемой функции).

Подсчёт объёма позиции:

Распознавание типа позиции с выводом значения в структуру:

Вывод объёма в структуру:

Вывод значения функции: если объём позиции 0 то false, иначе, если позиция существует, то true:

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

Для экономии места я буду приводить код не полностью, а лишь те части кода, которые не были выложены выше.

Запустим этот советник трижды на одном инструменте, но разных таймфреймах при этом зададим всем разные магики:

Рисунок 3. Зададим разные магики двум одинаковым советникам, (один инструмент, разные таймфреймы) старт первого советника

Рисунок 3. Зададим разные магики двум одинаковым советникам, (один инструмент, разные таймфреймы) старт первого советника

Рисунок 4. Зададим разные магики двум одинаковым советникам, (один инструмент, разные таймфреймы) старт второго советника

Рисунок 4. Зададим разные магики двум одинаковым советникам, (один инструмент, разные таймфреймы) старт второго советника

Рисунок 5. Результат бесконфликтной работы советников на одном инструменте с различными магиками

Рисунок 5. Результат бесконфликтной работы советников на одном инструменте с различными магиками

Ходовые испытания пройдены удачно, советники услужливо уступают друг другу дорогу, и даже не думают ругаться.

Первый пункт технического задания выполнен, то ли ещё будет.

Для реализации следующих частей нам потребуется разработать класс методов, которые будут кодировать/декодировать информацию, а также получать значения от встроенных функций и трансформировать её в заданный формат.

Для этого повторим условия кодирования (так сказать, техническое задание на разработку):

  • Методы должны кодировать имя советника (назовём его цифровое имя),
  • Код опознавания свой/чужой (назовём его код взаимодействия),
  • Код символа, на котором запущен советник (чтобы по сделке можно было определить, откуда работает эксперт).

Итак, для начала выберем имя для нового класса, не буду оригинален — пусть будет magic (это общее имя), зададим своё перечисление, чтобы код был нагляднее.

Вам будет интересно  Forex Hacked PRO мультивалютная версия знаменитого советника

Перечисление работает просто: вы описываете через запятую имена, а компилятор присваивает им числа по порядку.

Во-первых, если зададите переменную другого типа (к числам это не относится) при указании параметра из перечисления, при компиляции вы получите предупреждение об ошибке, а во-вторых, появляется наглядность: вы не просто присваиваете 0, а даёте команду присвоить ENUM_DIGITAL_NAME.

Как и при создании структуры или класса, имя перечисления я выбирал просто, к общему выбранному имени прибавляю E, получилось Emagic, соответственно структура будет Smagic а класс Cmagic.

Опять же, обращаю внимание, что обязательности в этом нет, и вы можете назвать перечисление Peretchislatel, структуру Ctructuratel, а класс Klassifikator. Но при этом нет общности в названиях, и читать такой код будет неудобно.

Далее создадим структуру для хранения наших кодов.

После чего объявим класс Cmagic в котором пропишем все методы по кодированию и декодированию магика, кстати, включим в этот класс и методы из предыдущего советника (просто объявим их в нашем классе и перепишем заголовки)

Теперь разработаем методы.

Первый метод в классе:

Этод метод получает два значения: цифровое имя советника и код взаимодействия.

И сразу их проверяет на корректность:

Но никаких репрессий против действий хозяина не делает, даже в случае ошибки смирненько себе продолжает работу.

Далее идёт присвоение в структуру входных данных, которые пользователь задаёт, однако символ инструмента не задаётся, а получается из приватного метода:

Не буду приводить его код, т.к. он длинный и есть в прикреплённом файле. Скажу лишь, что этот метод — по сути просто таблица, которая ставит каждому символу из окна «обзор рынка» соответствующее число: для EURUSD, например, 1 и т.д.

Можно, конечно, получать эти данные динамично, написав код для опроса, какие валюты присутствуют в окне «обзор рынка», но решение должно соответствовать сложности задачи, и нет смысла разбираться в премудростях вызова окон, сделаем по-простому, составим список валют и присвоим каждой свой индекс.

И, наконец, главная строка всего метода:

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

Следующий публичный метод класса:

Собственно, этот метод является просто оболочкой, распределяющей по структуре результаты трёх вызовов одного private-метода. Объявление под таким спецификатором хорошо тем, что при вызове переменной класса во всплывающей подсказке их нет, т.е. создаётся впечатление, что всю работу сделала public-функция.

Но вернёмся к нашим приватам:

Визуально этот метод можно представить как считывание трёхзначного числа из указанного поля, например, имеем магик 123456789 , это можно представить как | 123 | 456 | 789 | если указано поле 1 , то результат будет 789 , т.к. нумерация полей идёт справа налево.

Таким образом, перебрав в вызывающем методе все три поля, мы распределяем по структуре все полученные данные. Осуществляется это через процедуру приведения магика к строчному типу string:

с последующим разбором отдельных компонентов строки.

Далее следуют две похожих функции, которые по своей сути являются переключателем switch, и отличаются лишь типом выходного значения:

Функции возвращают ту часть магика, на которую указывает параметр типа Emagic, при этом первая выдаёт результат в виде ulong, и, соответственно, используется в расчётах, а вторая — результат типа string и может быть использована для визуализации.

В функции GetMagic_result() всё организовано просто, она распределяет значения структуры по веткам switch, тогда как в sGetMagic_result() немного сложней. Каждая ветка case вызывает табличную функцию, которая и переводит значение структуры в наглядную форму. Таким образом, если значение mag.expert_symbol=1 то первая функция выдаст 1, а вторая EURUSD.

Предпочтение табличным функциям в кодировании/декодировании информации я описывал выше, и напомню лишь, что каждый случай следует рассматривать отдельно на предмет сложности реализации безтабличного метода и его преимущества к времени написания таблиц. Если таблицу состояний написать проще, то незачем городить огород. Но если на написание таблицы уйдёт много времени, то, конечно, предпочтение следует отдать процедурному методу. Таблицы я не привожу из-за экономии места (они есть в прикреплённых файлах).

Ну вот по сути и всё, наш класс разработан, ах да, ещё четыре функции, которые мы использовали при разработке предыдущего советника.

Не мудрствуя лукаво с наследованием, я просто переобъявил их в новом классе, тем более что их пришлось немного доработать.

Теперь главный метод:

не только объявлен как метод класса Cmagic но и имеет другой набор параметров.

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

Что это даёт? Теперь можно одновременно фильтровать сделки, которые были открыты по другому инструменту, но этим же советником. При этом они не будут путаться с таким же советником, запущенным на другом инструменте. Вообще, описать все варианты использования новой системы учёта сложно. И читатель сам сможет выбрать, для чего ему нужна такая усложнённая система. Я же ратую лишь за то, что не нужно усложнять там, где можно писать просто, и не стоит бояться усложнения, если простота растёт как снежный ком.

Что ж, раз класс разработан, нужно его опробовать на новом советнике:

Как уже указывалось раньше, советник крайне прост и создан лишь для демонстрации возможностей, запустим его трижды на одном инструменте:

Рисунок 6. Установка трех советников с разными магиками на различные графики

Рисунок 6. Установка трех советников с разными магиками на различные графики

Рисунок 7. Результат бесконфликтной торговли трех советников с разными магиками

Рисунок 7. Результат бесконфликтной торговли трех советников с разными магиками

Как видно из распринтовки в сообщениях экспертов, все три участника стартовали успешно и конфликтностью не отличаются.

Заключение

Предоставив возможность присваивать магические ордера торговым операциям, создатели MQL5, безусловно, во многом облегчили жизнь экспертописателям. Но разработчики могут лишь дать инструменты — свои алмазы вы должны добыть сами.

https://forexxx4all.ru/sovetnik-fibo-magic/
https://www.mql5.com/ru/articles/112

Яндекс.Метрика