Вход/Регистрация
MQL4-программирование: торговый робот за один вечер
вернуться

Ждан Евгений

Шрифт:

ПОЛУЧАЕМ ДАННЫЕ ИНДИКАТОРОВ

Открываем свой 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. Почему именно глобальные переменные? Для того, чтобы эти значения мы могли вызывать в любом месте программы (т. е. советника). Дело в том, что мы будем вызывать значения индикаторов не на каждом приходящем тике, а один раз на одной свече. Это существенно повысит производительность, т. к. терминалу не нужно будет выполнять одну и ту же операцию на каждом тике. Если мы обернем в фигурные скобки вызов наших индикаторов с записью их значений НЕ в глобальные переменные, то эти значения будут видны только в рамках этих же фигурных скобок. И за пределами их мы получим ошибку. Более подробно постараюсь описать на рисунке ниже.

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

//+–+

//| 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 и видим, в каком порядке и какие данные должны быть указаны:

Конец ознакомительного фрагмента.

  • 1
  • 2
  • 3

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: