ZigZag göstergesiyle ilgili sorun

 

Merhaba,

Ana uzmanım için kullanılacak tarihsel verileri (tepe ve dipler) kazıyan bir uzman geliştirmeye çalışıyorum. Basit olduğu ve yüksek/düşük değerini kolayca bulduğu için zikzak göstergesini kullanmaya karar verdim.

Benim sorunum, iCustom() işlevini kullanarak ZigZag.ex4'ü çağırdığımda doğru yüksek ve düşük değerleri alamıyorum. Yeniden boyamayı önlemek için, pişmanlık için temel bir koruma olarak iCustom() göstergesinin dizin 20'sini kullandım.

ZigZag kodunda iki arabellek vardır (https://www.mql5.com/en/code/7796 metaquotes sürümünü kullanarak). Yüksek ve düşük değerleri zıt olarak alabilirim ama şu anda çok da önemli değil.

Değerlerin bazıları kodla eşleşiyor, bazıları uymuyor ve Journal'da aynı sütunda mümkün olmayan hem yüksek hem de düşük değerleri görebiliyorum.

Zikzaklı

Kodum aşağıda:

 //+------------------------------------------------------------------+
//|                                                 ZigZagDigger_02  |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
/* 

*/

#include <stderror.mqh>
#include <stdlib.mqh>
    
int cnt= 0 ;
double Zig_high[ 1000 ];
double Zig_low[ 1000 ];

int init()
  {
   ArrayInitialize (Zig_high, 0 );
   ArrayInitialize (Zig_low, 0 );
   return ( 0 );
 } 
   
int deinit()
{ 
   return ( 0 );
}

void start()
  {
  
   static datetime tmp;
  

   //  On every tick
   if (tmp!= Time [ 0 ]) 
  
   {  tmp =   Time [ 0 ];
   
       double zh= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 1 , 20 );
       double zl= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 0 , 20 );

      Zig_high[cnt]=zh;
      Zig_low[cnt]=zl;
      cnt=cnt+ 1 ;
   
       Alert ( " Zig   zh=" ,zh, "  zl=" ,zl, "  cnt=" ,cnt- 1 );
   
  } // Every tick loop
         
   
  }

Acaba zig zag göstergesini yanlış mı kullanıyorum yoksa kodda bir hata mı yaptım? Sorunu bulamadım, bu yüzden sorunumu tanımlamak için yardımınızı rica ediyorum.

teşekkürler

 
aed71 :

Merhaba,

Ana uzmanım için kullanılacak tarihsel verileri (tepe ve dipler) kazıyan bir uzman geliştirmeye çalışıyorum. Basit olduğu ve yüksek/düşük değerini kolayca bulduğu için zikzak göstergesini kullanmaya karar verdim.

Benim sorunum, iCustom() işlevini kullanarak ZigZag.ex4'ü çağırdığımda doğru yüksek ve düşük değerleri alamıyorum. Yeniden boyamayı önlemek için, pişmanlık için temel bir koruma olarak iCustom() göstergesinin dizin 20'sini kullandım.

ZigZag kodunda iki arabellek vardır (https://www.mql5.com/en/code/7796 metaquotes sürümünü kullanarak). Yüksek ve düşük değerleri zıt olarak alabilirim ama şu anda çok da önemli değil.

Değerlerin bazıları kodla eşleşiyor, bazıları uymuyor ve Journal'da aynı sütunda mümkün olmayan hem yüksek hem de düşük değerleri görebiliyorum.

Kodum aşağıda:

Acaba zig zag göstergesini yanlış mı kullanıyorum yoksa kodda bir hata mı yaptım? Sorunu bulamadım, bu yüzden sorunumu tanımlamak için yardımınızı rica ediyorum.

teşekkürler

MACD Sample kodunu okuyarak EA'nın nasıl çalıştığını söyleyebilir misiniz?

Bana hiç denememişsin gibi geliyor...

yazdıkların sanki bir şey yapıyorum gibi ..... ne olduğunu bilmiyorum ne yaptığımı söyler misin ??

Her tik döngüsü, her tik döngünüz nedir?

Bu ??

   if (tmp!= Time [ 0 ]) 
  
   {  tmp =   Time [ 0 ];
   
       double zh= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 1 , 20 );
       double zl= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 0 , 20 );

      Zig_high[cnt]=zh;
      Zig_low[cnt]=zl;
      cnt=cnt+ 1 ;
   
       Alert ( " Zig   zh=" ,zh, "  zl=" ,zl, "  cnt=" ,cnt- 1 );
   
  } // Every tick loop

evet o zaman döngü nerede?

hayır o zaman kodunuzun ne anlama geldiğini satır satır açıklayın...

 
aed71 : Acaba zikzak göstergesini yanlış mı kullanıyorum yoksa kodda bir hata mı yaptım?
  1. Forumu araştırsaydın cevabını bulurdun .
  2.   double zl= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 0 , 20 );
    
    ZigZag her arabellek öğesini doldurmaz ( DRAW_SECTION kullanır.) Sıfır olmayan bir değere sahip vardiyayı bulana kadar çağrınızı bir döngü içinde yapın.
 
WHRoeder :
  1. Forumu araştırsaydın cevabını bulurdun .
  2. ZigZag her arabellek öğesini doldurmaz ( DRAW_SECTION kullanır.) Sıfır olmayan bir değere sahip vardiyayı bulana kadar çağrınızı bir döngü içinde yapın.


Evet, her arabellek öğesini doldurmayacağını biliyorum. Tüm verileri sıfırlar (yüksek ve düşük yoksa) ve ayrıca yüksek ve düşük değerler de dahil olmak üzere bir diziye koymak istiyorum. Bunun nedeni, dizileri kullanarak yüksek ve alçak arasındaki onay farkını hesaplamak için deinit() içinde başka bir işleme sahip olmak istiyorum. örn. 2 tepe arasında kaç tik atıldığı ve yüksek ile düşük arasındaki fark. Ama henüz o aşamaya gelemem.

Neden resimde tahmin ettiğim gibi aynı anda hem yüksek hem de düşük dönüyor (yanında ??? işareti olan günlük kısmı?) Ve bu değerler herhangi bir yüksek veya düşük ile karşılık gelmiyor... Asıl sorunum bu. ..

teşekkürler

 
deVries :

MACD Sample kodunu okuyarak EA'nın nasıl çalıştığını söyleyebilir misiniz?

Bana hiç denememişsin gibi geliyor...

yazdıkların sanki bir şey yapıyorum gibi ..... ne olduğunu bilmiyorum ne yaptığımı söyler misin ??

Her tik döngüsü, her tik döngünüz nedir?

Bu ??

evet o zaman döngü nerede?

hayır o zaman kodunuzun ne anlama geldiğini satır satır açıklayın...

Döngü ile ilgili sorunum olduğunu düşünmüyorum, döngü çalışıyor ve sonuçları yazdırıyor. zaman dilimini kontrol eder (benim durumumda 15M) ve zikzak değerlerini ve çıktıları hesaplar. Lütfen her 15 dakikada bir yeşil dikdörtgenin nasıl çalıştığını kontrol edin. Start() işlevinin kendisi bir döngüdür, değil mi?

her 15 milyonda bir

 
aed71 :

Döngü ile ilgili sorunum olduğunu düşünmüyorum, döngü çalışıyor ve sonuçları yazdırıyor. zaman dilimini kontrol eder (benim durumumda 15M) ve zikzak değerlerini ve çıktıları hesaplar. Lütfen her 15 dakikada bir yeşil dikdörtgenin nasıl çalıştığını kontrol edin. Start() işlevinin kendisi bir döngüdür, değil mi?



Start() işlevinin kendisinin bir döngü olduğu konusunda haklısın

ama bu döngü nerede başlıyor ve Start() işlevi nerede bitiyor?

o başka bir yerde...

yazdırdığınız mesajlar her tikte tekrarlanmaz....

Ne yapıyorsun ......??

Kodunuzun satırlarını elinizden geldiğince açıklamaya çalışın .....

 
deVries :


Start() işlevinin kendisinin bir döngü olduğu konusunda haklısın

ama bu döngü nerede başlıyor ve Start() işlevi nerede bitiyor?

o başka bir yerde...

yazdırdığınız mesajlar her tikte tekrarlanmaz....

Ne yapıyorsun ......??

Kodunuzun satırlarını elinizden geldiğince açıklamaya çalışın .....


Düzgün açıklayamadıysam özür dilerim.

Bu uzman geriye dönük test için kullanılacak ve amacım 15M grafiğindeki tarihi en yüksek ve en düşükleri bulmak. Grafiğin fazını ve genliğini hesaplamak için yüksek ve düşük verileri yeniden işleyeceğim.

Ben ne yaptım; Yüksek ve düşük değeri depolamak için iki dizi ve keneleri saymak için bir sayaç kullandım. Dizi boyutu 1000, onu maksimum 2 gün boyunca çalıştırdığım için fazlasıyla yeterli (günde 1440/15=96 kene)

 int cnt= 0 ;
double Zig_high[ 1000 ];
double Zig_low[ 1000 ];

init() işlevinde dizileri sıfırla dolduruyorum.

start() işlevinde, aşağıdaki kodla yeni kene tetiklenip tetiklenmediğini kontrol ediyorum

 if (tmp!= Time [ 0 ]) 
  
   {  tmp =   Time [ 0 ];

   // the code here runs every 15M.

   }

Böylece start() işlevi, geriye dönük (2 gün) sonlandırılana kadar sürekli bir döngüye sahiptir.

Asıl sorunum sanırım ZigZag'ı aramak. Aşağıda zikzak göstergesini arıyorum. Normalde yüksek veya düşük varsa sıfır olmayan bir değerle dönmelidir. Ama benim durumumda bazen imkansız olan aynı değerde hem düşük hem de yüksek döner.


   double zh= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 1 , 20 );
   double zl= iCustom ( Symbol (), 0 , "ZigZag.ex4" , 6 , 5 , 3 , 0 , 20 );

  Zig_high[cnt]=zh;
  Zig_low[cnt]=zl;
  cnt=cnt+ 1 ;

Orijinal Metaquotes zikzak göstergesinde kullanılan dizileri anlamamış olabilirim (aşağıya bakın). Anladığım kadarıyla bunlar yüksek ve düşük değerleri depolamak için kullanılıyor.

 //---- indicator buffers
double ExtMapBuffer[];
double ExtMapBuffer2[];

teşekkürler

 

Okumak ve öğrenmek için biraz zaman ayırın

Bu da size biraz yardımcı olabilir

iCustom'un ayrıntılı açıklaması

 
Kodumu da ekliyorum...
Dosyalar:
 
Veri Penceresi neyi gösteriyor?
 
deVries :
Veri Penceresi neyi gösteriyor?

Aşağıdaki grafik minimum değeri gösterir (hem imleç noktası değeri hem de veri penceresi değeri ve çıktı aynıdır)

1 inci

Aşağıdaki 6 tik sonra grafiğin en yüksek kısmıdır. Hem veri penceresi hem de imleç noktaları aynıdır ancak çıktı aynı değildir ve ayrıca hem düşük hem de yüksek değer döndürür.

2. 2.

iCustom()'un göstergeyi doğru yüklediğini kontrol ettim. Düşük değer aynıdır ancak yüksek değer değildir. ZigZag göstergesi ile ilgili olabilir mi?

Neyi yanlış yapıyorum gerçekten anlayamadım.