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....
Ş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. İ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 ); }
İş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 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 :
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
#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 ); }
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,
krikobu ş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
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Değerli arkadaşlar, Kod sadece zikzakların alt kısımlarını gösterecek şekilde nasıl değiştirilir?