Alert

Ayrı bir pencerede bir mesaj gösterir.

void  Alert(
   argument,     // ilk değer
   ...           // diğer değerler
   );

Parametreler

argument

[in]  Virgül ile ayrılmış herhangi bir değer. Bilgi çıktısını birkaç satıra bölmek için "\n" veya "\r\n" yeni satır karakterlerini kullanabilirsiniz. Parametrelerin sayısı 64'ü geçemez.

Dönüş değeri

Dönüş değeri yok.

Not

Diziler, Alert() fonksiyonuna geçirilemezler. Diziler elementsel şekilde çıktılanmalıdır. double tipli veriler, 8 ondalık ondalık haneye sahip çıktılar oluşturur, float tipi ise 5 ondalık haneyle gösterilir. Reel sayıları farklı çözünürlükle çıktılamak için, DoubleToString() fonksiyonunu kullanın.

bool tipli veriler "true" veya "false" dizgileriyle çıktılanır. Tarihler YYYY.MM.DD HH:MM:SS şeklinde çıktılar oluşturur. Bir tarihi farklı bir formda görüntülemek için TimeToString() fonksiyonunu kullanın. color tipli veriler ya R,G,B dizgileri şeklinde veya renk kümesinde mevcut olan bir rengin ismiyle çıktılanırlar.

Alert() işlevi Strateji Sınayıcısında çalışmıyor.

Örnek:

//--- numaralandırmalar
enum ENUM_INTERSECT_DIRECTION
  {
   INTERSECT_DIRECTION_NONE0,  // çaprazlama yok
   INTERSECT_DIRECTION_UP  = 1,  // yukarı doğru çaprazlama
   INTERSECT_DIRECTION_DOWN=-1,  // aşağı doğru çaprazlama
  };
 
//--- girdi parametreleri
input    uint               InpPeriod = 10;            // MA periyodu
input    int                InpShift  = 0;             // MA kayması
input    ENUM_MA_METHOD     InpMethod = MODE_SMA;      // MA yöntemi
input    ENUM_APPLIED_PRICE InpPrice  = PRICE_CLOSE;   // MA uygulanan fiyat
 
//--- global değişkenler
int      ExtMaHandle;
int      ExtMaPeriod;
double   ExtData[2];
MqlRates ExtRates[2];
 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- girdi parametresinde sıfır belirtilirse, hareketli ortalamanın hesaplanma periyodu varsayılan değere (10) eşit olacaktır
   ExtMaPeriod=int(InpPeriod<1 ? 10 : InpPeriod);
//--- belirtilen parametrelerle Moving Average göstergesi için bir tanıtıcı oluştur
   ExtMaHandle=iMA(Symbol(),PERIOD_CURRENT,ExtMaPeriod,InpShift,InpMethod,InpPrice);
   ResetLastError();
   if(ExtMaHandle==INVALID_HANDLE)
     {
      PrintFormat("Failed to create iMA() handle. Error code: %d",GetLastError());
      return(INIT_FAILED);
     }
     
//--- son fiyat güncellemesinin zamanını al
   datetime tick_time=TickTime();
//--- son iki çubuktan hareketli ortalama verilerini ve fiyat verilerini al
   if(GetData(ExtMaHandle,ExtData,ExtRates) && tick_time!=0)
     {
      //--- fiyat MA'nın üzerindeyse
      if(ExtRates[1].close>ExtData[1])
        {
         //--- bir mesaj metni oluştur ve uyarı görüntüle
         string message=StringFormat("Bar time: %s. The price is above the moving average",TimeToString(ExtRates[1].time));
         Alert(message+" at "+TimeToString(tick_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
         /*
        Sonuç:
         AlertBar time2024.02.16 18:00The price is above the moving average at 2024.02.16 18:47:43
         */
        }
      else
        {
         //--- fiyat MA'nın altındaysa
         if(ExtRates[1].close<ExtData[1])
           {
            //--- bir mesaj metni oluştur ve uyarı görüntüle
            string message=StringFormat("Bar time: %s. The price is below the moving average.",TimeToString(ExtRates[1].time));
            Alert(message+" at "+TimeToString(tick_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
            /*
           Sonuç:
            AlertBar time2024.02.16 19:00The price is below the moving average at 2024.02.16 19:33:14
            */
           }
         else
           {
            //--- bir mesaj metni oluştur ve uyarı görüntüle
            string message=StringFormat("Bar time: %s. The price and moving average are equal.",TimeToString(ExtRates[1].time));
            Alert(message+" at "+TimeToString(tick_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
            /*
           Sonuç:
            AlertBar time2024.02.16 20:00The price and moving average are equal at 2024.02.16 20:12:22
            */
           }
        }
     }
     
//--- başarılı
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   ResetLastError();
//--- son iki çubuktan hareketli ortalama verilerini ve fiyat verilerini al
   if(!GetData(ExtMaHandle,ExtData,ExtRates))
      return;
//--- mevcut çubukta hareketli ortalamayı çaprazlayan fiyatın yönünü al
   ENUM_INTERSECT_DIRECTION intersect=GetIntersectDirection(ExtData,ExtRates);
 
//--- önceki mesajı kaydetmek için değişken
   static string message_prev="";
 
//--- mevcut çubukta fiyat hareketli ortalamayı yukarı doğru çaprazladıysa
   if(intersect==INTERSECT_DIRECTION_UP)
     {
      //--- çaprazlamanın gerçekleştiği tik zamanını al
      datetime tick_time=TickTime();
      if(tick_time==0)
         return;
      //--- bir mesaj metni oluştur
      string message=StringFormat("Bar time: %s. The price crossed the MA from bottom to top",TimeToString(ExtRates[1].time));
      //--- önceki mesaj mevcut mesaja eşit değilse, mesaj ve tik zamanıyla birlikte uyarı görüntüle
      if(message!=message_prev)
        {
         Alert(message+" at "+TimeToString(tick_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
         message_prev=message;
         /*
        Sonuç:\
         AlertBar time2024.02.16 09:00The price crossed the MA from bottom to top at 2024.02.16 09:20:35
         */
        }
     }
 
//--- mevcut çubukta fiyat hareketli ortalamayı aşağı doğru çaprazladıysa
   if(intersect==INTERSECT_DIRECTION_DOWN)
     {
      //--- çaprazlamanın gerçekleştiği tik zamanını al
      datetime tick_time=TickTime();
      if(tick_time==0)
         return;
      //--- bir mesaj metni oluştur
      string message=StringFormat("Bar time: %s. The price crossed the MA from top to bottom",TimeToString(ExtRates[1].time));
      //--- önceki mesaj mevcut mesaja eşit değilse, mesaj ve tik zamanıyla birlikte uyarı görüntüle
      if(message!=message_prev)
        {
         Alert(message+" at "+TimeToString(tick_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
         message_prev=message;
         /*
        Sonuç:\
         AlertBar time2024.02.16 10:00The price crossed the MA from top to bottom at 2024.02.16 10:42:15
         */
        }
     }
  }
//+------------------------------------------------------------------+
//| Fiyat ve hareketli ortalama verilerini dizilere al               |
//+------------------------------------------------------------------+
bool GetData(int handle,double &ma_data[],MqlRates &price_data[])
  {
   ResetLastError();
//--- son iki çubuktan hareketli ortalama verilerini al
   if(CopyBuffer(handle,0,0,2,ma_data)!=2)
     {
      PrintFormat("CopyBuffer() failed. Error code: %d",GetLastError());
      return(false);
     }
//--- son iki çubuktan fiyat verilerini al
   if(CopyRates(Symbol(),PERIOD_CURRENT,0,2,price_data)!=2)
     {
      PrintFormat("CopyRates() failed. Error code: %d",GetLastError());
      return(false);
     }
 
   return(true);
  }
//+------------------------------------------------------------------+
//| Hareketli ortalamayı çaprazlayan fiyatın yönünü geri döndür      |
//+------------------------------------------------------------------+
ENUM_INTERSECT_DIRECTION GetIntersectDirection(double &ma_data[],MqlRates &price_data[])
  {
   double ma0=ma_data[1];
   double ma1=ma_data[0];
   double close0=price_data[1].close;
   double close1=price_data[0].close;
 
   if(close1<=ma1 && close0>ma0)
      return(INTERSECT_DIRECTION_UP);
   else
     {
      if(close1>=ma1 && close0<ma0)
         return(INTERSECT_DIRECTION_DOWN);
      else
         return(INTERSECT_DIRECTION_NONE);
     }
  }
//+------------------------------------------------------------------+
//| Tik zamanını saniye cinsinden geri döndür                        |
//+------------------------------------------------------------------+
datetime TickTime()
  {
   MqlTick tick={};
 
   ResetLastError();
   if(!SymbolInfoTick(Symbol(),tick))
     {
      PrintFormat("SymbolInfoTick() failed. Error code: %d",GetLastError());
      return(0);
     }
 
   return(tick.time);
  }