Sadece zikzak göstergesi tarafından çıkarılan dip dönüş noktaları nasıl çıkarılır?

 

Değerli arkadaşlar, Kod sadece zikzakların alt kısımlarını gösterecek şekilde nasıl değiştirilir?

Aşağıdaki kod, zikzak tarafından çıkarılan üstleri başarıyla çıkarabilir belirteç.tops[], init() işlevinde dizin arabelleği olarak belirtildi ....Fakat, alt dönüş noktasının yalnızca alt kısımlarını değiştirerek göstermek mümkün mü? iCustom çağrısının ikinci son parametresi? Cevap hayır ise. peki MT4 platformunda ne yapmalıyım? 0 ve 2'yi ikinci son parametre olarak almaya çalıştım ama sonuç istediğim gibi olmadı....

Kodum size kolaylık olması için ektedir. Ve elimden geldiğince basitleştirdim... Zaman ayırdığınız ve ilgilendiğiniz için çok teşekkürler.
 int start()
{
   int counted_bars=IndicatorCounted();
   int limit= 0 ;
  limit = Bars -counted_bars;
  
   for ( int shift=limit- 1 ;shift>= 0 ;shift--)
  {
    tops[shift]= iCustom ( NULL , 0 , "ZigZag" , 12 , 5 , 3 , 1 , shift);
     if (tops[shift]> 0.1 ) tops[shift]=tops[shift];
  }
  
   return ( 0 );
}

 

karşılaştırmak gibi

 double K = iCustom ( Symbol (), 0 , "zigzag" ,ExtDepth,ExtDeviation,ExtBackstep, 0 ,i);
if (K==Low[i] && K> 0 )   //..low zigzag......   
 

deVries,

Hızlı cevabınız için çok teşekkürler. iCustom'un ikinci son parametresini 0 olarak değiştirmek mi istiyorsunuz? Bunu daha önce denedim. ve Sonuç kesinlikle istediğim gibi değil... Sorumu daha açık hale getirmek için, sorumu açıklamak için aşağıdaki iki şekli gösteriyorum....

. ŞEKİL 1 İstenmeyen tepeler(ABCDe) yukarıdaki şekilde gösterilmiştir.

Şekil1. sadece altları göstermek istediğimde istenmeyen üstler gösteriliyor! Yalnızca altları göstermek istediğimde, istenmeyen tüm üstleri filtrelemek istiyorum.

İncir. 2. Sadece istenen üstler gösterilir

İncir. 2. İstenen üstler, istenmeyen alt kısımlar olmadan gösterilir. Varmak istediğim sonuç bu.

Öyleyse sorum şu: A/B/C/D/E Noktasını göstermeden sadece alt noktaları göstermek mümkün müdür? Umarım soruyu netleştirebilmişimdir.....

Hızlı cevabınız için çok teşekkürler....

 
//+------------------------------------------------------------------+
//|                                                      Zigzag2.mq4 |
//|                 Copyright © 2005-2007, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Magenta
#property indicator_color3 LightSkyBlue


//---- indicator parameters
extern int ExtDepth= 12 ;
extern int ExtDeviation= 5 ;
extern int ExtBackstep= 3 ;
//---- indicator buffers
double ZigzagBuffer[];
double HighMapBuffer[];
double LowMapBuffer[];
int level= 3 ; // recounting's depth 
bool downloadhistory= false ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers( 3 );
//---- drawing settings
   SetIndexStyle( 0 , DRAW_SECTION );
   SetIndexStyle( 1 , DRAW_SECTION );   
   SetIndexStyle( 2 , DRAW_SECTION );   
//---- indicator buffers mapping
   SetIndexBuffer ( 0 ,ZigzagBuffer);
   SetIndexBuffer ( 1 ,HighMapBuffer);
   SetIndexBuffer ( 2 ,LowMapBuffer);
   SetIndexEmptyValue( 0 , 0.0 );
   SetIndexEmptyValue( 1 , 0.0 );   
   SetIndexEmptyValue( 2 , 0.0 );   

//---- indicator short name
   IndicatorShortName( "ZigZag(" +ExtDepth+ "," +ExtDeviation+ "," +ExtBackstep+ ")" );
//---- initialization done
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int i, counted_bars = IndicatorCounted();
   int limit,counterZ,whatlookfor;
   int shift,back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow;

   if (counted_bars== 0 && downloadhistory) // history was downloaded
     {
       ArrayInitialize (ZigzagBuffer, 0.0 );
       ArrayInitialize (HighMapBuffer, 0.0 );
       ArrayInitialize (LowMapBuffer, 0.0 );
     }
   if (counted_bars== 0 ) 
     {
      limit= Bars -ExtDepth;
      downloadhistory= true ;
     }
   if (counted_bars> 0 ) 
     {
       while (counterZ<level && i< 100 )
        {
         res=ZigzagBuffer[i];
         if (res!= 0 ) counterZ++;
         i++;
        }
      i--;
      limit=i;
       if (LowMapBuffer[i]!= 0 ) 
        {
         curlow=LowMapBuffer[i];
         whatlookfor= 1 ;
        }
       else
        {
         curhigh=HighMapBuffer[i];
         whatlookfor=- 1 ;
        }
       for (i=limit- 1 ;i>= 0 ;i--)  
        {
         ZigzagBuffer[i]= 0.0 ;  
         LowMapBuffer[i]= 0.0 ;
         HighMapBuffer[i]= 0.0 ;
        }
     }
      
   for (shift=limit; shift>= 0 ; shift--)
     {
      val=Low[iLowest( NULL , 0 ,MODE_LOW,ExtDepth,shift)];
       if (val==lastlow) val= 0.0 ;
       else 
        { 
         lastlow=val; 
         if ((Low[shift]-val)>(ExtDeviation* Point )) val= 0.0 ;
         else
           {
             for (back= 1 ; back<=ExtBackstep; back++)
              {
               res=LowMapBuffer[shift+back];
               if ((res!= 0 )&&(res>val)) LowMapBuffer[shift+back]= 0.0 ; 
              }
           }
        } 
       if (Low[shift]==val) LowMapBuffer[shift]=val; else LowMapBuffer[shift]= 0.0 ;
       //--- high
      val=High[iHighest( NULL , 0 ,MODE_HIGH,ExtDepth,shift)];
       if (val==lasthigh) val= 0.0 ;
       else 
        {
         lasthigh=val;
         if ((val-High[shift])>(ExtDeviation* Point )) val= 0.0 ;
         else
           {
             for (back= 1 ; back<=ExtBackstep; back++)
              {
               res=HighMapBuffer[shift+back];
               if ((res!= 0 )&&(res<val)) HighMapBuffer[shift+back]= 0.0 ; 
              } 
           }
        }
       if (High[shift]==val) HighMapBuffer[shift]=val; else HighMapBuffer[shift]= 0.0 ;
     }

   // final cutting 
   if (whatlookfor== 0 )
     {
      lastlow= 0 ;
      lasthigh= 0 ;  
     }
   else
     {
      lastlow=curlow;
      lasthigh=curhigh;
     }
   for (shift=limit;shift>= 0 ;shift--)
     {
      res= 0.0 ;
       switch (whatlookfor)
        {
         case 0 : // look for peak or lawn 
             if (lastlow== 0 && lasthigh== 0 )
              {
               if (HighMapBuffer[shift]!= 0 )
                 {
                  lasthigh=High[shift];
                  lasthighpos=shift;
                  whatlookfor=- 1 ;
                  ZigzagBuffer[shift]=lasthigh;
                  res= 1 ;
                 }
               if (LowMapBuffer[shift]!= 0 )
                 {
                  lastlow=Low[shift];
                  lastlowpos=shift;
                  whatlookfor= 1 ;
                  ZigzagBuffer[shift]=lastlow;
                  res= 1 ;
                 }
              }
             break ;  
         case 1 : // look for peak
             if (LowMapBuffer[shift]!= 0.0 && LowMapBuffer[shift]<lastlow && HighMapBuffer[shift]== 0.0 )
              {
               ZigzagBuffer[lastlowpos]= 0.0 ;
               lastlowpos=shift;
               lastlow=LowMapBuffer[shift];
               ZigzagBuffer[shift]=lastlow;
               res= 1 ;
              }
             if (HighMapBuffer[shift]!= 0.0 && LowMapBuffer[shift]== 0.0 )
              {
               lasthigh=HighMapBuffer[shift];
               lasthighpos=shift;
               ZigzagBuffer[shift]=lasthigh;
               whatlookfor=- 1 ;
               res= 1 ;
              }   
             break ;               
         case - 1 : // look for lawn
             if (HighMapBuffer[shift]!= 0.0 && HighMapBuffer[shift]>lasthigh && LowMapBuffer[shift]== 0.0 )
              {
               ZigzagBuffer[lasthighpos]= 0.0 ;
               lasthighpos=shift;
               lasthigh=HighMapBuffer[shift];
               ZigzagBuffer[shift]=lasthigh;
              }
             if (LowMapBuffer[shift]!= 0.0 && HighMapBuffer[shift]== 0.0 )
              {
               lastlow=LowMapBuffer[shift];
               lastlowpos=shift;
               ZigzagBuffer[shift]=lastlow;
               whatlookfor= 1 ;
              }   
             break ;               
         default : return ; 
        }
     }

   return ( 0 );
  }
//+------------------------------------------------------------------+

Yalnızca zikzak arabelleği göstermek mümkündü

zikzak yeniden boyanıyor


bunun sonucunu gör

 

İşte aklıma gelen şey. Yukarıdaki deVries sonuçlarını kontrol etmedim [bunu yayınlarken bunu yapıyordu].

 #property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_width1 1
#property indicator_color2 Yellow
#property indicator_width2 1

double Bottoms[];
double Toppers[];

int init()
{

   IndicatorBuffers( 2 );

   SetIndexStyle( 0 , DRAW_SECTION );
   SetIndexBuffer ( 0 ,Bottoms);
   SetIndexEmptyValue( 0 , 0.0 );

   SetIndexStyle( 1 , DRAW_SECTION );
   SetIndexBuffer ( 1 ,Toppers);
   SetIndexEmptyValue( 1 , 0.0 );

  IndicatorShortName( "zz show top & bottom" );
   return ( 0 );
}

int deinit()
{
   return ( 0 );
}

int start()
{
   int counted_bars=IndicatorCounted();
   int limit= 0 ;
  limit = Bars -counted_bars;
  
   for ( int shift=limit- 1 ;shift>= 0 ;shift--)
  {
     int ExtDepth= 12 ; int ExtDeviation= 5 ; int ExtBackstep= 3 ;
     int ZigzagBuffer= 0 ; int HighMapBuffer= 1 ; int LowMapBuffer= 2 ;
    
    Bottoms[shift]= iCustom (
         Symbol (), 0 , "ZigZag" ,
        ExtDepth, ExtDeviation, ExtBackstep,
        LowMapBuffer, shift
    );
    
    Toppers[shift]= iCustom (
         Symbol (), 0 , "ZigZag" ,
        ExtDepth, ExtDeviation, ExtBackstep,
        HighMapBuffer, shift
    );
    
     if (Bottoms[shift]> 0.1 ) Bottoms[shift]=Bottoms[shift];
     if (Toppers[shift]> 0.1 ) Toppers[shift]=Toppers[shift];
  }
  
   return ( 0 );
}

 
ubzen :

İşte aklıma gelen şey. Yukarıdaki deVries sonuçlarını kontrol etmedim [bunu yayınlarken bunu yapıyordu].

Güzel ubzen kodunuzun yardımıyla buna geldim......

 #property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_width1 3
#property indicator_color2 Green
#property indicator_width2 3
#property indicator_color3 Yellow
#property indicator_width3 3


//---- indicator parameters
extern int ExtDepth= 12 ;
extern int ExtDeviation= 5 ;
extern int ExtBackstep= 3 ;


double ZigZag[];
double Bottoms[];
double Toppers[];

int init()
{
   IndicatorBuffers( 3 );

   SetIndexStyle( 0 , DRAW_SECTION );
   SetIndexBuffer ( 0 ,ZigZag);
   SetIndexEmptyValue( 0 , 0.0 );
   
   SetIndexStyle( 1 , DRAW_SECTION );
   SetIndexBuffer ( 1 ,Bottoms);
   SetIndexEmptyValue( 1 , 0.0 );

   SetIndexStyle( 2 , DRAW_SECTION );
   SetIndexBuffer ( 2 ,Toppers);
   SetIndexEmptyValue( 2 , 0.0 );

  IndicatorShortName( "zz show top & bottom" );
   return ( 0 );
}

int deinit()
{
   return ( 0 );
}

int start()
{
   int counted_bars=IndicatorCounted();
   int limit= 0 ;
  limit = Bars -counted_bars;
  
   for ( int shift=limit- 1 ;shift>= 0 ;shift--)
  {
    ZigZag[shift]= iCustom (
         Symbol (), 0 , "ZigZag" ,
        ExtDepth, ExtDeviation, ExtBackstep,
         0 , shift
    );

     if (ZigZag[shift]> 0.1 && Low[shift]==ZigZag[shift]) Bottoms[shift]=ZigZag[shift];
     if (ZigZag[shift]> 0.1 && High[shift]==ZigZag[shift]) Toppers[shift]=ZigZag[shift];
  }
  
   return ( 0 );
}

Bu Sonuç olarak veriyor


şimdi altlar ve üstler zikzak ile eşleşiyor

 
deVries deVries : Güzel ubzen senin kodunun yardımıyla buna geldim...... Bu sonuç veriyor
İyi iş çıkardın .
 
Sevgili arkadaşlar, özellikle deVries ve Ubzen'den gelen yardım ve nezaketinizle, göstergem bu neşeli erken ilkbahar sabahında zikzak göstergesinin çıkardığı dip dönüş noktalarını birbirine bağlayan resmi başarıyla çizdi... :)
 
d



deVries :

Güzel ubzen kodunuzun yardımıyla buna geldim......

Bu Sonuç olarak veriyor

şimdi altlar ve üstler tamamen zikzak ile eşleşiyor





Merhaba deVries,

Kodunuz için çok teşekkürler. Son zikzak bacağının Fibonacci Düzeltmesinin ne kadar uzakta olduğunu bilmek istersem, önceki zikzak bacağıyla karşılaştırın. Bu nasıl yapılır ?

Resmi beğenmek istiyorum ama aşağıdaki denediğim kod olmadı...

Teşekkürler,

kriko

Fibo düzeltme


 #property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_width1 3
#property indicator_color2 Green
#property indicator_width2 3
#property indicator_color3 Yellow
#property indicator_width3 3


//---- indicator parameters
extern int ExtDepth= 12 ;
extern int ExtDeviation= 5 ;
extern int ExtBackstep= 3 ;


double ZigZag[];
double Bottoms[];
double Toppers[];
double resBuffer[][];

//---
int init() {
   IndicatorBuffers( 3 );

   SetIndexStyle( 0 , DRAW_SECTION );
   SetIndexBuffer ( 0 ,ZigZag);
   SetIndexEmptyValue( 0 , 0.0 );
   
   SetIndexStyle( 1 , DRAW_SECTION );
   SetIndexBuffer ( 1 ,Bottoms);
   SetIndexEmptyValue( 1 , 0.0 );

   SetIndexStyle( 2 , DRAW_SECTION );
   SetIndexBuffer ( 2 ,Toppers);
   SetIndexEmptyValue( 2 , 0.0 );

  IndicatorShortName( "zz show top & bottom" );
   return ( 0 );
}

int deinit()
{
   ObjectDelete ( "myFibo" );
   return ( 0 );
}

int start()
{
   int counted_bars=IndicatorCounted();
   int limit= 0 ;
  limit = Bars -counted_bars;
   int k= 0 , m= 0 ;
   int candle1= 0 , candle2= 0 ;
   double prc1= 0 , prc2= 0 ;
  
   for ( int shift=limit- 1 ;shift>= 0 ;shift--) {
    ZigZag[shift]= iCustom (
         Symbol (), 0 , "ZigZag" ,
        ExtDepth, ExtDeviation, ExtBackstep,
         0 , shift
    );

     if (ZigZag[shift]> 0.1 && Low[shift]==ZigZag[shift]) {
      Bottoms[shift]=ZigZag[shift];
      resBuffer[k][ 0 ] = Bottoms[shift];
      resBuffer[k][ 1 ] = shift;
      k++;
    }
     if (ZigZag[shift]> 0.1 && High[shift]==ZigZag[shift]) {
      Toppers[shift]=ZigZag[shift];
      resBuffer[k][ 0 ] = Toppers[shift];
      resBuffer[k][ 1 ] = shift;
      k++;
    }
  } // ende for
  
   //---
   for (m=k;m>= 0 ;m--) {
   candle1 = resBuffer[m][ 1 ];
   prc1 = resBuffer[m][ 0 ];
   candle2 = resBuffer[m- 1 ][ 1 ];
   prc2 = resBuffer[m- 1 ][ 0 ];
   //---
         ObjectDelete ( "myFibo" );
         ObjectCreate ( "myFibo" , OBJ_FIBO , 0 , Time[candle1], prc2, Time[candle2], prc1);
 
  } // ende for
          
   return ( 0 );
}
 
jackprobe :


Merhaba deVries,

Kodunuz için çok teşekkürler. Son zikzak bacağının Fibonacci Düzeltmesinin ne kadar uzakta olduğunu bilmek istersem, önceki zikzak bacağıyla karşılaştırın. Bu nasıl yapılır ?

Teşekkürler,

kriko


bu şekilde fibonacci çizin zikzak göstergeli iki noktayı bulun iCustom

0.0 1.6154

100.0 1.6168

fark 0.0014

son yüksek = 1.6169

0,0 0,0015 ile fark %0,0015/0,0014 * %100 = mesafede %107 + 0,0001

Demek istediğin bu mu ??

 

Merhaba deVries,

Teşekkür ederim. Evet, gönderdiğiniz resim gibi. Ama nasıl kodlayacağımı bilmek istiyorum. Önceki her bir Zigzag bacağını hesaplamalı ve ardından Fibonacci seviyesini çizmelidir, böylece mevcut / son zikzakın ne kadar ilerlediğini bilebiliriz.

edit: kodu bir önceki mesajda gönderdim. Fibo çizgisini çekmezdi...

teşekkürler