Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1468

 

Sonunda rates_total ve prev_calculated'ın ne anlama geldiğini anlayamıyorum.

Belgeler şöyle diyor: İlk parametre rates_total, hesaplama için gösterge için mevcut çubuk sayısını içerir ve grafikte mevcut çubuk sayısına karşılık gelir.

Örneğin MA5, 5 çubuğun ortalaması, 100 çubuk gösterecek şekilde ayarlanmıştır. Ardından gösterge 104. çubuktan 100. çubuğa kadar hesaplayacak ve çizgiyi 100. çubuktan çizmeye başlayacaktır. Sonra rates_total = 5 veya 100 veya 104?

 
Novichokkk çubuk sayısını içerir ve grafikte mevcut çubuk sayısına karşılık gelir.

Örneğin MA5, 5 çubuğun ortalaması, 100 çubuğu gösterecek şekilde ayarlanmıştır. Ardından gösterge 104. çubuktan 100. çubuğa kadar hesaplayacak ve çizgiyi 100. çubuktan çizmeye başlayacaktır. Sonra rates_total = 5 veya 100 veya 104?

Rates_total , hesaplama için mevcut olan grafiğin çubuk sayısıdır. Başka bir deyişle, Bars()'tır.

prev_calculated , göstergenin önceki OnCalculate() çağrısında kaç çubuk hesapladığıdır. Ekonomik hesaplamaları düzenlemek için gereklidir.

prev_calculated, rates_total değerine eşitse, henüz hiçbir şeyin hesaplanmadığı anlamına gelir ve gösterge tamponlarını başlatmak ve tüm geçmişin tam bir hesaplamasını yapmak gerekir.

Genel olarak aşağıdaki yapıyı kullanabiliriz:

//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      // Присваиваем limit значение количества доступных баров-1
      limit=rates_total-1;
      // Вот тут нужно инициализировать все буферы пустыми значениями
      ArrayInitialize(Buffer0,EMPTY_VALUE);
      ArrayInitialize(Buffer1,0);
      ArrayInitialize(Buffer2,clrNONE);
      // ... и т.д.
     }
//--- Экономный просчёт индикатора
   for(int i=limit;i>=0;i--)
     {
      Buffer0[i]=(/*что-то там*/);
     }
 
Artyom Trishkin #:

rates_total, hesaplama için mevcut grafik çubuklarının sayısıdır. Başka bir deyişle, Bars()'tır.

prev_calculated , göstergenin önceki OnCalculate() çağrısında kaç çubuk hesapladığını gösterir. Ekonomik hesaplamaları düzenlemek gerekir.

prev_calculated değeri rates_total değerine eşitse, henüz hiçbir şey hesaplanmamış demektir ve gösterge tamponlarını başlatmak ve tüm geçmişin tam bir hesaplamasını yapmak gerekir.

Genel olarak, aşağıdaki yapıyı kullanabiliriz:

Neden rates_total - Bars() yerine yazmıyorsunuz?

int limit=Bars()-prev_calculated;

Kusura bakmayın, tabii ki, bir lamer olduğum için. MKL5 ile ilgili birkaç kitaptan oluşan belgeleri inceliyorum. Tüm nüanslar açıklanmamış. Kitaplarda da yok. Ayrı olarak kitaplardaki dil açık. Yapıların nasıl bir araya getirildiğini.... neyi nereden ve ne için.... Bu konuya giriyorum. Bir sürü kontrol ve çift kontrol. Basit bir mashki kodu açtım ve çok fazla satır var. Ve tek yapmanız gereken bir diziyi boşaltmak (veya erişmek), dizideki falanca indisten falanca indise kadar bir değer için hesaplama yapmak ve bu hesaplamalarla dizide nereden nereye kadar indislerle gösteren kayan bir pencereden geçmek gibi görünüyordu. Satırı ekranda görüntülemek için Evet. Hayır.
 
Novichokkk #:

Neden rates_total yerine Bars() yazmıyorsunuz?

Kusura bakmayın, tabii ki, bir lamer olduğum için. MKL5 ile ilgili birkaç kitaptan oluşan belgeleri inceliyorum. Tüm nüanslar açıklanmamış. Kitaplarda da. Kitaplardaki dil üzerinde ayrı ayrı açık. Yapıların nasıl bir araya getirildiğini.... neyi nereden ve ne için.... Bu konuya giriyorum. Bir sürü kontrol ve çift kontrol. Basit bir mashki kodu açtım ve çok fazla satır var. Ve tek yapmanız gereken bir diziyi boşaltmak (veya erişmek), dizideki falanca indisten falanca indise kadar bir değer için hesaplama yapmak ve bu hesaplamalarla dizide nereden nereye kadar indislerle gösteren kayan bir pencereden geçmek gibi görünüyordu. Çizgiyi ekranda görüntülemek için evet. Ve hayır.

Böyle bir yapı da kullanabilirsiniz. Ama neden? İşleyicinin parametrelerinde zaten önceden tanımlanmış değişkenler varken...

Bars() gerçekten ihtiyaç duyduğunuzda kullanılmalıdır - başka bir sembol/zaman damgası ile mevcut çubukların sayısını alırken.

 
Artyom Trishkin #:

Bu tasarımı siz de kullanabilirsiniz. Ama neden? İşleyicinin parametrelerinde zaten önceden tanımlanmış değişkenler varken...

Bars() gerçekten ihtiyaç duyulduğunda kullanılmalıdır - başka bir sembol/zaman dilimine göre mevcut çubukların sayısını alırken.

Artyom, bazen herkes yorulur ve hata yapar. Bunu bir eleştiri olarak görmeyin, ancak rates_total - Bars() her zaman sıfır olacaktır...

Genel olarak, bu karaktere açıklama yapmak çok zor. USE'nin kurbanı...

 
Alexey Viktorov #:

Artyom, bazen herkes yorulur ve hata yapar. Bunu bir eleştiri olarak görmeyin, ancak rates_total - Bars() her zaman sıfır olacaktır...

Genel olarak bu karaktere açıklama yapmak çok zordur. ABD'nin bir kurbanı...

Evet, haklısınız. Birinin bu şekilde hesaplamaya karar vereceğini düşünmemiştim. Gözümün ucuyla hesaplamada Bars'ı gördüm ve rates_total yerine olduğunu düşündüm.

Olur böyle şeyler, teşekkürler.

 
Artyom Trishkin #:
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      // Присваиваем limit значение количества доступных баров-1
      limit=rates_total-1;
      // Вот тут нужно инициализировать все буферы пустыми значениями
      ArrayInitialize(Buffer0,EMPTY_VALUE);
      ArrayInitialize(Buffer1,0);
      ArrayInitialize(Buffer2,clrNONE);
      // ... и т.д.
     }
//--- Экономный просчёт индикатора
   for(int i=limit;i>=0;i--)
     {
      Buffer0[i]=(/*что-то там*/);
     }

Kişiye yardım etmek istediğinizi anlıyorum, ancak görünüşe göre yanlışlıkla sadece kafasını karıştırmışsınız.

Bu durumda ekonomik yanlış hesaplama biraz farklı görünüyor.

for(int i=limit;i<rates_total;i++)
 
Aleksandr Slavskii #:

Kişiye yardım etmek istediğinizi anlıyorum, ancak görünüşe göre yanlışlıkla sadece kafası karışmış.

Bu vakadaki ekonomik yanlış hesaplama biraz farklı görünüyor.

Sizce neyi yanlış yazdım? Lütfen gerekçelendirin.

Benim ve sizin örneğinizde limit nedir ve döngü nereden gelecektir.

 
Novichokkk #:

Neden rates_total yerine Bars() yazmıyorsunuz?

Esasen rates_total ve Bars() aynı şeydir, sadeceBars() bir fonksiyondur, bu nedenle çağrısı yürütme süresi açısından rates_total değişkeninin değerini okumaktan daha maliyetli olacaktır.

 
Artyom Trishkin #:

Sizce neyi yanlış yazdım? Gerekçelendirin lütfen.

Benim ve sizin örneğinizde limit nedir ve döngü nereden gelecektir.

Oops))))))

Doğru görmedim.

if(limit>1)

Ne yazdığınızı hiç anlamadım.

Özür dilerim.