MT4 iMAOnArray ve iBandsOnArray eleman sayısının hesaplamalar üzerindeki etkisi - sayfa 7

 
Alexey Viktorov :

if(rates_total-i >= Rates_total-100); işleminden sonra, hesaplamak için yalnızca 100 çubuk kaldığında, iMAOnArray() işlevinin önce ENTIRE dizisini yeniden hesapladığını mı kastediyorsunuz?

Hayır, sadece yarısı.
 
Alexey Viktorov :

if(rates_total-i >= Rates_total-100); işleminden sonra, hesaplamak için yalnızca 100 çubuk kaldığında, iMAOnArray() işlevinin önce ENTIRE dizisini yeniden hesapladığını mı kastediyorsunuz?

iMAOnArray

Dizide depolanan veriler üzerinde hesaplanan Hareketli Ortalama teknik göstergesinin değerini döndürür .

çift iMAOnArray (
    çift         dizi[] , // dizi
    int    toplam , // eleman sayısı
    int    ma_period , // nokta
int            ma_shift , // ortalamanın kayması
int            ma_method , // ortalama alma yöntemi
int            vardiya               // vardiya
);

Seçenekler

sıralamak[]

[içinde] Veri içeren dizi.

Toplam

[içinde] Hesaplanacak öğe sayısı. 0, tüm dizi öğeleri anlamına gelir.  

Doğru, boyut değerinde 0 parametreli iMAOnArray'e ilk çağrı koşulsuz olarak tüm diziyi hesaplayacaktır, o zaman sadece son veya maksimum 2 son değer hesaplanmış gibi görünüyor, kim bilir, belki her şey yeniden hesaplanır. .. Bu yüzden frenler. Bu nedenle, ofset ile kaç çubuk almak istediğiniz önemli değildir, bu durumda tüm dizi yine de dikkate alınır.

 
Sergey Efimenko :

iMAOnArray

Dizide depolanan veriler üzerinde hesaplanan Hareketli Ortalama teknik göstergesinin değerini döndürür .

çift iMAOnArray (
    çift         dizi[] , // dizi
    int    toplam , // eleman sayısı
    int    ma_period , // nokta
int            ma_shift , // ortalamanın kayması
int            ma_method , // ortalama alma yöntemi
int            vardiya               // vardiya
);

Seçenekler

sıralamak[]

[içinde] Veri içeren dizi.

Toplam

[içinde] Hesaplanacak öğe sayısı. 0, tüm dizi öğeleri anlamına gelir.  

Doğru, boyut değerinde 0 parametreli iMAOnArray'e ilk çağrı koşulsuz olarak tüm diziyi hesaplayacaktır, o zaman sadece son veya maksimum 2 son değer hesaplanmış gibi görünüyor, kim bilir, belki her şey yeniden hesaplanır. .. Bu yüzden frenler. Bu nedenle, ofset ile kaç çubuk almak istediğiniz önemli değildir, bu durumda tüm dizi yine de dikkate alınır.

Yani yanlış anladım. Ve karmaşık hesaplamalarınız olmadan neden fren yok?
 
Alexey Viktorov :
Yani yanlış anladım. Ve karmaşık hesaplamalarınız olmadan neden fren yok?
Soru bu, koddan çağrıldığında neden yavaşlıyor, ancak grafik üzerine yerleştirildiğinde neden yavaşlıyor. Genel olarak, burada yalnızca geliştiriciler cevabı nerede arayacaklarını bilirler. Grafiklerde çok sayıda karmaşık göstergem var ve bazıları özyinelemeli döngüler bile kullanıyor ve "uzun süre düşünmeleri" gerekiyor, ancak burada basit bir görev var ve hesaplanması çok uzun sürüyor.
 
Sergey Efimenko :
Soru bu, koddan çağrıldığında neden yavaşlıyor, ancak grafik üzerine yerleştirildiğinde neden yavaşlıyor. Genel olarak, burada yalnızca geliştiriciler cevabı nerede arayacaklarını bilirler. Grafiklerde çok sayıda karmaşık göstergem var ve bazıları özyinelemeli döngüler bile kullanıyor ve "uzun süre düşünmeleri" gerekiyor, ancak burada basit bir görev var ve hesaplanması çok uzun sürüyor.

Grafik üzerinde basit bir kaplamadan bahsetmiyorum. O test kodundan bahsediyorum. Sonuçta orada denir, yerine bindirilir.

Yine de bana öyle geliyor ki dizinin bir kısmını kopyalayarak bu saçmalığı yendim. Ve MODE_LWMA bile tüm diziyi saymakla aynı şekilde yeniden hesaplar.


Kırmızı - tarih boyunca sayıldı. Yeşil son 50 bar.

 
Alexey Viktorov :

...

Yine de bana öyle geliyor ki dizinin bir kısmını kopyalayarak bu saçmalığı yendim. Ve MODE_LWMA bile tüm diziyi saymakla aynı şekilde yeniden hesaplar.

...

O da kazandı.

 
Alexey Viktorov :

Grafik üzerinde basit bir kaplamadan bahsetmiyorum. O test kodundan bahsediyorum. Ne de olsa orada neden olur, onun yerine bindirilir.

Yine de bana öyle geliyor ki dizinin bir kısmını kopyalayarak bu saçmalığı yendim. Ve MODE_LWMA bile tüm diziyi saymakla aynı şekilde yeniden hesaplar.


Kırmızı - tarih boyunca sayıldı. Yeşil son 50 bar.

Yazılarımı bir kelimeden, hatta bir cümleden okuduğunuz anlaşılıyor. Neyi yendi? Böyle bir fikrin ( bar sayısının hesaplanmasında sınırlama olan benzer bir kod) hemen aklıma geldiğini yazdım ve hemen denedim ve performans artışı alamadım çünkü. dizi hala tamamen hesaplanır (toplam = 0), sadece son 100 elemanını kopyalamanız (arabelleği doldurmanız) hesaplamaların frenlenmesini kaldırmaz, elemanların ara belleğe alınmasını yavaşlatmaz, ancak, ya tamamen kabul edilen (toplam= 0) ya da yalnızca ilk N elemanın sonuçlarını (toplam=N) döndüren ortalama dizinin hesaplanması, sonuncularına ihtiyaç duyulmasına rağmen, indeksleme yönünü değiştirmek yapar. istenilen etkiyi vermez.
 
Sergey Efimenko :
Yazılarımı bir kelimeden, hatta bir cümleden okuduğunuz anlaşılıyor. Neyi yendi? Böyle bir fikrin ( bar sayısının hesaplanmasında sınırlama olan benzer bir kod) hemen aklıma geldiğini yazdım ve hemen denedim ve performans artışı alamadım çünkü. dizi hala tamamen hesaplanır (toplam = 0), sadece son 100 elemanını kopyalamanız (arabelleği doldurmanız) hesaplamaların frenlenmesini kaldırmaz, elemanların ara belleğe alınmasını yavaşlatmaz, ancak, ya tamamen kabul edilen (toplam= 0) ya da yalnızca ilk N elemanın sonuçlarını (toplam=N) döndüren ortalama dizinin hesaplanması, sonuncularına ihtiyaç duyulmasına rağmen, indeksleme yönünü değiştirmek yapar. istenilen etkiyi vermez.

Anlaşılan benim mesajlarım da birinden okunmuş... Bir önceki kod uygun değil, hatanın nerede yapıldığını anladım. Son ekran tamamen farklı bir yaklaşımı gösterir, ancak yalnızca son 50 çubuk sayılır.

Kodu hemen yayınlamaya başlamadım, sadece “hala işe yaramayacak” patamushta gibi bir tepki bekliyordum... Kod gizli değil, göstergenizde nasıl çalışacağını kontrol etmek istiyorsanız, söyle bana.

Dmitry Fedoseev :

O da kazandı.

Ve sadece srach üreyebilirsin. Forumun kaç üyesiyle şimdiki gibi bir tonda iletişim kurduğunuzu sayın. Çık dışarı, Şeytan.
 
Alexey Viktorov :

...

Ve sadece srach üretebilirsin. Forumun kaç üyesiyle şimdiki gibi bir tonda iletişim kurduğunuzu sayın. Çık dışarı, Şeytan.

Sizinle aynı ve iletişim kurdu. Burada bir koalisyonsunuz, biliyorum.

Dün burada dizi kopyalama yaklaşımının başarısızlığı hakkında yazdılar. LWMA'da burunlarını dürttüler - işe yaradı. EMA ile kontrol etmek için yeterli tyama var, ancak kutsal gücün taşıyıcısı mı? Kilisede bir mum yakmayı unuttun mu?

Bir şeyler üfleyin, kendinizi üfleyin ve her seferinde - ah, bir hata yaptığımı fark ettim.

Srach. Biraz sıkıntı yaşasaydınız, bu konunun sorununun çözüldüğünü uzun zaman önce görürdünüz.

Bir kez daha gösteriş yapmak istedim ama boynuzları kırdılar ve hemen Şeytan'a ağıt yaktılar. Adam!

 
Alexey Viktorov :

Anlaşılan benim mesajlarım da birinden okunmuş... Bir önceki kod uygun değil, hatanın nerede yapıldığını anladım. Son ekran tamamen farklı bir yaklaşımı gösterir, ancak yalnızca son 50 çubuk sayılır.

Kodu hemen yayınlamaya başlamadım, sadece “hala işe yaramayacak” patamushta gibi bir tepki bekliyordum... Kod gizli değil, göstergenizde nasıl çalışacağını kontrol etmek istiyorsanız, söyle bana.

Ve başka bir kod olduğunu tahmin etmeliydim? Yukarıda, son 100 çubuğun hesaplandığı, ancak aslında tüm çubukların hesaplandığı, ancak yalnızca 100'ünün ara belleğe kopyalandığı ekran var ve neden kodu hemen göndermiyorsunuz? Böyle bir cevap olmayacaktı. Ayrıntılı cevaplardım, anlamadım, ne anlamı var? Kod, neler olduğunu, neyin dikkate alındığını ve yukarıdaki dezavantajlardan herhangi birinin olup olmadığını hemen gösterir. Ekran ne veriyor? Sonuçtan başka bir şey değil, ama sonuçtan zaten bahsettim, farklı şekillerde ulaşılabilir, ancak her biri eldeki görev için kabul edilebilir değil - hesaplama süresini azaltıyor.