비교하는 것처럼
double K = iCustom ( Symbol (), 0 , "zigzag" ,ExtDepth,ExtDeviation,ExtBackstep, 0 ,i); if (K==Low[i] && K> 0 ) //..low zigzag......
드브리스,
귀하의 신속한 답변에 감사드립니다. iCustom의 두 번째 마지막 매개변수를 0으로 변경하기만 하면 됩니까? 나는 이것을 전에 시도했다. 결과는 확실히 내가 원하는 것이 아닙니다 ... 내 질문을 더 명확하게하기 위해 내 질문을 설명하기 위해 아래 두 그림을 보여줍니다....
그림1. 하의만 보여주고 싶을 때 원하지 않는 상의가 보인다! 하단만 표시하고 싶을 때 원하지 않는 상단을 모두 걸러내고 싶습니다.
그림2. 원하는 상단이 원하지 않는 하단 없이 표시됩니다. 이것이 내가 원하는 결과입니다.
그래서 제 질문은 A/B/C/D/E 지점을 표시하지 않고 맨 아래 지점만 표시할 수 있습니까? 궁금증이 풀리셨길 바라며.....
빠른 답변 감사합니다....
//+------------------------------------------------------------------+ //| 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 ); } //+------------------------------------------------------------------+
지그재그 버퍼만 표시 가능
지그재그로 다시 그리는 중
이것의 결과를 참조하십시오
여기 내가 생각해낸 것이 있습니다. 나는 [그가 게시할 때 이것을 하고 있었다] 위의 deVries 결과를 확인하지 않았습니다.
#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 ); }
#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 ); }
이것은 결과로 제공됩니다
이제 하의와 상의가 모두 지그재그로 일치합니다.
데브리스 :
귀하의 코드 덕분에 좋은 ubzen 이 여기에 왔습니다 ......이것은 결과로 제공됩니다
이제 하의와 상의가 모두 지그재그로 일치합니다.
안녕하세요 deVries님,
귀하의 코드에 감사드립니다. 마지막 지그재그 다리의 피보나치 되돌림이 얼마나 멀리 있는지 알고 싶다면 이전 지그재그 다리와 비교하십시오. 그렇게하는 방법 ?
사진처럼 하고싶은데 아래 코드가 안되네요...
감사해요,
잭
#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 ); }
안녕하세요 deVries님,
귀하의 코드에 감사드립니다. 마지막 지그재그 다리의 피보나치 되돌림이 얼마나 멀리 있는지 알고 싶다면 이전 지그재그 다리와 비교하십시오. 그렇게하는 방법 ?
감사해요,
잭이 방법으로 피보나치 그리기 지그재그 표시기로 두 점 찾기 iCustom
0.0 1.6154
100.0 1.6168
차이 0.0014
마지막 고가 = 1.6169
0.0과의 차이 0.0015 in% 0.0015/0.0014 * 100% = 107% 거리 + 0.0001
이게 네가 말하는거야 ??
친애하는 여러분, 지그재그의 바닥만 표시하도록 코드를 수정하는 방법은 무엇입니까?