← К каталогу
Исходный код · ID 2402

cutils.mqh

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

cutils.mqh — это библиотека вспомогательных утилит для платформы MetaTrader 4 на языке MQL4. Она содержит три класса, обеспечивающих удобный доступ к рыночным данным, конвертацию величин и отправку уведомлений.

Класс CUtils предоставляет методы получения цен Ask и Bid, спреда, стоимости пункта, а также конвертацию между пипсами и ценами. Также он умеет определять появление нового бара и нормализовать размер лота.

Класс CNotifyManager управляет отправкой уведомлений с защитой от дублирования по уникальному ключу и поддерживает отправку email-оповещений. Класс CNotify служит простым контейнером для хранения данных уведомления.

Состав библиотеки

Классов: 3 · методов: 14 · конструкторов: 3 · деструкторов: 1 · отдельных функций: 0

Классы
Класс class CNotify

Класс-контейнер для хранения данных уведомления: символ, текст и уникальный ключ.

Класс class CNotifyManager

Класс-менеджер для управления уведомлениями, предотвращающий дублирование и отправляющий оповещения.

Класс class CUtils

Основной класс утилит, предоставляющий доступ к рыночным данным, конвертации величин и управление уведомлениями.

Методы и конструкторы
Конструктор · CNotify CNotify(string sym, string txt, string uniquekey)

Конструктор класса CNotify, инициализирующий символ, текст и уникальный ключ уведомления.

Конструктор · CNotifyManager CNotifyManager()

Конструктор класса CNotifyManager, инициализирующий счётчик уведомлений.

Метод · CNotifyManager void SendNotify(string symbol, string uniquekey, bool sendEmail, string text)

Отправка уведомления для символа с проверкой на дублирование по уникальному ключу; при необходимости отправляет email.

Конструктор · CUtils CUtils(void)

Конструктор класса CUtils, создающий экземпляр менеджера уведомлений.

Деструктор · CUtils ~CUtils()

Деструктор класса CUtils, освобождающий память менеджера уведомлений.

Метод · CUtils string GetTimeFrame(int timePeriod)

Возвращает строковое обозначение таймфрейма (M1, M5, H1, D1 и т.д.) по целочисленному периоду.

Метод · CUtils void SendNotify(string symbol, string uniquekey, bool email, string text)

Отправка уведомления через внутренний менеджер CNotifyManager с проверкой дублирования.

Метод · CUtils double PointValue(string symbol)

Возвращает стоимость одного пункта для указанного торгового символа.

Метод · CUtils double PipsToPrice(string symbol, double pips)

Конвертирует значение в пипсах в цену для указанного символа.

Метод · CUtils double PriceToPips(string symbol, double points)

Конвертирует значение цены в пипсы для указанного символа.

Метод · CUtils double AskPrice(string symbol)

Возвращает текущую цену Ask для указанного торгового символа.

Метод · CUtils double BidPrice(string symbol)

Возвращает текущую цену Bid для указанного торгового символа.

Метод · CUtils double Spread(string symbol)

Возвращает текущий спред в пипсах для указанного торгового символа.

Метод · CUtils void Refresh()

Обновляет внутреннее состояние и устанавливает флаг IsNewBar при появлении нового бара.

Метод · CUtils double GetLotSize(string symbol)

Возвращает максимальный допустимый размер лота для указанного символа.

Метод · CUtils double GetLotStep(string symbol)

Возвращает минимальный шаг лота для указанного торгового символа.

Метод · CUtils double RequiredMargin(string symbol)

Возвращает требуемый маржинал для открытия позиции по указанному символу.

Метод · CUtils double NormalizeLotSize(string symbol, double lotSize)

Нормализует размер лота в соответствии с шагом и минимальными требованиями брокера для указанного символа.

Получить полный код

Поиск по коду файла

#property strict

class CNotify
{
   public: 
      string   symbol;
      string   text;
      string   key;

      CNotify(string sym, string txt, string uniquekey)
      {
         symbol = sym;
         text   = txt;
         key    = uniquekey;
      }
};

class CNotifyManager
{
private:
   CNotify* _notifies[];
   int      _notifyCount;

private:

   int GetIndex(string symbol)
   {
      for (int i=0; i < _notifyCount;++i)
      {
         if (_notifies[i].symbol == symbol) return i;
      }
      return -1;
   }

   void OnNotifySend(string symbol, string text, string uniquekey)
   {
     int index = GetIndex(symbol);
     if (index < 0)
     {
         ArrayResize(_notifies, _notifyCount + 1);
         _notifies[_notifyCount] = new CNotify(symbol, text, uniquekey);
         _notifyCount++;
         return;
     }
     _notifies[index].key = uniquekey;
     _notifies[index].text= text;
   }

   bool CanSendNotify(string symbol, string uniquekey)
   {
     int index = GetIndex(symbol);
     if (index < 0) return true;

     if (_notifies[index].key != uniquekey) return true;
     return false;
   }

public:

   CNotifyManager()
   {
      _notifyCount = 0;
   }

   void SendNotify(string symbol, string uniquekey, bool sendEmail,  string text)
   {
      if (CanSendNotify(symbol, uniquekey))
      {
         OnNotifySend(symbol, text, uniquekey);
         if (text != "")
         {
            SendNotification(symbol+":" + text);
            Alert(symbol + ":" + text);
            if (sendEmail)
            {
               SendMail("Daily trend reversal alert", symbol+ ":" +text);
            }
         }
      }
   }      
};

class CUtils
{
private:
   datetime         _prevTime;
   CNotifyManager*  _notifyMgr;

public:
   bool   IsNewBar;

   CUtils(void)
   {
      _notifyMgr = new CNotifyManager();
   }

   ~CUtils()
   {
      delete _notifyMgr;
   }

   string GetTimeFrame(int timePeriod)
   {  
      string timeframe="";
      switch (timePeriod)
      {
         case 1: timeframe="M1";break;
         case 5: timeframe="M5";break;
         case 15: timeframe="M15";break;
         case 30: timeframe="M30";break;
         case 60: timeframe="H1";break;
      

Показано первые 50% кода (символов: 3077)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
307,70₽ ≈ $3.76