En Düşük ve En Yüksek Fonksiyonlar Ne Getirir? - sayfa 2

 
nen
Cevap veremedim (orada değildim). Birinden bahsetmek için ayrıştırılması gereken kodu gönderin.
Not: Bu zikzakta bir hata değil, bir yazım hatası vardı (MT3'teki koda kıyasla), sadece bu yazım hatasını buldum ve başka hiçbir şeyi düzeltmedim.
 
Vladislav, nedense kodunuz benim için tüm zaman dilimlerinde çalışmıyor. Bazıları görünür, diğerleri görünmez. Garip. İşler.
 
Rosh, işte codebase.mql4.com'dan gelen kod. Bende de aynısı var. Onu tüm dünyayla birlikte yenmeyi başarırsam, çok minnettar olacağım. Ve yalnız değilim. Şimdiden teşekkür ederim.

Şimdi belirli düzenlemelerle çok sayıda biriktirdim. İyi çalışıyorlar. Ancak ilk ışında - sıfır çubuğundan başlayarak veya ilk çubuklardan herhangi birinden - ekstremum arama fonksiyonlarındaki hatalar başarısız oluyor. Ve gösterge kararsız.

//+------------------------------------------- --------------------+
//| Özel Hareketli Ortalama.mq4 |
//| Telif Hakkı © 2005, MetaQuotes Yazılım A.Ş. |
//| https://www.metaquotes.net/ |
//+------------------------------------------- --------------------+
#property telif hakkı "Telif hakkı © 2005, MetaQuotes Software Corp."
#özellik bağlantısı https://www.metaquotes.net/

#özellik göstergesi_chart_window
#özellik göstergesi_tamponları 1
#özellik göstergesi_renk1 Kırmızı
//---- gösterge parametreleri
dış int DışDepth=12;
harici int ExtDeviation=5;
harici int ExtBackstep=3;
//---- gösterge arabellekleri
çift ExtMapBuffer[];
çift ExtMapBuffer2[];

//+------------------------------------------- --------------------+
//| özel gösterge başlatma işlevi |
//+------------------------------------------- --------------------+
int init()
{
Gösterge Tamponları(2);
//---- çizim ayarları
SetIndexStyle(0,DRAW_SECTION);
//---- gösterge arabellek eşlemesi
SetIndexBuffer(0,ExtMapBuffer);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(0,0.0);
//---- gösterge kısa adı
IndicatorShortName("ZigZag("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
//---- başlatma tamamlandı
dönüş(0);
}
//+------------------------------------------- --------------------+
//| |
//+------------------------------------------- --------------------+
int başlangıç()
{
int shift, geri, son yüksek konum, son düşük konum;
çift değer, res;
çift kıvrım, kıvrım, son, son;

for(shift=Bars-ExtDepth; shift>=0; shift--)
{
val=Düşük[En Düşük(NULL,0,MODE_LOW,ExtDepth,shift)];
if(val==lastlow) val=0.0;
başka
{
lastlow=val;
if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
başka
{
for(geri=1; geri<=ExtBackstep; geri++)
{
res=ExtMapBuffer[shift+back];
if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
}
}
}
ExtMapBuffer[shift]=val;
//--- yüksek
val=Yüksek[En yüksek(NULL,0,MODE_HIGH,ExtDepth,shift)];
if(val==sonyüksek) val=0.0;
başka
{
sonyüksek=val;
if((val-High[shift])>(ExtSapma*Nokta)) val=0.0;
başka
{
for(geri=1; geri<=ExtBackstep; geri++)
{
res=ExtMapBuffer2[shift+back];
if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
}
}
}
ExtMapBuffer2[shift]=val;
}

// son kesim
sonyüksek=-1; lasthighpos=-1;
lastlow=-1; lastlowpos=-1;

for(shift=Bars-ExtDepth; shift>=0; shift--)
{
curlow=ExtMapBuffer[shift];
curhigh=ExtMapBuffer2[shift];
if((curlow==0)&&(curhigh==0)) devam edin;
//---
if(kıvırcık!=0)
{
if(sonyüksek>0)
{
if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
başka ExtMapBuffer2[shift]=0;
}
//---
if(lasthigh<curhigh || lasthigh<0)
{
lasthigh=curhigh;
lasthighpos=shift;
}
lastlow=-1;
}
//----
if(kıvır!=0)
{
if(sondüşük>0)
{
if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
başka ExtMapBuffer[shift]=0;
}
//---
if((daralt<sondüşük)||(sondüşük<0))
{
lastlow=curlow;
lastlowpos=shift;
}
sonyüksek=-1;
}
}

for(shift=Bars-1; shift>=0; shift--)
{
if(shift>=Bars-ExtDepth) ExtMapBuffer[shift]=0.0;
başka
{
res=ExtMapBuffer2[shift];
if(res!=0.0) ExtMapBuffer[shift]=res;
}
}
}
 
Vladislav, nedense kodunuz benim için tüm zaman dilimlerinde çalışmıyor. Bazıları görünür, diğerleri görünmez. Garip. İşler.


Ve hangileri görüntülenmiyor? Her şeyi gösteriyor gibiyim. Evet ve bu benim kodum değil - standart teslimattan. Her durumda, MT'nin tüm sürümlerinde var.
 
Vladislav, bunun senin kodunun olmadığı gerçeği anlaşılabilir. Teslimatta bana, sonuçlandırdığım kod.
Hangi zaman dilimlerinde gösterilmez. DC-Brezan.
GBP-CHF
Görüntülenmiyor - m1, m15. Gerisi görüntülenir.
EURUSD
Görüntülenmiyor - m1, m5
AUD-USD - herkes için görüntülenir.
Bunun neden böyle olduğu belli değil.

Belki de Slava'nın yaz aylarında yeniden düzenlediği koduna sahipsiniz. Ama değişikliğini beğenmedim. Bazı problemler çözülmedi.
================
Fena değil yeniden yapılmış GODZILLA (Nikolai). Ama o sadece iki sorunu çözdü.
1) Her kene üzerinde yeniden hesaplama . Büyük ölçüde azalttı.
2) Tümsekleri kaldırmak için bir algoritma eklendi. Tümsekler, esas olarak, aynı çubukta hem minimum hem de maksimum olması gerçeğinden kaynaklanır. Ve zikzak algoritması öyle ki sadece yüksekleri bırakıyor. Bu genellikle arka arkaya birkaç zirveye yol açtı.

GODZILL tarafından düzeltilen göstergeyi iyileştirme seçeneklerim var. Havada asılı olan kıvrımlar kaldırıldı. Ancak, tahmin ettiğim gibi, ekstremum arama işlevlerinin yanlış çalışması, ilk iki ışında kendini hala gösteriyor. Ve bu sorun nedeniyle, bu konuyu burada gündeme getirdim.

Ancak arama fonksiyonunun doğru çalışması mümkündür ancak bu fonksiyon için net bir açıklama yoktur. Bu nedenle ve yanlış kullanımı meydana gelir.
 
Bana göre, belirtilen çiftlerdeki tüm t\f'den çıkarılır. Bu kodun nereden geldiğini hatırlamıyorum - yapı 197'nin teslimatında olduğunu sanıyordum - bir nedenden dolayı tüm MT'lerde var :). Yarın kontrol edeceğim.
 
Söylemeye utanıyorum, zikzakla daha önce hiç ciddi anlamda ilgilenmedim :). Yazıdaki kod 18.10.06 17:46
anlayamayacağın kadar. bence şöyle bir şey olmalı
 ...
// val=Yüksek[En yüksek(NULL,0,MODE_HIGH,ExtDepth,shift)];
    highpos=En Yüksek(NULL,0,MODE_HIGH,ExtDepth,shift);
    değer=yüksek[yüksek nokta];
    if(MathAbs(val-lastlow) < Puan) val=0.0;
// if(val==lasthigh) val=0.0;
    başka {
      sonyüksek=val;
      if(highpos!=shift) val=0.0;
// if((val-Yüksek[shift])>(ExtSapma*Nokta)) val=0.0;
      başka {
...


Burada "ekstra" eski kod yorumlanmıştır. Her ne kadar bir zikzak fikrini henüz tam olarak anlayamamış olsam da. Her durumda, böyle bir kod asılı aşırılık vermez. Kodun bu versiyonu uygunsa ama ben denk gelmediysem :) link eksikliği için özür dilerim.

 
Teşekkürler Candida. Nasıl çalıştığını göreceğim. Ama şube başlığındaki soru kaldırılmamış. Sadece zikzak, ekstremum arama işlevlerinin "anlaşılmaz" işlemi sorununu ortaya çıkardı. satır highpos=En Yüksek(NULL,0,MODE_HIGH,ExtDepth,shift); ekstremumu bulmaya yardımcı olur. Ancak, zikzak kodunda çalışırken En Yüksek işlevi tarafından döndürülen yüksek değer dizini genellikle rastgeledir. Çubuğun gerçek konumundan bir sapma var. Yani, highpos, örneğin 15 olacaktır. Aslında, çubuğun farklı bir indeksi vardır: 13 veya 16 veya başka bir şey. Yayılma elde edilir. Bu nedenle, küçük parametre değerlerine sahip ve "küçük" zaman dilimlerinde (dakika, beş dakika ...) bir ZigZag kararsız çalışmaya başlar.

TAMAM. Tanrı onunla olsun, bir zikzak ile. Soru zikzak içinde değil. Ve MQ4 dilinin işlevleri istikrarlı ve öngörülebilir şekilde çalışmalıdır.

Ve bu BÜYÜK SORUN. Arama işlevleri yalnızca ZigZag'da uygulanmaz. Ama aynı zamanda diğer birçok göstergede.

Zigzag özel bir durumdur. Ama aynı zamanda sorunu vurgulamaya da yardımcı olur. Birçok gösterge zikzaklara dayanmaktadır. Zigzag kararsız çalışıyor. Bu kimse için bir sır değil. Birçoğu, zamanlarını ihtiyaçları için kendi zikzaklarını programlamak için harcamak zorunda kalıyor. Ne kadar zaman kaybı. Heba olmuş. Sorunun temel nedeninin yanlış anlaşılmasından dolayı.
 
Samimi, sözlerin: Söylemekten utanıyorum, ..... 18.10.06 17:46 nen yazısındaki kod henüz anlaşılamadı.

Bunlar altın kelimeler. Bunu ilk söyleyen sen değilsin. Ancak yine de, zikzak içinde somutlaşan ve kısmen bu kodda uygulanan fikirler çok iyidir. Bu fikirler standart hale getirilecek.
 
2 gün :
Göstergeyi hesaplama sürecinde pencereyi (shift,shift+ExtDepth) hareket ettirdiğimizde, yeni bir ekstremumun ortaya çıkması hem yeni fiyat hem de eski ekstremin pencereden çıkmış olması ile ilişkilendirilebilir. Bu anın ele alınması gerekiyor. Bunu yapmak için, eklememde if(highpos!=shift) val=0.0; . Bunun standart kodda nasıl yapıldığını anlamadım. Benim versiyonumdaki asılı ekstremin ortadan kalktığı gerçeğine bakılırsa, bu ya yanlış yapılır ya da hiç yapılmaz.
Ve zikzak istikrarsızlığı tam olarak nedir?