"Yardımcı Göstergelerle Bellek Tüketimini Azaltma" makalesi için tartışma

 

Yeni makale Yardımcı Göstergelerle Bellek Tüketimini Azaltma yayınlandı:

Bir gösterge, hesaplamaları için diğer birçok göstergenin değerlerini kullanıyorsa, çok fazla bellek tüketir. Makalede, yardımcı göstergeleri kullanırken bellek tüketimini azaltmanın çeşitli yöntemleri açıklanmaktadır. Kaydedilmiş bellek, istemci terminalinde aynı anda kullanılan para birimi çiftlerinin, göstergelerin ve stratejilerin sayısını artırmaya olanak tanır. Alım satım portföyünün güvenilirliğini arttırır. Bilgisayarınızın teknik kaynaklarına bu kadar basit bir özen gösterilmesi, para yatırma işleminizde para kaynaklarına dönüşebilir.

Muhtemelen, çalışmaları için diğer yardımcı göstergeleri kullanan Expert Advisor'ları veya göstergeleri zaten kullanmış veya oluşturmuşsunuzdur.

Örneğin, ünlü gösterge MACD, değerleri arasındaki farkı hesaplayan EMA (Üstel Hareketli Ortalama) göstergesinin iki kopyasını kullanır:


Böyle bir bileşik gösterge, aslında birkaç basit göstergeye eşdeğerdir. Örneğin, daha önce bahsedilen MACD, ana göstergenin arabellekleri ve tüm yardımcı göstergelerinin arabellekleri için bellek ayırması gerektiği için, bellek ve işlemci zamanını tek EMA'dan üç kat daha fazla tüketir.

Yazar: ds2

 

Yaklaşım anlaşılabilir. Ancak görevin uygunluğu kafa karıştırıcıdır.

64-bit bir sistem büyük miktarlarda RAM'i desteklerken, görevin önemi azalır. 3 Gb'lık 32 bit bile sizin kaydettiğiniz gibi bellek boyutlarını oldukça çekebilir. Sonuçta, nasıl bakarsanız bakın, yeni göstergeler yüklenirken bellek doğrusal olarak büyür, bu da modern bilgisayarlar için 48 MB'ın aşağı yukarı hiçbir şey olmadığı anlamına gelir.

Tamam, görevin alakalı olduğunu varsayalım (bunu önemseyen insanlar olduğunu kabul ediyorum). Ancak bir düşünün, bellek tasarrufu görevi performans göreviyle doğrudan çelişiyor.

Dolayısıyla bu noktaya da dikkat etmelisiniz.

Benim bakış açımdan görebildiğim kadarıyla, MQ'lar performans için savaşıyor ve tüm çabaların yoğunlaştığı yer burası.

Çizilmemiş göstergelerde bellek kaynaklarından tasarruf etmeniz gerekiyorsa, gösterge kodunu Uzman Danışmana aktarmanız yeterlidir. Burada, tahsis edilen bellek üzerinde tam kontrole sahip olacaksınız. Aynı zamanda, aynı tür verileri almaktan da tasarruf edebileceksiniz. Birçok gösterge, her biri kendi işlemi için aynı verileri talep eder. Verileri bir kez aldıktan sonra, bir sonraki sefer bunları ele almanıza gerek kalmayacaktır.

Şimdi hem görev hızını hem de bellek boyutunu birleştirelim. Çizim yapmayan göstergelerin çoğu, son çubuğun hesaplanmasıyla ilgilenir, bu, tüm dizinin yeniden hesaplanmasını engelleyen yerleşik mekanizmalarla gösterilir. Uzman Danışman'da 154 bellek hücresi tahsis etmenin mümkün olacağı ortaya çıktı (örneğin, maskenin 153 periyodu ile hesaplanması için) bu tür bellek tasarrufu ile performans normal bir göstergeden daha kötü olmayacaktır.

Ancak Uzman Danışman'da hesaplamaları paralelleştirme olasılığı kaybolur ve bu, performansa doğrudan bir darbedir. Aslında, göstergeler sadece paralellik nedeniyle bellek tüketir. Sonuçta, her gösterge kendi iş parçacığında çalışır ve bu iş parçacığının kendi kaynak veri örneğine sahip olması gerekir.

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 

Katılıyorum, performans ana önceliktir ve bellekten tasarruf etmenin bir anlamı yoktur (tabii ki 1Gb'den fazla kullanmıyorsanız, ki bu pek olası değildir).

 
Urain:

Bu yaklaşım anlaşılabilir. Ancak görevin aciliyeti kafa karıştırıcı.

Aslında, bu makaleyi yazma fikri, belirli bir bileşik gösterge yazdığım bir kişinin bu göstergenin bazı çiftlere yüklenmediğinden şikayet etmesinden sonra aklıma geldi. Araştırırken, çok kalıcı göstergeler olduğu ve birçoğunun terminale sığmadığı ortaya çıktı (yani sorun çiftte değil, bu çiftten önce aynı kalıcı göstergeye sahip bir düzine daha açıldığı gerçeğindeydi). Bu gösterge, makaledeki test göstergesinden 2 kat daha fazla tüketti.

3GB'lık 32-bit bile bu tür bellek boyutlarını oldukça çekebilir

Çok sayıda çift üzerinde işlem yaparsanız, yapmaz, mesele bu.

Bu arada, terminal 2 Gb'den fazla bellek ayıramaz (toplamda: RAM + sanal bellek). Benim deneylerimde bu sınırda kapandı.

Elbette, bu sorun 64 bitte var olmamalıdır.

Tamam, görevin ilgili olduğunu varsayalım (bunu önemseyen insanlar olduğunu kabul ediyorum). Ancak bir düşünün, bellek tasarrufu görevi performans göreviyle doğrudan çelişiyor.

Her zaman değil. Buradaki makalede, yöntemlerin çoğu performansı düşürmez.

Çizilemeyen göstergelerde bellek kaynaklarından tasarruf etmeniz gerekiyorsa, gösterge kodunu Uzman Danışmana taşımanız yeterlidir.

Göstergelerden yalnızca son çubuğu talep eden bir Uzman Danışman, makalede ele alınandan farklı bir program sınıfıdır. Ve birini diğeriyle değiştirmek her zaman mümkün / uygun değildir.

Ancak bir Uzman Danışman'da, hesaplamaları paralelleştirme olasılığı kaybolur ve bu performansa doğrudan bir darbedir. Aslında, göstergeler sadece paralellik nedeniyle bellek tüketir. Sonuçta, her gösterge kendi iş parçacığında çalışır ve bu iş parçacığının kendi kaynak veri örneğine sahip olması gerekir.
.

Ortak bir çift üzerindeki her bir göstergenin kendi veri örneğine sahip olması pek olası değildir - makalede paralel hesaplamalarla ilgili ilginç bir tablo vardır ve bu tablo "2 gösterge" anahtar ifadesiyle bulunabilir.

 
ds2:

Göstergelerin sorunu, her birinin kendi iş parçacığında çalışması ve çalışması için gerekli tüm verileri iş parçacığının kendisinde depolaması gerektiğidir.

İş parçacıkları arasındaki veriler CopyBuffer() aracılığıyla kopyalanır. Ancak sorun şu: bir iş parçacığından veri alabilirsiniz, ancak bunları oraya aktaramazsınız. Bu nedenle, bir göstergenin birkaç örneğinin aynı önceden işlenmiş verileri aldığı mogostage göstergeleri oluşturamazsınız. Ancak tam da bu düzlemde hesaplamaların optimizasyonu için büyük fırsatlar yatabilir.

Bence MQ bu sorunu çözerse, göstergelerle çalışmak daha rahat ve esnek hale gelecektir. Artık veriler yalnızca harici parametreler olarak ve yalnızca iş parçacığının başlangıcında aktarılabilir.



Как написать индикатор в MQL5
Как написать индикатор в MQL5
  • 2010.01.12
  • MetaQuotes Software Corp.
  • www.mql5.com
Что представляет собою индикатор? Это набор вычисленных значений, которые мы хотим отобразить на экране монитора удобным для нас образом. Наборы значений представляются в программах в виде массивов. Таким образом, создание индикатора - это написание алгоритма, который обрабатывает одни массивы (массивы цен) и записывает результаты обработки в другие массивы (значения индикаторов). На примере создания индикатора True Strength Index в статье рассказывается, как писать индикаторы на MQL5
 

Çok kullanışlı

bu yüzden ana fikir akışını doğru anlarsam, bir soru ortaya çıkıyor:

MT5 kurulumunda bulunan tüm standart göstergeler neden "sınıf" olarak tasarlanmadı?

O zaman neden usta sihirbaz böyle bir fikri umursamıyor?

 

Araçlar> seçeneklerinden maksimum çubukları sınırlamadan, arabellek alanını azaltmak için kullandığım hızlı bir yol

int maxbars =100;// son çubuklar
limit = rates_total-rates_total+maxbars;