MQL4-программирование: торговый робот за один вечер. Евгений Ждан
Чтение книги онлайн.

Читать онлайн книгу MQL4-программирование: торговый робот за один вечер - Евгений Ждан страница 3

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

      Перепишите этот код в свой редактор:

      //+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

      //| MyFirstEA.mq4 |

      //| Copyright 2017, |

      //+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

      #property copyright «Copyright 2017»

      #property link»»

      #property version «1.00»

      #property strict

      //+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

      double enveUP, enveDW, ZZ;

      datetime open;

      //+ – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – — – +

      int OnInit ()

      {

      return (INIT_SUCCEEDED);

      }

      void OnDeinit (const int reason)

      {

      }

      void OnTick ()

      {

      if (Open [0]!= open)

      {

      enveUP = iEnvelopes (NULL,0,13,MODE_SMA,10,PRICE_CLOSE,0.2,MODE_UPPER,1);

      enveDW = iEnvelopes (NULL,0,13,MODE_SMA,10,PRICE_CLOSE,0.2,MODE_LOWER,1);

      ZZ = iCustom (Symbol (),0,«ZigZag», 0,1);

      if (enveUP> 0 && enveDW> 0 && ZZ> 0) open = Open [0];

      }

      }

      Разберем, что же означает каждая строчка.

      В глобальных переменных, кроме переменных для значений индикаторов, мы объявили переменную типа datetime с названием open. Сейчас она содержит 0.

      ВАЖНЫЙ МОМЕНТ: установите курсор на слово datetime и нажмите на клавиатуре F1 – появится СПРАВКА с описанием, что означает тип datetime. Так можно делать НА всех встроенных командах!

      if (Open [0]!= open): Если Время Открытия Нулевой Свечи НЕ РАВНО open (т. е. нулю), то выполнится код в фигурных скобках. Команда Open [0] означает Время Открытия Нулевой (т. е. текущей, еще не закрытой свечи). Также, установите курсор на Open и нажмите F1 – почитайте, что это за команда.

      EnveUP = iEnvelopes (NULL,0,13,MODE_SMA,10,PRICE_CLOSE,0.2,MODE_UPPER,1); – нажимаем на iEnvelopes и видим, в каком порядке и какие данные должны быть указаны:

      double iEnvelopes (

      – string symbol, // имя символа

      – int timeframe, // таймфрейм

      – int ma_period, // период

      – int ma_method, // метод усреднения

      – int ma_shift, // сдвиг средней

      – int applied_price, // тип цены

      – double deviation, // отклонение (в процентах)

      – int mode, // индекс линии

      – int shift // сдвиг

СКАЧАТЬ