"MQL5 Tarif Defteri Gösterge Alt Pencere Kontrolleri - Düğmeler" makalesi için tartışma - sayfa 6

 
tol64:

Her saniye olması gerekmiyor, orada başka bir olayda bir alternatif var (zaten tartışıldı). Lütfen bana burada nasıl yaptığıma dair bir örnek verin. ) Uzman Danışmanın bu olaya ihtiyacı olması, ancak göstergenin olmaması koşulundan. Bu şekilde daha net olacak.

Not : Düzeltme. Bir hata yaptım. )) Sizin varyantınız daha doğru değil. Hiç uymuyor. Bu nedenle, yukarıdaki koşula dayalı bir örnek vermek daha iyidir.

Gösterge bu olaya ihtiyaç duymazsa, basitçe işlemez. Ayrıca, Uzman Danışman ihtiyaç duymadığı olayları devre dışı bırakmamalıdır. Onları açabilir, ancak kapatamaz. Çünkü penceresinden hangi olayların geçtiği ve bunlara kimin ihtiyaç duyabileceği onu ilgilendirmez.

 
C-4:

Gösterge bu olaya ihtiyaç duymuyorsa, basitçe işleme koymaz. Ayrıca, Uzman Danışman ihtiyaç duymadığı olayları devre dışı bırakmamalıdır. Onları açabilir, ancak kapatamaz. Çünkü penceresinden hangi olayların geçtiği ve bunlara kimin ihtiyaç duyabileceği onu ilgilendirmez.

Mesele şu ki, bu olay işlenmeyebilir (sadece unutabilirsiniz). Ancak bu, OnChartEvent() işlevindeki olay kuyruğunun belirli bir anda ihtiyaç duyulmayan şeylerle dolmayacağı anlamına gelmez.

Bu da dakikada binlerce gereksiz olay anlamına gelir. Peki ya grafikte birkaç program varsa? Bir argüman değil mi?

Bir olayın etkin olup olmadığını görmek için her saniye bir kontrol yaparsanız ve şu anda etkin değilse ancak gerekliyse etkinleştirirseniz çok daha az kaynak israf edilir. Bu da bir argüman değil mi? O zaman kendi yönteminizle yapın.

Daha fazla argümanım yok. ) Fikrimi değiştirecek bir şey duymadığım için fikrimin arkasında duracağım.

Güzel. O zaman bu olayın onu etkinleştiren program tarafından devre dışı bırakılmasına gerek olmadığını düşünenlere bir sorum var.

Neden? )

Yani:

1. Neden ihtiyaç duyulmayan bir şeyi (dakikada binlerce olay) bırakalım?

2. (başka bir formülasyonda) Daha az harcamak varken neden daha fazla kaynak harcayasınız?

"Eğer bir olaya ihtiyaç duyulmuyorsa, onu işleme koymayın" gibi seçenekler şahsen hiç hoşuma gitmiyor. Birini devre dışı bırakamazsanız, diğerini de devre dışı bırakamazsınız ve bundan ne elde edeceksiniz?

 

Makalenin sayın yazarı, "yeni başlayanlara" savaşmaya ve öğretmeye çalıştığınız ürünlerinizin iç çelişkilerini açıklamamak için boşuna uğraşıyorsunuz.

Böylece yazar, göstergesinin doğru çalışmasını bozabilecek kaygan anları göstermiştir. Harika, şimdi "yeni başlayanlar" için şu açıktır:

  1. Grafikten herhangi bir programı silerken, diğer programlara zarar vermemeyi düşünmelisiniz.
  2. Hiçbir durumda çakışan programları bir grafiğe yerleştirmemelisiniz, ancak bunları söz konusu sembolün grafiğinin diğer pencerelerine yerleştirmek daha iyidir. Bunu bilmeyen biri varsa, o zaman bir sembol yeterli sayıda grafik penceresi açabilir.
  3. Her grafiğin kendine özgü özellikleri vardır. Bu nedenle, bunları değiştirerek diğer programların doğru çalışmasını bozabilirsiniz. Hiçbir koşul altında bu yapılmamalıdır!
  4. "Kusursuz" olmalıdır. Yani, bir gösterge veya başka bir program biçimindeki bir virüs, programlarınızda kullandığınız bir grafiğin özelliklerini değiştirmeye çalışırsa, bunu kontrol etmelisiniz. Ve eğer bu düzenli olarak gerçekleşiyorsa - virüsü kaldırın!
  5. Finansal piyasalara yönelik programlardaki hatalar çoğu zaman büyük kayıplara yol açar. Bunu unutmayın!
 
tol64:

1. Neden ihtiyaç duyulmayanı bırakalım (dakikada binlerce olay) ?

2. (başka bir formülasyonda) Daha az harcamak varken neden daha fazla kaynak harcayalım?

"Eğer bir olaya ihtiyaç duyulmuyorsa, onu işleme koymayın" gibi seçenekler şahsen hiç hoşuma gitmiyor. Birini devre dışı bırakamazsınız, diğerini de devre dışı bırakamazsınız ve bundan ne elde edeceksiniz?

Tamamen kontrollü bir kod elde edeceksiniz.

Performansı vurguluyorsunuz, ancak bu etkinleştirilmiş olayla çok düşüyor mu? Bu soruyu cevaplamak için, bu olayı test eden basit bir Uzman Danışmanı özel olarak yazdım. Farklı kombinasyonları test ettikten sonra aşağıdaki tabloyu elde ettim:

Mod
CPU yükü %
EVENT_MOVE_MOUSE etkinleştirildiğinde, bu olayın Uzman Danışman'da işlenmesi etkinleştirilir.9%
EVENT_MOVE_MOUSE etkinleştirildiğinde, bu olayın Uzman Danışman'da işlenmesi devre dışı bırakılır.
6%
EVENT_MOVE_MOUSE kapatılır, bu olayın Uzman Danışman'da işlenmesi kapatılır.
5-6%
Uzman Danışman kapatılır. Grafik kapalıdır. Fareyi MetaTrader penceresinin üzerine getirmeniz yeterlidir.
5-6%

Gördüğünüz gibi, gerçek yük yalnızca bu olayın gerçek işlenmesi gerçekleştiğinde artar. CPU yüküne göre değerlendirildiğinde, MetaTrader'ın bu olaya aboneliğin etkin olup olmadığına bakılmaksızın fare konumunu izlemesi dikkat çekicidir. Genel olarak, varsayımsal kaynaklardan tasarruf etmenin anlamsız olduğu ortaya çıkıyor, çünkü fare izleme yine de gerçekleştirilecek.

Uzman Danışman kodunu test edin:

//+------------------------------------------------------------------+
//|Test.mq5 |
//| Telif Hakkı 2013, MetaQuotes Software Corp. | |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Uzman başlatma işlevi|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ObjectCreate(0, "Edit", OBJ_EDIT, 0, 0, 0);
   ObjectSetInteger(0, "Edit", OBJPROP_XSIZE, 400);
   //Etkinliği uygun gördüğümüz şekilde açıp kapatın
   ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, false);
   
//---
   return(INIT_SUCCEEDED);
  }
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   //Comment the block if it is not necessary to process the incoming event.
   if(id == CHARTEVENT_MOUSE_MOVE)
   {
      string label = (string)lparam + " " + (string)dparam + " " + sparam;
      //printf(sparam);
      ObjectSetString(0, "Edit", OBJPROP_TEXT, label);
      ChartRedraw(0);
   }
}
Знакомство с MQL5: написание простого советника и индикатора
Знакомство с MQL5: написание простого советника и индикатора
  • 2010.03.16
  • Denis Zyatkevich
  • www.mql5.com
В этой статье проведен краткий обзор языка MQL5, приведен пример написания советника и индикатора. Данная статья ориентирована как на читателей, знакомых с программированием на языке MQL4, так и на тех, кто только начинает знакомство с программированием торговых систем и индикаторов.
 

1. Yığında bir olayın kaçırılması durumunu her zaman göz önünde bulundurmalısınız. Bir olayın kaçırılması durumunda kritik bir şey olabilirse, bu çok kötüdür.

2. Grafiği kendinize uyacak şekilde özelleştirmek kötüdür. Bu, sihirbaz olmadan otomatik bir ticaret makinesiyle ticaret yapmakla aynı şeydir.

 
DC2008:

Makalenin sayın yazarı, "yeni başlayanlara" savaşmaya ve öğretmeye çalıştığınız ürünlerinizin iç çelişkilerini açıklamamak için boşuna uğraşıyorsunuz.

Böylece yazar, göstergesinin doğru çalışmasını bozabilecek kaygan anları göstermiştir. Harika, şimdi bir "acemi" için açık ki:

...

Kendinize olan güveninizi haklı çıkarmak için 20 kural daha bulabilir ve sonra kesinlikle kafanızı karıştıracak ve yeni başlayanlara "yardım" edeceksiniz. Bu durumda çelişkiler ve yanlış anlamalar tarafınızdan gözlemlenmiştir. )

C-4:

Tam kontrollü bir kod alacaksınız.

...

Siz kontrol ettiğinizde kontrol edilecektir. Bu durumda, her şeyin kontrol edilmemesini, yani şu anda gerekli olmayan ve çok sık yeniden üretilebilecek bir olayı bırakmayı öneriyorsunuz. Basit örneklerde bu fark edilmeyebilir. Belki de daha karmaşık programlarda gerekli olmayan her şeyi devre dışı bırakma ihtiyacını göreceksiniz.

 
TheXpert:

1. Yığında bir olayın kaçırılması durumunu her zaman göz önünde bulundurmalısınız. Bir olayın kaçırılması durumunda kritik bir şey olabilirse, bu çok kötüdür.

...

Örneğin olay kuyruğunun taşması gibi mi?
 

tol64:

Affedersiniz, sizi başka bir eğitim veya tarif yazmaktan alıkoyuyor olabilir miyim?

Değilse, gösterge alt penceresindeki kontrol hakkındaki makalenizi tartışmaya devam edelim. Yani, bir göstergede nasıl kullanışlı bir menü yapılacağına dair toplu bir çözüm (veya bir fikir) sunuyorsunuz. Güzel, makalenin amacı çok değerli! Ancak "yeni başlayan" bir programcı tüm bu cephaneliği nasıl kullanabilir? Özel fonksiyonlar nereye yerleştirilir? Örnekle gösterin. Ve aynı zamanda, örneğin 5 düğme kullanmak için kodda neleri düzeltmeniz gerektiğini açıklayın? Bunu bir acemi sorusu olarak düşünün.

 
tol64:
Olay kuyruğu taştığında olduğu gibi mi?
Evet.
 
DC2008:
Makalenizdeki her şeyin mükemmel olduğundan bu kadar emin misiniz?