– Путем модификации (почему модификации, а не сразу при установке ордера – позже, когда будем писать этот код) советник должен устанавливать у ордеров Стоп-Лосс и Тейк-Профит.
– Добавить возможность закрывать ордера при касании ценой противоположной линии Envelopes. Эту функцию можно выключать в настройках.
Если вы читаете эту книгу, я надеюсь, на вашем компьютере уже установлен торговый терминал MetaTrader4 и вы умеете открывать демо-счет. Если нет, нужно этот терминал установить, предварительно зарегистрировавшись у любого брокера, поддерживающего работу MetaTrader4.
А теперь, переведите свой терминал на английский язык! Если уж вы решили заняться программированием, привыкайте к английскому, без этого никуда! Сам редактор кода MetaEditor лучше оставить на русском, т. к. при переводе его на английский язык, Справка (F1) получается тоже на английском языке. Не всем это удобно.
Получаем данные индикаторов
Открываем свой MetaTrader4 и нажимаем кнопку F4 на клавиатуре, или левой кнопкой мыши здесь:
В открывшемся редакторе кода нажимаем New (Создать), затем Expert Advisor (template), потом Далее, в поле Name после Experts\ дописываем MyFirstEA – это будет названием вашего первого советника. Получится Experts\MyFirstEA. Поля Autor, link нам в этом учебном советнике не важны. Нажимаем кнопку Далее. Появится окошко Event Handles of the Expert Advisor. Здесь ничего отмечать не нужно и просто нажмем Далее. В появившемся окошке Tester event handless of the Expert Advisor снова ничего не выбираем и жмем Готово. Получаем рабочую область, в которой скоро родится наш торговый робот.
На изображении в комментариях указано, какие блоки за что отвечают.

Чтобы узнать ценовые значения индикаторов нам нужно объявить глобальные переменные типа double для верхней и нижней линии индикатора Envelopes. Назовем их enveUP и enveDW. Эти названия можно придумывать самим. То же самое надо сделать и для получения ценового значения индикатора ZZ. Назовем эту переменную ZZ. Почему именно глобальные переменные? Для того, чтобы эти значения мы могли вызывать в любом месте программы (т. е. советника). Дело в том, что мы будем вызывать значения индикаторов не на каждом приходящем тике, а один раз на одной свече. Это существенно повысит производительность, т. к. терминалу не нужно будет выполнять одну и ту же операцию на каждом тике. Если мы обернем в фигурные скобки вызов наших индикаторов с записью их значений НЕ в глобальные переменные, то эти значения будут видны только в рамках этих же фигурных скобок. И за пределами их мы получим ошибку. Более подробно постараюсь описать на рисунке ниже.