Tuval harika! - sayfa 82

 
Vitaliy Kuznetsov #:

Olağan gösterge kodu iyileştirme yönteminin, nesneleri kullanan kapalı koddaki EA'larla olan çatışmayı küresel olarak çözemediği ortaya çıktı.

Uzman Danışmanı geliştirmenin tüm gösterge tablosu göstergeleriyle (ki bu benim görevim) çatışmayı küresel olarak çözeceğini umuyorum.

MT4 build 1353 başlığında yazdım, belki terminal programcıları dikkat eder.

Not: Baykuşlarda değişiklik yaptım ve kayaklarda bir şey gitmedi ...

ObjectGetXXX, ObjectFind, ObjectsTotal, ObjectName, vb. nerede ve neden çağrıldığını bulmak için tüm kodu (gösterge ve Uzman Danışman) inceleyin - bunlar senkrondur ve her şeyi ciddi şekilde yavaşlatabilir. Mümkünse bunlardan kurtulmaya çalışın.

Yukarıda ChartRedraw()!!!! işlevini çağırmayı unutmayın...

 

Sayın moderatörler, bana her türlü saçmalık atfediliyor ve yanıt vermeme izin verilmiyor mu? İnanılmaz!

 
Maxim Kuznetsov #:

ObjectGetXXX, ObjectFind, ObjectsTotal, ObjectName, vb. nerede ve neden çağrıldığını bulmak için tüm kodu (gösterge ve EA) inceleyin - bunlar senkrondur ve her şeyi ciddi şekilde yavaşlatabilir. Mümkünse onlardan kurtulmaya çalışın.

Yukarıda ChartRedraw()!!!! işlevini çağırmayı unutmayın...

Sadece OnChartEvent() işlevini akıllıca yapmanız ve arka arkaya tüm olaylara tepki vermemeniz gerekir. Ya da orada ne olduğunu bilmiyorum... Ve neden burada oturup sorunlu kodu göstermeye bile tenezzül etmeyen adam için düşünelim?

Şimdi ObjectFind() ve ObjectGet()'in 1000000 tekrarından oluşan bir döngü ekledim - her şey normal.

 
Dmitry Fedoseev #:

Sayın moderatörler, bana her türlü saçmalık atfediliyor ve yanıt vermeme izin verilmiyor mu? İnanılmaz!

Böyle bir seçiciliğe maruz kalan tek kişi siz değilsiniz.

 
Dmitry Fedoseev #:

Sadece OnChartEvent() işlevini akıllıca yapmanız ve arka arkaya tüm olaylara tepki vermemeniz gerekir. Ya da ne olduğunu bilmiyorum.... Ve neden burada oturup sorunlu kodu gösterme zahmetine bile girmeyen adam için düşünelim?

Şimdi ObjectFind() ve ObjectGet() işlevlerinin 1000000 tekrarından oluşan bir döngü ekledim - her şey normal.

Dördüncü kez yazacağım, benim için zor değil.

https://www.mql5.com/ru/forum/379526/page9#comment_25865481


Bağlantıyı açarsanız, yazının altında kodu içeren bir ek bulacaksınız. Daha sonra orada tartışmanın kim tarafından ve nasıl geliştirildiğini okuyabilirsiniz.

Sorun özellikle önerilen kodda değil (herhangi bir Uzman Danışmanı bir nesneyle kendiniz yazabilirsiniz), ancak bir gösterge aracılığıyla grafik değiştirme işleviyle çalışırken nesnelerle (tek bir istisna dışında) tüm Uzman Danışmanları etkileyen genel bir hatadır.

Nikolay çözümünü sundu, ancak bu tür kodların çalışmasında hatalarım var, sorunla daha fazla ilgileniyorum.

Новая версия платформы MetaTrader 4 build 1350 - Если у вас проблемы с дешбордами, то придется удалять объекты чарта.
Новая версия платформы MetaTrader 4 build 1350 - Если у вас проблемы с дешбордами, то придется удалять объекты чарта.
  • 2021.11.10
  • www.mql5.com
точнее в очередностях OnInit удалении своих объектов чарта. Тут ремонт терминала не имеет смысла не создавайте объектов по крайней мере до первого OnChartEvent. И удалять объекты пачкой лучше по ChartObjectsDelete
 
Dmitry Fedoseev #:

Sadece OnChartEvent() işlevini akıllıca yapmanız ve arka arkaya tüm olaylara tepki vermemeniz gerekir. Ya da ne olduğunu bilmiyorum.... Ve neden burada oturup sorunlu kodu gösterme zahmetine bile girmeyen adam için düşünelim?

Şimdi ObjectFind() ve ObjectGet() işlevlerinin1000000 tekrarından oluşan bir döngü ek ledim - her şey normal.

Belirsiz bir şüphem var: Hiç bir döngüden daha karmaşık bir şey yazdınız mı?

 
Vitaliy Kuznetsov #:

Dördüncü kez yazacağım, benim için sorun değil.

https://www.mql5.com/ru/forum/379526/page9#comment_25865481


Bağlantıyı açarsanız, yazının altında kodu içeren bir ek bulacaksınız. Daha sonra orada tartışmanın kim tarafından ve nasıl geliştirildiğini okuyabilirsiniz.

Sorun özellikle önerilen kodda değil (herhangi bir Uzman Danışmanı bir nesneyle kendiniz yazabilirsiniz), ancak bir gösterge aracılığıyla grafik değiştirme işleviyle çalışırken nesnelerle (tek bir istisna dışında) tüm Uzman Danışmanları etkileyen genel bir hatadır.

Nikolay çözümünü sundu, ancak bu tür kodların çalışmasıyla ilgili hatalarım var, sorunla daha fazla ilgileniyorum.

İşte değişiklikler:

   if(sparam=="Win_Ea_"){ // вот тут надо поцивильней сделать, из класса брать имя... но уж сами как-нибудь 
      if(id == CHARTEVENT_OBJECT_CLICK){
         if(win.BtnClickUP()){
         
            win.Process();
            
            ChartPeriodSet(true);
            
         }
         if(win.BtnClickDN()){
         
            win.Process();
            
            ChartPeriodSet(false);
            
         }
      }
   }
   if(id == CHARTEVENT_MOUSE_MOVE){
      MouseX=(int)lparam;
      MouseY=(int)dparam;
      
   }

Korkunç takılmalardan kurtulmayı başardım. Düğmelere ölçülü bir hızda basarsanız her şey yolunda gidiyor.

Ancak bir ağaçkakan gibi vurmaya başlarsanız, yine takılmalar yaşarsınız, ancak bunlar farklı ve daha kısadır. Sanmıyorum

onlardan kurtulamazsınız. Belki de zaman dilimi yapısıyla ilgilidir.

Düğmeler üzerinde çalışmam gerekiyor, böylece basılı / basılmamış pozisyonlar var ve düğmeye hemen basılmaması için eylemsizlik getiriyorum.

0.1 saniyelik bir gecikme durumu düzeltecektir ve kullanıcı bunu fark etmeyecektir.

--

Aslında, bir uzman olmadan düğmelere öfkeli bir hızla basabilirsiniz....

 

Ve işte buradayız, askılardan tamamen kurtuldum.

Eğri büğrü olabilir ama asıl önemli olan nokta bu:

void windows_class::~windows_class(){
   //Canvas.Destroy();
}
int OnDeinit(const int r){
   if(r==REASON_REMOVE){
      Canvas.Destroy();
   }
}

Mesele, grafiği değiştirirken bir nesneyi silmemektir.

Destroy() ile ne olacağını görmeliyiz... eğer bu şekilde bırakmak mümkünse...

 

Herkese merhaba!)

Özür dilerim, ama eğer mq4'ten bahsediyorsak, o zaman belki bu şekilde çözülebilir :?)

void OnChartEvent(const int     id,
                  const long   &lparam,
                  const double &dparam,
                  const string &sparam)
{
   if(id == CHARTEVENT_CLICK
   || id == CHARTEVENT_CHART_CHANGE)
   {ChartSetSymbolPeriod(0,NULL,0);}
}
 

Başka ne frenler yaratabilir:

void OnTick(void){
  win.Process();
}

Neden?