[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 373

 
sv. :

이상한.
확인하면 모든 것이 표시됩니다.
그래프를 수직으로 압축해야 할 수 있습니다. 채널이 넓으면 증가함에 따라 표시되지 않을 수 있습니다.

매개변수를 선택한 후 무언가를 그렸습니다. 매우 좁은 범위만이 어드바이저의 조건에 맞습니다. 왼쪽으로, 오른쪽으로 한 걸음 - 공허함. 그리고 이러한 조건은 아파트의 정의에 맞지 않습니다. 나는 4자리에서 100핍에 평평해집니다. 그리고 모든 것이 나에게 분명합니다.

 //+------------------------------------------------------------------+
//|                                           ind_FletChannel_07.mq4 |
//|                                            Copyright © 2013, sv. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, sv."
#property link       "7009731@mail.ru"
//----
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
//----
extern int     Distans     = 20 ;       // Количество баров для определения канала
extern int     Channel     = 1000 ;     // Размер в пипсах канала
extern int     ZoneUnSence = 80 ;       // Размер выхода за границы канала, в пипсах
extern int     PauseBar    = 1 ;       // А это по ходу дела - смещение баров,т.е. где нужно считать.
//----
double Up[];
double Down[];
double UpSupport[];
double DownResistance[];

double pnt;
double high,   low;
double high_1 = 0 ,
       low_1  = 0 ;
bool    up_chanel, dn_chanel, FirstChanel;
bool    DrawChannel = false ;
int     limit,  History= 0 ;         // 0- все бары
int     n= 0 , n_up= 0 , n_dn= 0 ;
int     Bar;

//+------------------------------------------------------------------+
int init() 
  {
//----
 //  pnt=Point;
 //  if(Digits==5 || Digits==3) pnt*=10;
   
 //  IndicatorDigits(Digits);
 //  IndicatorBuffers(4);
//----      
   SetIndexBuffer ( 0 ,Up);
   SetIndexStyle( 0 , DRAW_LINE );
   SetIndexEmptyValue( 0 , 0.0 );

   SetIndexBuffer ( 1 ,Down);
   SetIndexStyle( 1 , DRAW_LINE );
   SetIndexEmptyValue( 1 , 0.0 );
   
   SetIndexBuffer ( 2 ,UpSupport);
   SetIndexStyle( 2 , DRAW_LINE );
   SetIndexEmptyValue( 2 , 0.0 );

   SetIndexBuffer ( 3 ,DownResistance);
   SetIndexStyle( 3 , DRAW_LINE );
   SetIndexEmptyValue( 3 , 0.0 );
//----      
   return ( 0 );
  }
//+------------------------------------------------------------------+
int start() 
  { 
   limit = Bars -IndicatorCounted()- 1 ; 
   if (limit > 1 )                    limit = Bars - 1 ;
   if (History!= 0 && limit>History)  limit = History- 1 ;                   // кол-во пересчетов по истории

   Bar = limit;
   
   // ------------------------------------------------------------------
   for ( int i=limit; i>= 0 ; i--) 
     {
       if (i < Bar-PauseBar)
       {
         // если не активна отрисовка канала, ищем канал.
         if (DrawChannel== false )
         {
           // отределяется минимум и максимум на заданном интервале Distans
           double low  = iLow ( NULL , 0 ,iLowest ( NULL , 0 ,MODE_LOW, Distans,i));
           double high = iHigh( NULL , 0 ,iHighest( NULL , 0 ,MODE_HIGH,Distans,i));
          
           // и если разность между максимумом и минимумом меньше заданной ширины канала Channel
           if ( (high-low) < Channel* Point )  DrawChannel= true ;
         }  
       }
       // ------------------------------------------------------------------
       if (DrawChannel)
       {  
         // определяются границы канала как максимум и минимум на интервале Distans
        
         // отрисовка первоначального отправного канала
         if (FirstChanel) { Up[i]   = high;   Down[i] = low;  }
         if (up_chanel)   { Up[i]   = high;   UpSupport[i]      = high - Channel* Point ; }   // отрисовка канала тренда вверх
         if (dn_chanel)   { Down[i] = low;    DownResistance[i] = low  + Channel* Point ; }   // отрисовка канала тренда вниз
        
         // определяются границы отправного первоначального канала
         // ------------------------------------------------------------------
         if ( high_1== 0 && low_1== 0 )    
         {
          FirstChanel= true ;  high_1=high;  low_1=low; 
         }
         else                      // если первоначальный отправной канал уже определён и отрисован
         { 
           if (high > high_1)       // если верхняя граница нового канала выше верхней границы предыдущего канала, то это восходящий тренд
           {
            up_chanel= true ;       // активируем флаг отрисовки канала тренда вверх
            high_1 = high;       // и перезаписываем значение
            low_1  = low;
           }
        
           if (low < low_1)         // если нижняя граница нового канала ниже нижней границы предыдущего канала, то это нисходящий тренд
           {
            dn_chanel= true ;       // активируем флаг отрисовки канала тренда вниз
            high_1=high;         // и перезаписываем значение
            low_1=low;
           }
         }  
         // ------------------------------------------------------------------
        
         if (Up[i]!= 0 && UpSupport[i]!= 0 )         // пока условие выполняется, границы канала не изменяются
         {
           if ((Close[i] > Up[i]        + ZoneUnSence* Point ) ||
              (Close[i] < UpSupport[i] - ZoneUnSence* Point ))
           {
             // если условие не выполняется, флаг сбрасывается - Т.е. если не в границах канала
            up_chanel= false ;
            dn_chanel= false ;
            FirstChanel= false ; 
            DrawChannel= false ;
           }
         } 
         // ------------------------------------------------------------------
         if (Down[i]!= 0 && DownResistance[i]!= 0 )
         {
           if ((Close[i] > DownResistance[i]+ZoneUnSence* Point ) ||
              (Close[i] < Down[i]-ZoneUnSence* Point ))
           {
             // если условие не выполняется, флаг сбрасывается - Т.е. если не в границах канала
            up_chanel= false ;
            dn_chanel= false ;
            FirstChanel= false ;
            DrawChannel= false ;
           }
         }
         if (Up[i]!= 0 && Down[i]!= 0 )
         {
           if ((Close[i] > Up[i]   + ZoneUnSence* Point ) ||
              (Close[i] < Down[i] - ZoneUnSence* Point ))
           {
             // если условие не выполняется, флаг сбрасывается
            up_chanel= false ;
            dn_chanel= false ;
            FirstChanel= false ; 
            DrawChannel= false ;
           }
         }    
        Bar = i; 
       }    
     } 
   // Конец перебора
   // ------------------------------------------------------------------
   return ( 0 );
  }
//+------------------------------------------------------------------+

나는 그것을 조금 바꿨다 - 나는 그것을 알아 내려고 노력했다. 그러나 이 형식에서는 모든 것이 작동합니다. TF는 H1을 사용했습니다. 다른 TF에서는 매개변수를 선택하여 렌더링을 달성할 수 없었던 것이 아쉽습니다. 예를 들어 5분과 15분에. - 이러한 TF를 사용하여 플랫을 달성하는 것이 가능하다고 가정할 수 있습니다. 그러나 올빼미의 논리는 아마도 고통을 겪을 것입니다. 여기에서 아마도 그것을 분류해야합니다. (이와 관련하여 더 숙련된 사람이 아이디어를 제안하거나 오류를 지적한다면.)

그리고 나는 렌더링에 어떤 문제도 발견하지 못했습니다.

이 표시기에서 당신은 대다수와 마찬가지로 한때였던 것을 그립니다. 이는 지표 작성 템플릿의 경우 정상입니다. 그러나 현재 일어나고 있는 일(당신이 말했듯이 - 현재 막대에서)은 이 지표의 조건에 속하지 않습니다. 따라서 현재 막대에는 문제가 없습니다.

 
Chiripaha :

매개변수를 선택한 후 무언가를 그렸습니다. 매우 좁은 범위만이 어드바이저의 조건에 맞습니다. 왼쪽으로, 오른쪽으로 한 걸음 - 공허함. 그리고 이러한 조건은 아파트의 정의에 맞지 않습니다. 나는 4자리에서 100핍에 평평해집니다. 그리고 모든 것이 나에게 분명합니다.

나는 그것을 조금 바꿨다 - 나는 그것을 알아 내려고 노력했다. 그러나 이 형식에서는 모든 것이 작동합니다. TF는 H1을 사용했습니다. 다른 TF에서는 매개변수를 선택하여 렌더링을 달성할 수 없었던 것이 아쉽습니다. 예를 들어 5분과 15분에. - 이러한 TF를 사용하여 플랫을 달성하는 것이 가능하다고 가정할 수 있습니다. 그러나 올빼미의 논리는 아마도 고통을 겪을 것입니다. 여기에서 아마도 그것을 분류해야합니다. (이와 관련하여 더 숙련된 사람이 아이디어를 제안하거나 오류를 지적한다면.)

그리고 나는 렌더링에 어떤 문제도 발견하지 못했습니다.

이 표시기에서 당신은 대다수와 마찬가지로 한때였던 것을 그립니다. 이는 지표 작성 템플릿의 경우 정상입니다. 그러나 현재 일어나고 있는 일(당신이 말했듯이 - 현재 막대에서)은 이 지표의 조건에 속하지 않습니다. 따라서 현재 막대에는 문제가 없습니다.


PauseBar 매개변수는 한 채널을 다른 채널에서 분리하는 최소 거리입니다. 귀하의 버전에서 이 매개변수는 5보다 커야 하며, 다른 다양한 매개변수와 함께 그려집니다.
그러나 새로운 막대의 출현으로 그림을 그리는 데 문제가 남아있었습니다.

 
sv. :


PauseBar 매개변수는 한 채널을 다른 채널에서 분리하는 최소 거리입니다. 귀하의 버전에서 이 매개변수는 5보다 커야 하며, 다른 다양한 매개변수와 함께 그려집니다.
그러나 새로운 막대의 출현으로 그림을 그리는 데 문제가 남아있었습니다.

나는 아직도 그것을 더 정확하게 이해할 수 없습니다. - 솔직히 말해서, 나는 당신 지표의 논리를 이해할 수 없습니다(본질은 이해하지만). 하지만...

봐 - 문제는 정확히 이 블록에 있습니다.

        if (FirstChanel) { Up[i]   = high;   Down[i] = low;  }                             // отрисовка первоначального отправного канала
        if (up_chanel)   { Up[i]   = high;   UpSupport[i]      = high - Channel* Point ; }   // отрисовка канала тренда вверх
         if (dn_chanel)   { Down[i] = low;    DownResistance[i] = low  + Channel* Point ; }   // отрисовка канала тренда вниз

어떤 시점에서 버퍼에 값이 기록되지 않으므로 0으로 설정됩니다. 따라서 아래로 스틱 - 0. 논리를 구축하는 방법과 추가해야 할 사항 - 이해할 수 없습니다. 그러나 데이터는 기록되지 않습니다. 분명히 플래그가 포함되어 있기 때문입니다. 매개변수별

DrawChannel= false ;

따라서 값은 버퍼에 대한 할당에 속하지 않습니다. - 어떻게든 이 사건을 이겨야 합니다.

 
Chiripaha :

나는 아직도 그것을 더 정확하게 이해할 수 없습니다. - 솔직히 말해서, 나는 당신 지표의 논리를 이해할 수 없습니다(본질은 이해하지만). 하지만...

봐 - 문제는 정확히 이 블록에 있습니다.

어떤 시점에서 버퍼에 값이 기록되지 않으므로 0으로 설정됩니다. 따라서 아래로 스틱 - 0. 논리를 구축하는 방법과 추가해야 할 사항 - 이해할 수 없습니다. 그러나 데이터는 기록되지 않습니다. 분명히 플래그가 포함되어 있기 때문입니다. 매개변수별

따라서 값은 버퍼에 대한 할당에 속하지 않습니다. - 어떻게든 이 사건을 이겨야 합니다.


나는 그것이 논리의 문제라는 것을 이해합니다. 나는 생각할 것이다.
도와주셔서 감사합니다.

추신
다른 매개변수 집합을 사용하여 PauseBar 매개변수를 증가시키면서 기록에서 모든 것이 정상인지 확인했습니까? 아니면 이것에도 문제가 있습니까?

 
확장된 Askcode 테이블의 기호를 보고 표시하는 방법은 무엇입니까?
 
sv. :


나는 그것이 논리의 문제라는 것을 이해합니다. 나는 생각할 것이다.
도와주셔서 감사합니다.

추신
다른 매개변수 집합을 사용하여 PauseBar 매개변수를 증가시키면서 기록에서 모든 것이 정상인지 확인했습니까? 아니면 이것에도 문제가 있습니까?

나는 PauseBar의 증가를 확인했고 1분과 5분에 이 막대기를 얻었습니다. 그러나 나는 그들을 둘러싸는 방법을 알아낼 수 없습니다. 값이

DrawChannel= false ;

~에

 if (dn_chanel)   { Down[i] = low;    DownResistance[i] = low  + Channel* Point ; }   // отрисовка канала тренда вниз

이전 막대의 값은 다음과 같습니다.

 if (dn_chanel)   { Down[i] = Down[i+1];    DownResistance[i] = DownResistance[i+1]; }   // отрисовка канала тренда вниз
그러나 그것을 구현하려고 할 때 내 전체 표시기가 "이동"합니다. 이는 논리를 이해하지 못하여 삽입할 위치와 조건을 파악할 수 없기 때문입니다.
 
zfs :
확장된 Askcode 테이블의 기호를 보고 표시하는 방법은 무엇입니까?

ANSI라고 합니다.

스크립트를 첨부했습니다.

파일:
ansi.mq4  2 kb
[Deleted]  
포럼에서 처음으로 관심 있는 질문을 하기로 결정했습니다. 이미 열려 있는 위치에 귀하의 의견(1회 이상)을 삽입하기 위해 터미널에서 그러한 변경을 수행할 수 있습니까? 댓글을 열 때 즉시가 아닙니다. 그리고 이미 열렸을 때 - 현재 주석이 나타나도록 ??
 
문제 해결 방법을 알려주십시오. 동일한 고문이 여러 차트에 매달리고 동시에 두 개의 차트에서 주문을 여는 신호가 있습니다. 단, 2차 주문은 열지 않아야 합니다. EA는 미결 주문을 확인하지만 이것은 도움이 되지 않습니다. 분명히 첫 번째 EA가 주문을 여는 동안 두 번째 EA도 열기 요청을 보내기 때문입니다. 해결책이 있습니까?
 
Twoberg :
포럼에서 처음으로 관심 있는 질문을 하기로 결정했습니다. 이미 열려 있는 위치에 귀하의 의견(1회 이상)을 삽입하기 위해 터미널에서 그러한 변경을 수행할 수 있습니까? 댓글을 열 때 즉시가 아닙니다. 그리고 이미 열렸을 때 - 현재 주석이 나타나도록 ??

아니다