MyTetra Share
Делитесь знаниями!
MarketInfo
Время создания: 30.07.2017 10:56
Текстовые метки: code
Раздел: MQL - Syntaxis
Запись: xintrea/mytetra_db_mcold/master/base/1501401394uh0it8cthd/text.html на raw.githubusercontent.com

Функция 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, заданной в настройках нашего советника:


 

Хотите изучить MQL4 быстро, легко и бесплатно?
MQL4 подробно и с самого нуля. Фишки, секреты и только практика
А также, СУПЕРБОНУС - разбор стратегии и программного MQL кода советника SGR

  Несколько усложним код. Теперь выведем несколько значений из функции 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)  

   );

  }

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования