Содержание статьи: (кликните, чтобы перейти к соответствующей части статьи):
Приветствую Вас, дорогие друзья. В этой статье мы рассмотрим две функции языка программирования MQL4.
Первая функция называется Symbol() — она возвращает наименование текущего инструмента. Вторая – MarketInfo(), которая возвращает информацию о валютных инструментах.
Функция MQL4 — Symbol();
Функция Symbol() сама по себе достаточно простая. В ней нам не нужно вводить никаких дополнительных параметров.
Для практического примера использования Symbol(), давайте в блоке onTimer() мы с Вами введем локальную текстовую переменную string y и присвоим ей значение Symbol(). Далее, при помощи команды Comment(), выведем данную переменную на график.
// БЛОК ЦИКЛА, ВЫПОЛНЯЮЩИЙСЯ ПО ТАЙМЕРУ void OnTimer() { string y = Symbol(); Comment(y); }
Компилируем наш код. Открываем терминал, перетаскиваем советник на график, нажимаем «OK» и смотрим, что же у нас получилось. На графике в левом верхнем углу мы видим валютную пару GBPUSD.
Как работает функция Symbol()? Она просто возвращает наименование того валютного инструмента, на котором у нас стоит график. В дальнейшем, в советниках она нам будет достаточно полезна.
Функция MQL4 — MarketInfo();
Теперь, давайте рассмотрим функцию MarketInfo(). Она уже более сложная.
MarketInfo(EURUSD, MODE_HIGH);
Внутри нее нужно вводить входящую информацию, а именно:
- символ инструмента, на котором будет эта функция искать информацию, например EURUSD;
- тип информации — то, что нам нужно исследовать по выбранной валютной паре.
А конкретно, в типе информации мы можем прописать одну из следующих констант для выбранной валютной пары:
- MODE_LOW — минимальная дневная цена;
- MODE_HIGH — максимальная дневная цена;
- MODE_TIME — время поступления последней котировки;
- MODE_BID — последняя поступившая цена предложения;
- MODE_ASK — последняя поступившая цена продажи;
- MODE_DIGITS — количество цифр после запятой в цене инструмента;
- MODE_SPREAD — спрэд в пунктах;
- И многие другие.
В данном примере:
MarketInfo(EURUSD, MODE_HIGH);
функция MarketInfo() будет искать максимальную дневную цену на паре Евро/Доллар, которую мы прописали сами. Но, мы может не прописывать валютную пару, а вместо нее поставить Symbol(). Тогда Symbol() проанализирует наш график и ту валютную пару, которая отображается на данном графике, после чего сама подставит наименование этого валютного инструмента.
MarketInfo(Symbol(), MODE_HIGH);
Давайте рассмотрим MarketInfo () более подробно на практике. Выводить всю информацию будем в функции Comment().
Что мы делаем? Мы в команду Comment() вставляем MarketInfo(), и в скобочках этой функции прописываем тот инструмент, по которому хотим видеть информацию.
Но, на прямую прописывать этот валютный инструмент мы не будем, а сделаем возможность вводить наименование валютной пары во входящих значениях советника. Соответственно, нам нужно ввести глобальную переменную текстового типа (текстового, потому что мы будем писать наименование валютной пары, а это текст) и для вывода этой переменной во входящих значениях в свойствах советника, нам нужно перед ее объявлением поставить extern.
Далее, в MarketInfo() первым параметром пропишем текстовую переменную, о которой говорили в абзаце выше, и вторым параметром мы пропишем константу MODE_SPREAD.
И, как следствие, наш созданный советник выведет на экран спред по заданной нами валютной паре.
Итак, код будет таким:
//+------------------------------------------------------------------+ //| My_first_expert.mq4 | //| Copyright (с) Антон SanGReal Invest | //| https://sgr-tradeinvest.ru | //+------------------------------------------------------------------+ #property copyright "Copyright (с) Антон SanGReal Invest" #property link "https://sgr-tradeinvest.ru" #property version "1.00" #property strict extern string y = "EURUSD"; //Наименование валютной пары // БЛОК ИНИЦИАЛИЗАЦИИ int OnInit() { EventSetTimer(1); return(INIT_SUCCEEDED); } // БЛОК ДЕИНИЦИАЛИЗАЦИИ void OnDeinit(const int reason) { EventKillTimer(); } // БЛОК ЦИКЛА, ВЫПОЛНЯЮЩИЙСЯ ПО ТИКАМ void OnTick() { } // БЛОК ЦИКЛА, ВЫПОЛНЯЮЩИЙСЯ ПО ТАЙМЕРУ void OnTimer() { Comment(MarketInfo(y,MODE_SPREAD)); }
Компилируем код. Открываем терминал, перетаскиваем наш советник на график, жмем клавишу «OK» и смотрим результат:
101.0 это спред (в выходные дни) по паре EURUSD, заданной в настройках нашего советника:
Несколько усложним код. Теперь выведем несколько значений из функции MarketInfo(). Каждое новое значение будет выводится с новой строки, для этого применим специальный символ переноса на новую строку — «\n».
// БЛОК ЦИКЛА, ВЫПОЛНЯЮЩИЙСЯ ПО ТАЙМЕРУ void OnTimer() { Comment( MarketInfo(y,MODE_LOW),"\n", MarketInfo(y,MODE_HIGH),"\n", MarketInfo(y,MODE_BID),"\n", MarketInfo(y,MODE_ASK),"\n", MarketInfo(y,MODE_DIGITS),"\n", MarketInfo(y,MODE_SPREAD) ); }
И, для визуального удобства, сделаем в выводе информации текстовое описание выводимых значений. Напоминаю, когда мы в MQL4 выводим текстовую информацию, то ее нужно прописывать в кавычках. Также, не забываем разделять наше текстовое описание и сами значения запятыми. Вот что у нас должно получиться:
// БЛОК ЦИКЛА, ВЫПОЛНЯЮЩИЙСЯ ПО ТАЙМЕРУ void OnTimer() { Comment( "минимальная дневная цена = ",MarketInfo(y,MODE_LOW),"\n", "максимальная дневная цена = ",MarketInfo(y,MODE_HIGH),"\n", "последняя поступившая цена предложения = ",MarketInfo(y,MODE_BID),"\n", "последняя поступившая цена продажи = ",MarketInfo(y,MODE_ASK),"\n", "количество цифр после запятой в цене инструмента = ",MarketInfo(y,MODE_DIGITS),"\n", "спрэд в пунктах = ",MarketInfo(y,MODE_SPREAD) ); }
И, напоследок, дополнительно выведем само название нашей валютной пары, при помощи следующего кода:
"Валютная пара, по которой мы проводим исследование = ",y,"\n","\n",
Компилируем наш код. Открываем терминал и смотрим. У нас получился достаточно удобный текст справочной информации:
Для Вашего удобства, выкладываю MQL код полностью:
//+------------------------------------------------------------------+ //| My_first_expert.mq4 | //| Copyright (с) Антон SanGReal Invest | //| https://sgr-tradeinvest.ru | //+------------------------------------------------------------------+ #property copyright "Copyright (с) Антон SanGReal Invest" #property link "https://sgr-tradeinvest.ru" #property version "1.00" #property strict extern string y = "EURUSD"; //Наименование валютной пары // БЛОК ИНИЦИАЛИЗАЦИИ int OnInit() { EventSetTimer(1); return(INIT_SUCCEEDED); } // БЛОК ДЕИНИЦИАЛИЗАЦИИ void OnDeinit(const int reason) { EventKillTimer(); } // БЛОК ЦИКЛА, ВЫПОЛНЯЮЩИЙСЯ ПО ТИКАМ void OnTick() { } // БЛОК ЦИКЛА, ВЫПОЛНЯЮЩИЙСЯ ПО ТАЙМЕРУ void OnTimer() { Comment("\n", "Валютная пара, по которой мы проводим исследование = ",y,"\n","\n", "Минимальная дневная цена = ",MarketInfo(y,MODE_LOW),"\n", "Максимальная дневная цена = ",MarketInfo(y,MODE_HIGH),"\n", "Последняя поступившая цена предложения = ",MarketInfo(y,MODE_BID),"\n", "Последняя поступившая цена продажи = ",MarketInfo(y,MODE_ASK),"\n", "Количество цифр после запятой в цене инструмента = ",MarketInfo(y,MODE_DIGITS),"\n", "Спрэд в пунктах = ",MarketInfo(y,MODE_SPREAD) ); }
Если у Вас появились какие-то вопросы по материалу данной статьи, задавайте их в комментариях ниже. Я Вам обязательно отвечу. Да и вообще, просто оставляйте там Вашу обратную связь, я буду очень рад.
Также, делитесь данной статьей со своими знакомыми в социальных сетях, возможно, этот материал кому-то будет очень полезен.
Мы рассмотрели достаточно простые функции в MQL4, но они очень важны в программировании. Вскоре мы будем их использовать достаточно часто.
На этом, все. Переходите к следующие статье, где мы рассмотрим очень важную деталь в MQL программировании — циклы for, без которых, не обходится ни один торговый Форекс советник.
Благодарю за внимание.
Другие статьи по теме Программирование на MQL4 Вы можете просмотреть в данном содержании практических уроков по MQL.
Понравился материал статьи?
Добавьте эту статью в закладки Вашего браузера, чтобы вернуться к ней еще раз. Для этого, прямо сейчас нажмите на клавиатуре комбинацию клавиш Ctrl+D
С уважением, Антон.
Обучающий Форекс портал SanGReal Invest