icustom 지그재그 - 페이지 2

 
zig=icustom(NULL,0,' 지그재그 ',ExtDepth,ExtDeviation,ExtBackstop,2,i);
 
iCustom ZigZag에도 문제가 있습니다... 신선한 데이터를 제공하지 않습니다...오래된 데이터에 고정되어 있습니다.

시작에서 이 함수를 호출했습니다.

 double FindClosestZZ ()
  {
  int i ;
  double zzh ;
  for ( i = 0 ; i < 1000 ; i ++ )
    {
    zzh = iCustom ( Symbol () , Period () , " ZigZag " , 12 , 5 , 3 , 0 , i ) ; 
    if ( zzh != 0 )
      return ( zzh ) ;
    }
  return ( 0 ) ;
  }
 
Rosh, 이것은 테스트가 아닌 LIVE에서 발생했습니다... 내가 무엇을 하든 그 가치는 그대로 남아 있습니다. ..
까지 수정했습니다. 이전 버전의 MT4에서 표시기를 가져와 BetterZigZag로 만들었습니다(화면의 지그재그가 약간 다르지만 저 때문이 아닙니다).
더 나은 지그재그는 차트에서 더 이상 무슨 일이 일어났든 동일한 값을 반환했습니다.
여기에는 4개의 추가 버퍼, 2개의 임시(필수 아님) 및 2개의 사용 가능한 버퍼가 포함되어 있으며, 이는 실제 위치를 시간에 나타냅니다(ExtExtraBufferX, 버퍼 3 ; ExtExtraBufferY, 버퍼 4).
마지막 값이 화면에서 진행 중이더라도 여전히 동일한 것을 보았을 때 나는 상황을 더 멀리 강제하고 2개의 전역 변수에 마지막 지그재그 위치를 쓰도록 표시기를 넣었습니다(EA는 명시적으로 표시기를 요구했습니다. 화면에 표시됩니다). 이것도 작동하지 않았습니다. 여기에 코드를 첨부합니다.

 //+------------------------------------------------------------------+
//|                                                 BetterZigZag.mq4 |
//+------------------------------------------------------------------+
 
 
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- indicator parameters
extern int ExtDepth = 12 ;
extern int ExtDeviation = 5 ;
extern int ExtBackstep = 3 ;
//---- indicator buffers
double ExtMapBuffer [] ;
double ExtLowBuffer [] ;
double ExtHighBuffer [] ;
double ExtExtraBufferX [] ;
double ExtExtraBufferY [] ;
double ExtTempBufferX [] ;
double ExtTempBufferY [] ;
 
int extrapos = 0 ;
 
int Round ( double i )
    {
    string s ;
    int res ;
    s = DoubleToStr ( i , 0 ) ;
    res = StrToInteger ( s ) ;
    return ( res ) ;
    }
    
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init ()
  {   
   IndicatorBuffers ( 7 ) ;   
//---- drawing settings
   SetIndexStyle ( 0 , DRAW_SECTION ) ;
//---- indicator buffers mapping
   SetIndexBuffer ( 0 , ExtMapBuffer ) ;
   SetIndexBuffer ( 1 , ExtLowBuffer ) ;
   SetIndexBuffer ( 2 , ExtHighBuffer ) ;
   SetIndexBuffer ( 3 , ExtExtraBufferX ) ;
   SetIndexBuffer ( 4 , ExtExtraBufferY ) ;
   SetIndexBuffer ( 5 , ExtTempBufferX ) ;
   SetIndexBuffer ( 6 , ExtTempBufferY ) ;   
   SetIndexEmptyValue ( 0 , 0.0 ) ;
//---- indicator short name
   IndicatorShortName ( " BetterZigZag( " + ExtDepth + " , " + ExtDeviation + " , " + ExtBackstep + " ) " ) ;
//---- initialization done
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start ()
  {
   int    shift , back , lasthighpos , lastlowpos , index ;
   double val , res ;
   double curlow , curhigh , lasthigh , lastlow ;
//----
   for ( shift = Bars - ExtDepth ; shift >= 0 ; shift -- )
     {
      index = Lowest ( NULL , 0 , MODE_LOW , ExtDepth , shift ) ;
      val = Low [ index ] ;
      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 = ExtLowBuffer [ shift + back ] ;
               if (( res != 0 ) && ( res > val )) ExtLowBuffer [ shift + back ] = 0.0 ; 
              }
           }
        } 
      ExtLowBuffer [ shift ] = 0.0 ;
      if ( val != 0.0 ) ExtLowBuffer [ index ] = val ;
      //--- high
      index = Highest ( NULL , 0 , MODE_HIGH , ExtDepth , shift ) ;
      val = High [ index ] ;
      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 = ExtHighBuffer [ shift + back ] ;
               if (( res != 0 ) && ( res < val )) ExtHighBuffer [ shift + back ] = 0.0 ; 
              } 
           }
        }
      ExtHighBuffer [ shift ] = 0.0 ;
      if ( val != 0.0 ) ExtHighBuffer [ index ] = val ;
     }
//---- final cutting 
   lasthigh =- 1 ; lasthighpos =- 1 ;
   lastlow =- 1 ;  lastlowpos =- 1 ;
 
   for ( shift = Bars - ExtDepth ; shift >= 0 ; shift -- )
     {
      curlow = ExtLowBuffer [ shift ] ;
      curhigh = ExtHighBuffer [ shift ] ;
      if ( curlow == 0 && curhigh == 0 ) continue ;
      //---
      if ( curhigh != 0 )
        {
         if ( lasthigh > 0 ) 
           {
            if ( lasthigh < curhigh ) ExtHighBuffer [ lasthighpos ] = 0 ;
            else ExtHighBuffer [ shift ] = 0 ;
           }
         //---
         if ( lasthigh < curhigh || lasthigh < 0 )
           {
            lasthigh = curhigh ;
            lasthighpos = shift ;
           }
         lastlow =- 1 ;
        }
      //----
      if ( curlow != 0 )
        {
         if ( lastlow > 0 )
           {
            if ( lastlow > curlow ) ExtLowBuffer [ lastlowpos ] = 0 ;
            else ExtLowBuffer [ shift ] = 0 ;
           }
         //---
         if (( curlow < lastlow ) || ( lastlow < 0 ))
           {
            lastlow = curlow ;
            lastlowpos = shift ;
           } 
         lasthigh =- 1 ;
        }
     }
//---- merge 2 buffers
   lasthighpos =- 1 ;
   lastlowpos =- 1 ;
   for ( shift = Bars - 1 ; shift >= 0 ; shift -- )
     {
      if ( shift >= Bars - ExtDepth ) 
        {
         ExtMapBuffer [ shift ] = 0.0 ;
         ExtTempBufferX [ shift ] = 0.0 ;
         ExtTempBufferY [ shift ] = 0.0 ;         
         ExtExtraBufferX [ shift ] = 0.0 ;
         ExtExtraBufferY [ shift ] = 0.0 ;
        }
      else
        {
         curlow = ExtLowBuffer [ shift ] ;
         curhigh = ExtHighBuffer [ shift ] ;
         //----
         res = 0 ;
         if ( curlow != 0 )
           {
            if ( lastlowpos ==- 1 )
              {
               res = curlow ;
               lastlowpos = shift ;
              }
            else
              {
               if ( lasthighpos !=- 1 && lastlowpos > lasthighpos )
                 {
                  res = curlow ;
                  lastlowpos = shift ;
                 }
              }
           }
         if ( curhigh != 0 )
           {
            if ( lasthighpos ==- 1 )
              {
               res = curhigh ;
               lasthighpos = shift ;
              }
            else
              {
               if ( lastlowpos !=- 1 && lasthighpos > lastlowpos )
                 {
                  res = curhigh ;
                  lasthighpos = shift ;
                 }
              }
           }
         //----
         ExtMapBuffer [ shift ] = res ;
         if ( res != 0 && shift < 10000000 )
           {            
            ExtTempBufferX [ extrapos ] = shift ;
            ExtTempBufferY [ extrapos ] = res ;
            extrapos = extrapos + 1 ;
           }
        }
     }
     
  //arranging extras
  if ( ExtTempBufferX [ extrapos ] > 10000000 )
    {
     extrapos = extrapos - 1 ;
    }    
  if ( extrapos >= 0 && extrapos != 1 )
    {    
    int maxpos = extrapos ;   
    int final ;
    bool addmid = false ;
    double swap = 0 ; 
    if ( extrapos / 2 == Round ( extrapos / 2 ))
      {
      final = Round ( extrapos / 2 ) - 1 ;
      addmid = True ;
      }
    else
      {
       final = Round ( extrapos / 2 ) ;
       addmid = false ;
      }
    for ( int xscan = 0 ; xscan <= final ; xscan ++ )
       {
        swap = ExtTempBufferY [ xscan ] ;
        ExtExtraBufferY [ xscan ] = ExtTempBufferY [ maxpos ] ;
        ExtExtraBufferY [ maxpos ] = swap ;
        swap = ExtTempBufferX [ xscan ] ;
        ExtExtraBufferX [ xscan ] = ExtTempBufferX [ maxpos ] ;
        ExtExtraBufferX [ maxpos ] = swap ;        
        maxpos = maxpos - 1 ;
       }
    if ( addmid == true )
      {
       ExtExtraBufferX [ final + 1 ] = ExtTempBufferX [ final + 1 ] ;
       ExtExtraBufferY [ final + 1 ] = ExtTempBufferY [ final + 1 ] ;
      }
    GlobalVariableSet ( " ClosestZigZagX " , ExtExtraBufferX [ 0 ]) ;
    GlobalVariableSet ( " ClosestZigZagY " , ExtExtraBufferY [ 0 ]) ;
    maxpos = extrapos ;    
    } //if (extrapos!=0&&extrapos!=1)
  }
//+------------------------------------------------------------------+


에서 비슷한 문제를 봅니다. 반환된 값은 화면의 값과 다르지만 변경됩니다.

나는 Parabolic SAR 을 다음과 같이 불렀다.

PSar=iCustom(NULL,0,"포물선",0.02,0.2,0,0);

내가 얻는 것은 다음과 같습니다.
 
c0d3 :
icustom 명령으로 지그재그 표시기의 방향을 결정하려고 합니다.

이것은 내가 지금까지 가지고있는 것입니다 :

지그재그 높음=iCustom(NULL,0,"지그재그",MODE_HIGH,0);
ZigZagLow=iCustom(NULL,0,"지그재그",MODE_LOW,0);

선은 차트에 그려지지만 프로그램을 실행할 때 ZigZagHigh와 ZigZagLow는 모두 0과 같습니다.




icustom 기능으로 지그재그 표시기의 추세를 어떻게 결정합니까?


감사해요
 
안녕

3 버퍼 지그재그로 게시 할 수 있습니까?

감사해요
게인즈 박사
 
dr_gaines :
c0d3 :
icustom 명령으로 지그재그 표시기의 방향을 결정하려고 합니다.



이것은 내가 지금까지 가지고있는 것입니다.



지그재그 높음=iCustom(NULL,0,"지그재그",MODE_HIGH,0);

ZigZagLow=iCustom(NULL,0,"지그재그",MODE_LOW,0);



선은 차트에 그려지지만 프로그램을 실행할 때 ZigZagHigh와 ZigZagLow는 모두 0과 같습니다.









icustom 기능으로 지그재그 표시기의 추세를 어떻게 결정합니까?





감사해요



추세를 결정할 수 없습니다. 마지막 점의 위치는 다른 점이 추가될 때까지 가변적입니다.
 
dr_gaines :


能你们请张贴 3缓冲区之字形。

感谢 盖恩斯博士
파일:
zigzag_1.mq4  7 kb
 
TheEconomist :
Rosh, 这发生了在上生动, 不测试... 我做无论什么, 那价值留下粘住...
从MT4的一个先前的版本拿了指示物并且使它成且使它成为了一BetterZigZag
好一些的转弯急变归还了一样的价值,不管在图表上什么进一步发生了。
它包括4个额外的缓冲区, 2暂时(불필요)
当 当 看 我 我 时 最后 价值 仍然 仍然 是 一样 一样 的 的 不管 指示物 在 在 屏幕 上 正在 正在 进行 进行 进行 我 甚至 甚至 远 强迫 强迫 了 事情 并且 并且 我 我 把 指示物 放 在 2 全球 的 变数 写 最后 转弯 转弯 急 变 是 是 明析 明析 地 地 地 要求 要求 变数 变数 变数 变数指示物在屏幕上). 也这没工作. 我这里依附代码:

 //+------------------------------------------------------------------+
//|                                                 BetterZigZag.mq4|
//+------------------------------------------------------------------+
 
 


在比喻的SAR上我看相似的问题。 归还的价值不是在屏幕上喜欢一个, 它然而得到改变:

我叫了比喻的SAR象一样这:

PSar=iCustom(0,0,“比喻”,0.02,0.2,0,0);

我得到的是这:





시간>=M30

 

시간>M30

지그재그 = 더 나은 지그재그

사유: