Özel bir gösterge kullanırken Uzman Danışmanı hızlandırma teorisi (işlev - iCustom) - sayfa 3

 
-Aleks- :
Yani, gerekli göstergelerin karmakarışıklığı, göstergeleri ayrı ayrı kullanmaktan daha hızlı çalışacak - yani teklifler hakkındaki bilgiler daha az talep edilecek mi?

Gerekli değil. Hesaplamaların tekrarlanmamasına özen gösterilmelidir. İki göstergedeki ön hesaplamalar aynıysa, bunları bir araya getirmeye değer. Tüm göstergeleri tek bir şekle sokmaya değmez.

Teklif istemekle ilgili herhangi bir sorun yoktur. Onlara sormanıza gerek yok, kendileri geliyorlar.

 

Göstergeyi yeniden hesaplamak için bir zaman gecikmesi kullanmaya çalıştım:

 int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
  {
 static datetime    prevtime;
   datetime per= 15 ; //задержка секунд
   
   if (( TimeCurrent ()-prevtime)<per) 
   {
   return (rates_total); //прошло мало секунд - поэтому выходим
   }
 
//--- main cycle  
....................

prevtime= TimeCurrent ();
return (rates_total);
 }

"OHLSnaM1" üzerinde test ederken neredeyse hiçbir fark yoktur, belki de "tüm onaylar" üzerinde test yapmak daha hızlı olacaktır.

 

iCustom'un nasıl çalıştığına dair izlenimim (son 2 ayda hiçbir şey değişmediyse)
göstergeyi iCustom'dan çağırırken
olası bir geçmiş için tüm arabellekler hesaplanacak ve sonuçlar önbelleğe sürülecek, ayrıca parametrelere ve gösterge adına bağlanan bir önbellek olacaktır.

ikinci dizin dizisi için aynı göstergeyi ve aynı parametreleri bir daha çağırırsanız, sonuç önbellekten döndürülür (+ yeni geçmiş verileri için düzeltme)
aynı göstergeyi çağırır, ancak en az bir parametreyi değiştirirseniz, olası bir geçmiş için tüm arabellekler tamamen hesaplanır ve bir önbellek daha kaydedilir, ancak yeni parametrelere bağlanır.


Uzman Danışmandan, göstergede böyle bir parametre yaparsanız, ne kadar geçmiş indirileceğini belirleyebilirsiniz, ancak böyle bir çağrı ile sürekli olarak aynı numarayı - geçmişin boyutunu göndermelisiniz.
(ilk iCustom aramasının hızını etkiler)

Ayrıca mümkünse hem göstergenin kendisinde hem de geçmiş boyutu ile örnekte olduğu gibi gösterge parametresi aracılığıyla gereksiz arabelleklerin hesaplanmasını kaldırmayı deneyebilirsiniz.
(önbellek boyutunu azaltın - hesaplama hızını artırın)

 

Bilgiler için hepinize teşekkür ederim.

5 grafik arabelleğine sahip bir gösterge grafik arabelleği değil, normal bir dizi kullanıyorsa - veri çıkışı önerdiğim gibi bir grafik arabelleği aracılığıyla yapılırsa, optimizasyon sırasında EA'nın hızının daha yüksek olacağını açıklığa kavuşturmak isterim. gösterge için ve sırasıyla daha az bellek ayrılacak ve onunla çalışmak için daha az zaman harcanacak mı?

Optimizasyon gerçekleşirse ve her geçişte gösterge ayarları değişmezse, gösterge yeniden hesaplanıyor mu?

 
-Aleks- :

Bilgiler için hepinize teşekkür ederim.

5 grafik arabelleğine sahip bir gösterge grafik arabelleği değil, normal bir dizi kullanıyorsa - veri çıkışı önerdiğim gibi bir grafik arabelleği aracılığıyla yapılırsa, optimizasyon sırasında EA'nın hızının daha yüksek olacağını açıklığa kavuşturmak isterim. gösterge için ve sırasıyla daha az bellek ayrılacak ve onunla çalışmak için daha az zaman harcanacak mı?

Optimizasyon gerçekleşirse ve her geçişte gösterge ayarları değişmezse, gösterge yeniden hesaplanıyor mu?

Tampon - bu bir dizidir, yalnızca verileri görüntülemek için uygundur.

Optimizasyon sırasında gösterge her seferinde yeniden hesaplanır.

 
komposter :

Tampon - bu bir dizidir, yalnızca verileri görüntülemek için uygundur.

Bunun bir dizi olduğunu anlıyorum, ancak göstergeyi hesaplama dizisi çok daha küçük olabilir - genellikle dinamik.

Örneğin, 1000 çubuk geçmişinde - özel gösterge 3 SMA - 5/8/10 çizer.

Standart seçenekle, neredeyse 3000-10-8-5 ile dolu bir grafik arabelleğine sahip olacağız.

Ve benim yöntemimi kullanırsan, o zaman:

SMA(5)'i hesaplamak için 4 bar boyutunda (terminoloji için üzgünüm) bir diziye ihtiyacınız var

SMA(8)'i hesaplamak için 7 bar boyutunda (terminoloji için üzgünüm) bir diziye ihtiyacınız var

SMA(10)'u hesaplamak için 9 bar boyutunda (terminoloji için üzgünüm) bir diziye ihtiyacınız var

ve 1000 çubukluk bir grafik dizisi, sonuç olarak, dizilerin üzerine basitçe yazılacağı için 1000 + 4 + 7 + 9 belleği işgal etmeniz gerekir.

nerede hatalıyım?

 
-Aleks- :

Bilgiler için hepinize teşekkür ederim.

5 grafik arabelleğine sahip bir gösterge grafik arabelleği değil, normal bir dizi kullanıyorsa - veri çıkışı önerdiğim gibi bir grafik arabelleği aracılığıyla yapılırsa, optimizasyon sırasında EA'nın hızının daha yüksek olacağını açıklığa kavuşturmak isterim. gösterge için ve sırasıyla daha az bellek ayrılacak ve onunla çalışmak için daha az zaman harcanacak mı?

Optimizasyon gerçekleşirse ve her geçişte gösterge ayarları değişmezse, gösterge yeniden hesaplanıyor mu?

imhenko, gösterge tekrar çağrıldığında, bellek segmentine (Yer Paylaşımı) yeniden yüklenmediğini anlamak daha önemlidir. Bununla karşılaştırıldığında, diğer her şey tohumdur.
 
-Aleks- :

Bunun bir dizi olduğunu anlıyorum, ancak göstergeyi hesaplama dizisi çok daha küçük olabilir - genellikle dinamik.

Örneğin, 1000 çubuk geçmişinde - özel gösterge 3 SMA - 5/8/10 çizer.

Standart seçenekle, neredeyse 3000-10-8-5 ile dolu bir grafik arabelleğine sahip olacağız.

Ve benim yöntemimi kullanırsan, o zaman:

SMA(5)'i hesaplamak için 4 bar boyutunda (terminoloji için üzgünüm) bir diziye ihtiyacınız var

SMA(8)'i hesaplamak için 7 bar boyutunda (terminoloji için üzgünüm) bir diziye ihtiyacınız var

SMA(10)'u hesaplamak için 9 bar boyutunda (terminoloji için üzgünüm) bir diziye ihtiyacınız var

ve 1000 çubukluk bir grafik dizisi, sonuç olarak, dizilerin üzerine basitçe yazılacağı için 1000 + 4 + 7 + 9 belleği işgal etmeniz gerekir.

nerede hatalıyım?

Bir çubukta bir değere ihtiyacınız varsa, arabelleğe gerçekten gerek yoktur. gösterge gibi ;)

Ve her çubuktaki göstergenin değerine ihtiyacınız varsa, her şeyi hesaplamak ve ardından yalnızca yeni çubuğu hesaplamak genellikle daha ekonomik olacaktır.
Ve tüm algoritmalar SMA kadar basit değildir, basitçe "5 çubuk için" hesaplanamazlar. En azından zikzak görün.

En çok kafamı karıştıran, alınan cevapları pratikte uygulamaya çalışmamanız. Görünüşe göre pratik bir görev yok, sadece teorik zevkler var.
O zaman neden buna katıldığımı anlamıyorum.

 

Bu arada, MT4, geçmişin yalnızca bir kısmını hesaplama konusunda mükemmel bir iş çıkarır ve döngü son 1000 çubuktan geçerse ("pencere" 5000 olsa bile) tüm arabellek için belleği tüketmez.

Ancak MT5'te bu sorunla karşılaştım - yalnızca son 100'ü sayılsa bile 50.000 çubuğun tümü için bellek tahsis edildi.

 
komposter :

Bir çubukta bir değere ihtiyacınız varsa, arabelleğe gerçekten gerek yoktur. gösterge gibi ;)

Neden bir çubukta aynı? Sadece bir göstergenin değerini hesaplamak için, zaman tarihi boyunca tüm göstergelerini bilmenin nadiren gerekli olduğu gerçeğiyle ilgiliydi. Bu yüzden tamponların (dizilerin) sadece hesaplama için kullanılacağını ancak 3 MA'nın hesaplama sonucunun bir grafik tamponunda saklanacağını yazdım.

Zig-zag ile ilgili olarak - bu benim için artık bir baş ağrısı - bir takım cevaplar gerekiyor, ancak ayrı bir konu açacağım.

kompost :

En çok kafamı karıştıran, aldığınız cevapları pratikte uygulamaya çalışmamanız. Görünüşe göre pratik bir görev yok, sadece teorik zevkler var.

O zaman neden buna katıldığımı anlamıyorum.

Gerçek şu ki, ben kendim programlama yapmıyorum - araştırma bu ödevleri derlemeye yardımcı olacaktır. Şimdi EA motorunun bir bileşeni olacak bir gösterge geliştiriyoruz - çok fazla arabelleğe sahip, bu yüzden göstergeyi koda entegre ederek değil, başka yöntemlerle EA'nın çalışmasını nasıl hızlandıracağımı düşünüyorum. .

Ayrıca birinin böyle bir algoritmayı pratikte denemesinin ilginç olacağını umuyordum - işin hızını karşılaştırmak için ...


kompost :

Bu arada, MT4, geçmişin yalnızca bir bölümünü hesaplama konusunda mükemmel bir iş çıkarır ve döngü son 1000 çubuktan geçerse ("pencerede" 5000 olsa bile) tüm arabellek için belleği tüketmez.

Ancak MT5'te bu sorunla karşılaştım - yalnızca son 100'ü sayılsa bile 50.000 çubuğun tümü için bellek tahsis edildi.

Beşi için üzücü bir gerçek, ancak geliştiriciler bunun kutsal anlamını açıklamıyor mu?

Neden: