OnInit

Fonksiyon, Init olayı meydana geldiğinde göstergeler ve uzman danışmanlarda çağrılır. Çalışan bir MQL5 programını başlatmak için kullanılır. Fonksiyon için iki seçenek vardır.

Sonucu geri döndüren versiyon

int  OnInit(void);

Geri dönüş değeri

int tip değeri sıfır, başarılı başlatma anlamına gelmektedir.

INIT_FAILED geri döndürüldüğünde, Uzman Danışman grafikten zorla kaldırılır.

INIT_FAILED geri döndürüldüğünde, gösterge grafikten kaldırılmaz. Grafik üzerinde kalan gösterge çalışmaz - olay işleyicileri göstergede çağrılmaz.

Gerçekleşim sonucunu geri döndüren OnInit() çağrısı sadece program başlatmasına izin verdiği için değil, ayrıca programın erken sonlandırılması durumunda hata kodunu geri döndürdüğünden dolayı kullanım için önerilmektedir.

Sonuç geri dönüşü olmayanversiyon sadece eski kodlarla uyumluluk için bırakılmıştır. Kullanım için önerilmemektedir

void  OnInit(void);

Not

Init olayı, bir uzman danışmanı veya bir indikatörü yükledikten hemen sonra oluşturulur. Olay, komut dosyaları için oluşturulmaz. OnInit() fonksiyonu bir MQL5 programını başlatmak için kullanılır. Eğer OnInit() int tipi geri dönüş değerine sahipse, sıfırdan farklı geri dönüş kodu, başarısız başlatma anlamanına gelmektedir ve REASON_INITFAILED sonlandırma neden kodu ile Deinit olayını oluşturur.

Void tipinin OnInit() fonksiyonu her zaman başarılı başlatma anlamına gelmektedir ve kullanım için önerilmemektedir.

Uzman danışman girdilerini optimize etmek için ENUM_INIT_RETCODE listesindeki değerleri bir geri dönüş kodu olarak kullanılması önerilir. Bu değerler, en uygun test temsilcilerinın seçimi de dahil olmak üzere, optimizasyon işlemi yönetimini oragize etmeyi amaçlanmaktadır. Testi çalıştırmadan önce uzman danışman başlatması sırasında, TerminalInfoInteger() fonksiyonunu kullanarak temsilci yapısı ve kaynakları (çekirdek sayısı, serbest bellek miktarı vb.) hakkında verileri talep edebilirsiniz. Elde edilen verilere dayanarak, test temsilcisinin kullanılmasına izin verebilir veya onu uzman danışman optimizasyonunu yapmasından yasaklayabilirsiniz.

Tanımlayıcı

Açıklama

INIT_SUCCEEDED

Başlatma başarılı, uzman danışman testi devam ettirilebilir.

Bu kod sıfır değeri ile aynı anlamdadır – test aygıtındaki uzman danışman başlatımı başarılıdır.

INIT_FAILED

Başlatma başarısızdır. Kaçınılmaz hatalardan dolayı teste devam etmenin bir anlamı yoktur. Örneğin, uzman danışman işleyişi için gerekli bir gösterge oluşturmak imkansızdır.

Bu değerin geri dönüşü sıfırdan farklı bir değerin geri dönüşü ile aynı anlamdadır – test aygıtındaki uzman danışman başlatımı başarısızdır.

INIT_PARAMETERS_INCORRECT

Bir programlayıcı tarafından yanlış bir girdi parametre kümesini belirtmek için tasarlanmıştır. Genel optimizasyon tablosunda, bu geri dönüş kodlu sonuç dizisi kırmızı olarak vurgulanacaktır.

Bu gibi bir uzman danışman girdiler kümesi için bir test gerçekleştirilmemiştir . Temsilci, yeni bir görev almak için hazırdır.

Bu değer alındığında, strateji sınayıcısı bu görevi tekrar gerçekleşimi için diğer temsilcilere aktarmaz.

INIT_AGENT_NOT_SUITABLE

Başlatma sırasında herhangi bir program gerçekleşim hatası yoktur. Ancak, bazı nedenlerden dolayı, temsilci, testi yürütmek için uygun değildir. Örneğin, yeterli RAM yoktur, OpenCL desteği yoktur, vb.

Bu kodun geri dönüşü ile, temsilci bu optimizasyonun sonuna kadar artık görev almayacaktır.

Strateji sınayıcısında INIT_FAILED/INIT_PARAMETERS_INCORRECT i geri döndüren OnInit() i uzman danışmanları optimize ederken kullanmanın dikkate alınması gereken bazı alışılmadık durumları vardır:

  • OnInit() fonksiyonunun INIT_PARAMETERS_INCORRECT ı geri döndürmesini içeren parametrelerin kümesi, test için uygun kabul edilmez ve genetik optimizasyon sırasında bir sonraki popülasyonu elde etmek için kullanılmaz. Çok fazla "atılmış" parametre seti, en uygun uzman danışman parametrelerini ararken yanlış sonuçlara yol açabilir. Arama algoritması, optimizasyon kriteri fonksiyonunun düzgün olduğunu ve tüm girdi parametrelerinde boşluk olmadığını varsayar.
  • Eğer OnInit() fonksiyonu INIT_FAILED değerini geri döndürürse, bu, bir sınamanın başlatılamayacağı ve uzman danışmanın temsilcinin belleğinden kaldırılacağı anlamına gelir. Uzman danışman, yeni bir parametre seti ile bir sonraki geçişi gerçekleştirmek için tekrar yüklenir. Sonraki optimizasyon geçişini başlatmak, TesterStop()'ı çağırmaktan çok daha fazla zaman alır.

Bir uzman danışman için örnek OnInit() fonksiyonu

//--- girdi parametreleri
input int      ma_period=20; // hareketli ortalama zaman aralığı
 
//--- uzman danışmanda kullanılan gösstegenin yönetimi
int indicator_handle;   
//+------------------------------------------------------------------+
//| Uzman danışman başlatma fonksiyonu                               |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- ma_period geçerliliğini konrol et
   if(ma_period<=0)
     {
      PrintFormat("Geçersiz ma_period girdi değeri: %d",ma_period);
      return (INIT_PARAMETERS_INCORRECT);
     }
//--- optimizasyon sırasında
   if(MQLInfoInteger(MQL_OPTIMIZATION))
     {
      //--- temsilci için uygun RAM miktarını kontrol et
      int available_memory_mb=TerminalInfoInteger(TERMINAL_MEMORY_TOTAL);
      if(available_memory_mb<2000)
        {
         PrintFormat("Test temsilcisi için yetersiz bellek miktarı: %d MB",
                     available_memory_mb);
         return (INIT_AGENT_NOT_SUITABLE);
        }
     }
//--- göstergeyi kontrol et
   indicator_handle=iCustom(_Symbol,_Period,"My_Indicator",ma_period);
   if(indicator_handle==INVALID_HANDLE)
     {
      PrintFormat("My_Indicator yönetiminin oluşumu başarısız oldu. Hata kodu %d",
                  GetLastError());
      return (INIT_FAILED);
     }
//--- Uzman danışman başlatma başarılı oldu
   return(INIT_SUCCEEDED);
  }

Ayrıca bakınız

OnDeinit, Olay yönetimi fonksiyonları, Program yürütme, Müşteri terminali olayları, Değişkenlerin başlatılması, Nesneleri oluşturma ve silme