오류, 버그, 질문 - 페이지 3129

 
Alexey Viktorov # :

귀하의 경우 두 가지 조건이 모두 충족되어야 하므로 그렇지 않습니다. 하지만 이것을 넣으면

그럼 네. 조건 "a"가 충족되면 두 번째 조건은 확인되지 않습니다. 그들은 수년 동안 이것을 위해 싸웠고 이제 당신은 지난 세기로 돌아갈 것을 제안하고 있습니다 ...

이상하게도 =true일 때 || 뿐만 아니라 &&에서도 나머지는 검사되지 않습니다. 이것을 다른 방법으로 설명하는 방법(표시기의 작동에서 의미를 찾는 것은 의미가 없습니다. 여기서는 코드에 대해 이야기하고 있습니다):

 #property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots    1
#property indicator_type1    DRAW_ARROW
#property indicator_color1   Gray
#property indicator_label1    "Fractal Up"
//--- indicator buffers
double ExtUpperBuffer[];
//--- 10 pixels upper from high price
int     ExtArrowShift=- 10 ;

void OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,ExtUpperBuffer, INDICATOR_DATA );
   IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger ( 0 , PLOT_ARROW , 217 );
//--- arrow shifts when drawing
   PlotIndexSetInteger ( 0 , PLOT_ARROW_SHIFT ,ExtArrowShift);
//--- sets drawing line empty value--
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
  }

int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   if (rates_total< 5 )
       return ( 0 );

   int start;
//--- clean up arrays
   if (prev_calculated< 7 )
     {
      start= 2 ;
       ArrayInitialize (ExtUpperBuffer, EMPTY_VALUE );
     }
   else
      start=rates_total- 5 ;

   for ( int i=start; i<rates_total- 3 && ! IsStopped (); i++)
     {
       //--- Upper Fractal
       if (high[i]>high[i+ 1 ] && high[i]>high[i+ 2 ] && high[i]>high[i+ 3 ] && high[i]>high[i+ 4 ])
         ExtUpperBuffer[i]=high[i];
       else
         ExtUpperBuffer[i]= EMPTY_VALUE ;
     }

   return (rates_total);
  }

터미널은 조용합니다. 하지만 바꿀 가치가 있는

 if (high[i]>high[i+ 1 ] && high[i]>high[i+ 2 ] && high[i]>high[i+ 3 ] && high[i]>high[i+ 4 ])

 if (high[i]>high[i+ 4 ] && high[i]>high[i+ 2 ] && high[i]>high[i+ 3 ] && high[i]>high[i+ 1 ])

'array out of range '라는 악명 높은 메시지가 나타나면 첫 번째 옵션과 달리 초과 인덱스가 있는 배열 즉시 발견하기 때문입니다.

 
x572intraday # :

감히 그것을 버그라고 부르지 않을 것입니다. 따라서 if 문의 한 가지 기능을 발견했다고 말할 것입니다. 나는 분명히 이것이 다른 YaPam에 적용될 수 있음을 안다.

a가 true이면 검사가 Array[over_index]로 점프하고 터미널이 ' array out of range ' 부분에 대해 폭격을 시작하는 때입니다. 이는 완벽하게 공정합니다. 거짓으로 판명되면 Array[over_index] 진리 조건을 확인하지 않습니다. 즉, 인덱스 가 중복되고, 추가로 건너뛰고 인코더는 인덱스가 존재하지 않는 배열을 알지 못합니다. 그의 프로그램에서 걷고 있습니다 ... 더 정확하게는 존재하지만 중복됩니다.

아마도 이것은 ' array out of range ' 에 대한 검사가 if 에서 끝까지 발생하고 동일한 메시지가 발행되도록 수정해야 할 필요가 있습니까? 아니면 오퍼레이터의 속도를 크게 떨어뜨릴까요?


구문이 다른 언어는 무엇입니까? "문자 그대로 번역의 구문은 구성뿐만 아니라 순서 를 의미합니다 ..".

' array out of range ' 가 있는지 확인하려면 순서를 변경하십시오.

 if (Array[over_index]>val && a) {...}
 
Lilita Bogachkova # :

구문이 다른 언어는 무엇입니까? " 리터럴 번역의 구문은 컴파일뿐만 아니라 정렬을 의미합니다..".

' array out of range ' 가 있는지 확인하려면 순서를 변경하십시오.

수표가 필요하므로 주문이 바람직합니다.

예를 들어 "a"가 더 자주 변경되면 첫 번째 인수로 두는 것이 좋습니다.

 
Vitaly Muzichenko # :

수표가 필요하므로 주문이 바람직합니다.

예를 들어 "a"가 더 자주 변경되면 첫 번째 인수로 두는 것이 좋습니다.

아니요, 주요 조건은 첫 번째 조건에 따라 다르며 나머지는 추가 조건일 뿐입니다.

예를 들어, 아직 근무 시간이 시작되지 않은 경우 현재 근무 시간의 시간을 확인하는 것은 의미가 없습니다.
 

사실, 나는 우연히 이 기능을 우연히 발견했습니다. 전혀 다른걸 원했는데...

 if (high[i]>high[i+ 1 ] && high[i]>high[i+ 2 ] && high[i]>high[i+ 3 ] && ... && high[i]>high[i+n])

또는

 if (high[i]>high[i+ 1 ])
   if(high[i]>high[i+2])
      if(high[i]>high[i+3])
         if(...)
            if(high[i]>high[i+n])

문제는 n이 상당히 클 수 있다는 것입니다. 그래서 저는 이 긴 조건 체인 . 다음과 같이 시도했습니다.

 for(int i=start; i<rates_total-3 && !IsStopped(); i++)
{
   bool h_plus=true; //false?
   for ( int increment= 1 ; increment<=n; increment++)
      h_plus&=high[i]>high[i+increment];
   if (h_plus) {...}
   ...
}

그러나 어떤 종류의 모자가 나왔습니다. 글쎄, 적어도 그러한 알고리즘이 있는 h_plus는 중복 인덱스가 있는 배열을 검사하는 조건을 포함하여 검사되는 조건의 전체 합계를 강제로 수용해야 하기 때문에, 이것이 없는 첫 번째 확장 경우 에는 그렇지 않았습니다. . 글쎄, 다른 경고는 그림을 망칠 것입니다.

원할 가치가 있습니까? 그런 말이 가능한가요?

 
Lilita Bogachkova # :

구문이 다른 언어는 무엇입니까? "문자 그대로 번역의 구문은 구성뿐만 아니라 순서 를 의미합니다 ..".

' array out of range ' 가 있는지 확인하려면 순서를 변경하십시오.

무엇을 앞에 두고 뒤에 무엇을 넣을지 항상 미리 알 수 있는 것은 아닙니다.

 
Lilita Bogachkova # :

아니요, 주요 조건은 첫 번째 조건에 따라 다르며 나머지는 추가 조건일 뿐입니다.

예를 들어, 아직 근무 시간이 시작되지 않은 경우 현재 근무 시간의 시간을 확인하는 것은 의미가 없습니다.

예, 먼저 신호 조건을 확인하고 배열을 반복하고 비교하고 현재 가격을 확인한 다음 시간이 맞지 않은 것으로 나타났지만 그 전에 많은 복잡한 작업이 수행되었습니다.

권리?

 
Vitaly Muzichenko # :

예, 먼저 신호 조건을 확인하고 배열을 반복하고 비교하고 현재 가격을 확인한 다음 시간이 맞지 않은 것으로 나타났지만 그 전에 많은 복잡한 작업이 수행되었습니다.

권리?

맞습니다. 그렇게 할 필요가 없습니다.
 
Vitaly Muzichenko # :

확인하다

그리고 위의 조건에서 ""가 항상 거짓일 것이라고 누가 말했습니까?

 
x572intraday # :

사실, 나는 우연히 이 기능을 우연히 발견했습니다. 전혀 다른걸 원했는데...

또는

문제는 n이 상당히 클 수 있다는 것입니다. 그래서 저는 이 긴 조건 체인 . 다음과 같이 시도했습니다.

그러나 어떤 종류의 모자가 나왔습니다. 글쎄, 적어도 그러한 알고리즘이 있는 h_plus는 중복 인덱스가 있는 배열을 검사하는 조건을 포함하여 검사되는 조건의 전체 합계를 강제로 수용해야 하기 때문에, 이것이 없는 첫 번째 확장 경우 에는 그렇지 않았습니다. . 글쎄, 다른 경고는 그림을 망칠 것입니다.

원할 가치가 있습니까? 그런 말이 가능한가요?

나는 이 코드에서 아무것도 이해하지 못한다

 for ( int i=start; i<rates_total- 3 && ! IsStopped (); i++)
{
   bool h_plus= true ; //false?
   for ( int increment= 1 ; increment<=n; increment++)
      h_plus & =high[i]>high[i+increment];
   if (h_plus) {...}
   ...
}

이 코드에서 강조 표시된 &의 의미는 무엇입니까? 그리고 어떤 루프에서 if(h_plus)를 실행해야 합니까? 중괄호를 놓쳤습니까?