Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 178

 
Andrey Barinov :

ExpertRemove'un çalışmadığı yerde hala ChartClose() vardır. Sorunun ne olduğunu anlamıyorum. Hesap değişikliğinden sonra ne olur? Bir danışmanla birlikte ek bir çizelge görünüyor mu? Yoksa sadece mevcut grafiğin sembolü mü değişiyor? Belki ChartID değişir ve bu yüzden önceki çözümünüz çalışmıyor? Onaylar yine de işlenir, bu nedenle OnInit oluşmazsa OnTick'e yüklemeniz gerekir.

Tüm bu soruları yanıtladığınızı varsayalım, o zaman ne oldu? Konuyu araştırmak istiyorsanız, arabanızda bir test yapmadan çalışmayacaktır.

Bu çalışma çözümüne geldi.

 #include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

// Выгружает себя, если после смены счета отсутствует символ.
void OnDeinit ( const int Reason )
{
   if (Reason == REASON_ACCOUNT )
  {
     MqlTick Tick;
    
     if (! SymbolInfoInteger ( _Symbol , SYMBOL_CUSTOM ) && ! SymbolInfoTick ( _Symbol , Tick))
    {
       Alert ( "Account is changed!" );
      
       if ( EXPERT::Remove() )
         Alert ( "Expert is removed!" );
      
       // ExpertRemove(); // Не поможет.
       // ChartClose();   // Не лучшее решение.
    }
//  else
       // Для кастомных и других случаев дополнить код следущим решением.
       // https://www.mql5.com/ru/forum/170952/page175#comment_16365819     
  }  
}


Tehdit Bir savaş danışmanı için gereklidir.

 
fxsaber :

Lütfen hesabı değiştirirken kendini boşaltan EA'nın kaynak kodunu burada gösterin.

Kaynak daha sonra gelecek. Öncelikle bu özelliğin size uygun olup olmadığını kontrol edin.

 
Alexey Viktorov :

Kaynak daha sonra gelecek. Öncelikle bu özelliğin size uygun olup olmadığını kontrol edin.

Başlatıldı. Çalışmıyor.

 2020.05 . 21 10 : 49 : 58.028 00 (EURUSD,M1)  Идиот
2020.05 . 21 10 : 49 : 58.028 00 (EURUSD,M1)   ExpertRemove () function called

Görünüşe göre, bu zaten günlükte Rusça kelimeler kullanma eğilimi.

 
fxsaber :

Başlatıldı. Çalışmıyor.

Görünüşe göre, bu zaten günlükte Rusça kelimeler kullanma eğilimi.

Bunlar günlük değil. Seni incitmek istemedim. Bir şeyler yolunda gitmediğinde bunu kendim için yazıyorum. Sonra silmeyi unuttum.

İstediğini beklemiyorsan, siktir git. Hesabı değiştirirken danışmanı grafikten çıkarmak istediniz, bu danışman gerçekleştirir. Senin için nasıl işe yaramadığını bilmek istemiyorum.
 
Alexey Viktorov :

Bunlar günlük değil. Seni incitmek istemedim. Bir şeyler yolunda gitmediğinde bunu kendim için yazıyorum. Sonra silmeyi unuttum.

Önerilenden farklı çalışan bir çözüm bulursanız, görmek ilginç olacaktır.

 
Alexey Viktorov :

Hesabı değiştirirken danışmanı grafikten çıkarmak istediniz, bu danışman gerçekleştirir.

Maalesef öyle değil.



Genel olarak, ExpertRemove'u REASON_ACCOUNT ile çağırmak kesinlikle anlamsız bir şeydir.

 
fxsaber :

Maalesef öyle değil.



Genel olarak, ExpertRemove'u REASON_ACCOUNT ile çağırmak kesinlikle anlamsız bir şeydir.

Yeni başlayan biri değilseniz, danışmanın yalnızca grafikle çalıştığını bilmelisiniz. Bir program olmadan, yalnızca hizmet çalışır. O nasıl çalışıyor ??? Göreyim seni.

 
Alexey Viktorov :

Yeni başlayan biri değilseniz, danışmanın yalnızca grafikle çalıştığını bilmelisiniz. Bir program olmadan, yalnızca hizmet çalışır. O nasıl çalışıyor ??? Göreyim seni.

Bu konuda ne yazık ki tamamen yetersizsiniz. Burada önerilen çalışma çözümleri, işin gerçek inceliği ve gerçekten nasıl çalıştığının anlaşılmasıdır.

 
fxsaber :

Bu konuda ne yazık ki tamamen yetersizsiniz. Burada önerilen çalışma çözümleri, işin gerçek inceliği ve gerçekten nasıl çalıştığının anlaşılmasıdır.

İyi evet. Burada sadece bir kalifiye kişi var.

 

Bir seçenek olarak.

 int OnInit ( void )
{
     string name_global = "exp_account" ;
     if ( GlobalVariableCheck (name_global) )
     {
           if ( AccountInfoInteger ( ACCOUNT_LOGIN ) !=   GlobalVariableGet (name_global) )
               if ( GlobalVariableDel (name_global) )
                     ExpertRemove ();
     }
     else
           GlobalVariableSet ( name_global, AccountInfoInteger ( ACCOUNT_LOGIN ) );

     return ( INIT_SUCCEEDED );
}