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

 


알렉스루크 :

연결 끊김이 없었고 틱에 다시 그리기도 했으며 시간 프레임이 많을수록 빈도가 줄어듭니다.

그리고 시작일부터 종료일까지의 계산 방식에서 (나는 그 중 3개가 있음을 알았다) 없이

막대의 수를 결정할 때 이것이 아마도 발생하는 것입니다(재계산

모든 막대) 그러나 이것은 여전히 반사입니다 - 우리는 확인할 것입니다 ...

이 문제를 해결하는 다른 방법이 있을 수 있습니다.


예델킨 :

물론 접근 방식이 있습니다. if(prev_calculated==0)이면 모든 막대에 대해 초기 계산을 수행합니다. 결과적으로, 각각의 새로운 틱(만약 0 < prev_calculated < Rates_total)에 대해 우리는 마지막으로 나타난 막대에 대해서만 for(int i=prev_calculated-1;i<rates_total;i++)와 같은 계산을 합니다.


Chegos는 여전히 다시 그립니다. 다음과 같이 구현됩니다.


int 계산된1=BarsCalculated(StdDev1Handle);

...........................

if( CopyBuffer (StdDev1Handle,0,0,to_copy,ExtStdDev1Buffer)<to_copy)return(0);

...........................

int data1=CopyOpen(Symbol1,0,0,rates_total,Open1Buffer);

...........................

for(int i=rates_total-2; i>=0; i--)
{
if(시간[i]>=날짜 시작)

{


다시 그리거나 하지 않지만 여전히 요점은 아마도 코드의 정확성에 있을 것입니다.

그리고 터미널에는 없습니다 (그러나 적어도 다시 그리기는 지금 그렇게 표현력이 없습니다 ...)

진드기가 있든 없든 여전히 다시 그릴 수 있습니다.

연관성이 없는 것 같다(인과관계)

마음에 오는 유일한 것은 약한 프로세서 또는 정지

터미널(MT5). MT4에서는 모든 것이 다시 칠하지 않고도 작동합니다.

 

alexluek :

...........................

다시 그리거나 하지 않지만 여전히 요점은 코드의 정확성입니다.

그리고 터미널에는 없습니다 (그러나 적어도 다시 그리기는 지금 그렇게 표현력이 없습니다 ...)

소스 코드로 서비스 데스크에 요청을 생성하면 우리가 알아낼 것입니다.
 

ChartGetInteger 함수 의 두 번째 변형으로 작업한 사람이 있습니까?

 2 . Возвращает true или false в зависимости от успешности выполнения функции.
В случае успеха значение свойства помещается в приемную переменную, 
передаваемую по ссылке последним параметром.

bool   ChartGetInteger(
   long     chart_id,         // идентификатор графика
   int      prop_id,         // идентификатор свойства
   int      sub_window,       // номер подокна
   long &   long_var         // сюда примем значение свойства
   );

? 속성 값이 수신 변수로 전달되지 않는 것 같습니다. 적어도 이 동작은 구문을 사용할 때 관찰됩니다.

 if (! ChartGetInteger (Chart, CHART_WINDOWS_TOTAL ,windows))
함수는 true를 반환하지만 windows 수신 변수에는 이 변수가 초기화될 때 받은 값이 포함됩니다. 이 경우 함수의 첫 번째 버전이 올바른 값을 생성합니다. (그리고 사소한 일: 수신 변수가 long 유형 으로 선언되면 컴파일러는 경고를 발행합니다).
 
Yedelkin :

ChartGetInteger 함수 의 두 번째 변형으로 작업한 사람이 있습니까?

? 속성 값이 수신 변수로 전달되지 않는 것 같습니다. 적어도 이 동작은 구문을 사용할 때 관찰됩니다.

함수는 true를 반환하지만 windows 수신 변수에는 이 변수가 초기화될 때 받은 값이 포함됩니다. 이 경우 함수의 첫 번째 버전이 올바른 값을 생성합니다. (그리고 사소한 일: 수신 변수가 long 유형 으로 선언되면 컴파일러는 경고를 발행합니다).
예, 있습니다. 배경색만 요청하려고 했습니다. 서비스 데스크에 편지를 쓰고 싶었지만 잊어 버렸습니다.
 
Lizar :
예, 있습니다. 배경색만 요청하려고 했습니다. 서비스 데스크에 편지를 쓰고 싶었지만 잊어 버렸습니다.
알았어, 내가 쓸게.
 
Yedelkin :

ChartGetInteger 함수 의 두 번째 변형으로 작업한 사람이 있습니까?

? 속성 값이 수신 변수로 전달되지 않는 것 같습니다. 적어도 이 동작은 구문을 사용할 때 관찰됩니다.

함수는 true를 반환하지만 windows 수신 변수에는 이 변수가 초기화될 때 받은 값이 포함됩니다. 이 경우 함수의 첫 번째 버전이 올바른 값을 생성합니다. (그리고 사소한 일: 수신 변수가 long 유형 으로 선언되면 컴파일러는 경고를 발행합니다).

잘못된 기능을 사용하고 있는 것 같습니다. 이것은 함수의 첫 번째 버전입니다(세 개의 매개변수 포함). (생각대로) true가 아니지만 매개변수의 값을 반환합니다.

 if (! ChartGetInteger (Chart, CHART_WINDOWS_TOTAL ,windows))

귀하의 코드가 보이지 않지만 올바른 방법은 다음과 같습니다.

 long Chart=0,windows;
if (! ChartGetInteger (Chart, CHART_WINDOWS_TOTAL ,0,windows))
  {
   //--- всё плохо
  }
 
uncleVic :

잘못된 기능을 사용하고 있는 것 같습니다. 이것은 함수의 첫 번째 버전입니다(세 개의 매개변수 포함). (생각대로) true가 아니지만 매개변수의 값을 반환합니다.

귀하의 코드가 보이지 않지만 올바른 방법은 다음과 같습니다.

흠 ... 예, 정확히이 잼이있었습니다. 이 기능을 사용하려고 시도한 이전 코드를 보았습니다.
 
uncleVic :

잘못된 기능을 사용하고 있는 것 같습니다. 이것은 함수의 첫 번째 버전입니다(세 개의 매개변수 포함). (생각대로) true가 아니지만 매개변수의 값을 반환합니다.

확인. 알아봅시다.

1. 이 함수는 예제와 같은 이름을 가진 함수를 제공하기 때문에 "ta"로 사용됩니다. 우리는 이 기능의 어떤 버전(첫 번째 또는 두 번째)이 사용되는지에 대해서만 이야기할 수 있습니다.

2. 실제로, 공식적으로 함수의 첫 번째 버전에는 세 개의 매개변수가 있고 두 번째 버전에는 네 개의 매개변수가 있습니다. 그러나 동시에 두 가지 호출 변형에 모두 존재하는 sub_window 매개변수에 대한 설명에서 "대부분의 속성은 하위 창 번호를 지정할 필요가 없습니다."라고 분명히 명시되어 있습니다. 질문이 발생합니다. CHART_WINDOWS_TOTAL( 표시기 하위 창을 포함한 차트 창의 총 수) 과 같은 속성에 대해 창 번호를 지정해야 합니까 아니면 필요하지 않습니까?

3. 차트의 전체 창/하위 창 수를 얻기 위해 별도의 하위 창 수를 표시할 필요가 없다고 가정하는 것이 논리적입니다. 이 결론은 핸드북 자체(섹션 플롯 속성 )에서 직접 예를 통해 뒷받침됩니다.

   int windows= ChartGetInteger ( 0 , CHART_WINDOWS_TOTAL );
   Print ( "CHART_WINDOWS_TOTAL = " ,windows);

Chart Operations / ChartWindowOnDropped 섹션에 유사한 접근 방식이 설명되어 있습니다.

이러한 예로부터 핸드북의 저자는 차트의 전체 창/하위 창 수를 얻기 위해 별도의 하위 창 수를 표시할 필요가 없다는 입장임을 알 수 있습니다. 물론 예제에서는 첫 번째 버전의 함수를 사용하지만 동일한 속성(즉: CHART_WINDOWS_TOTAL )에 대해 이야기하고 있으므로 이 결론이 함수의 두 번째 버전에 적용된다고 가정하는 것이 논리적입니다. 특히 디렉토리에 기능의 두 번째 버전에 대해 0 하위 창 번호를 지정해야 할 필요성에 대한 예약이 포함되어 있지 않다고 생각하는 경우에는 더욱 그렇습니다.

4. 당신이 제공한 예에서, 두 번째 버전의 함수의 경우 속성 자체에서 하위 창 번호를 지정할 필요가 없더라도 항상 세 번째 매개변수( sub_window )를 지정해야 합니다. 저것들. 함수의 첫 번째 버전(2개 및 3개의 매개변수 모두와 함께 사용할 수 있음)과 달리 함수의 두 번째 버전은 항상 4개의 매개변수를 모두 지정해야 합니다. 바르게?

5. 맞다면 두 가지 사실을 알게 되었습니다. 첫째, 문제의 초기 버전이 잘못된 것으로 판명되었습니다. 둘째, 이 잘못된 버전의 출현 원인은 디렉토리에 반영된 정보의 불완전성에 있습니다. 따라서 디렉토리에 설명을 추가할 것을 제안합니다. "두 번째 옵션에는 기본값이 없으므로 하위 창 번호를 항상 지정해야 합니다. 하위 창 번호를 지정할 필요가 없는 대부분의 속성의 경우 0(차트의 기본 창)을 지정하는 데 필요합니다." 또는 그런 것.

예를 들어 주셔서 감사합니다. 짧고 명확하게.

 
Yedelkin :
함수의 첫 번째 버전에서 int 매개변수는     sub_window=0 은 기본값이 있으므로 생략할 수 있고, 두 번째에는 그런 기본값이 없으므로 지정해야 합니다.

 
Yedelkin :

확인. 알아봅시다.

1. 이 함수는 예제와 같은 이름을 가진 함수를 제공하기 때문에 "ta"로 사용됩니다. 우리는 이 기능의 어떤 버전(첫 번째 또는 두 번째)이 사용되는지에 대해서만 이야기할 수 있습니다.

2. 실제로, 공식적으로 함수의 첫 번째 버전에는 세 개의 매개변수가 있고 두 번째 버전에는 네 개의 매개변수가 있습니다. 그러나 동시에 두 가지 호출 변형에 모두 존재하는 sub_window 매개변수에 대한 설명에서 "대부분의 속성은 하위 창 번호를 지정할 필요가 없습니다."라고 분명히 명시되어 있습니다. 질문이 발생합니다. CHART_WINDOWS_TOTAL( 표시기 하위 창을 포함한 차트 창의 총 수) 과 같은 속성에 대해 창 번호를 지정하는 것이 필요합니까 아니면 필요하지 않습니까?

3. 차트의 전체 창/하위 창 수를 얻기 위해 별도의 하위 창 수를 표시할 필요가 없다고 가정하는 것이 논리적입니다. 이 결론은 핸드북 자체(섹션 플롯 속성 )에서 직접 예를 통해 뒷받침됩니다.


1. 함수가 실제로 오버로드되었다는 사실을 고려하면 동일하지 않다고 주장할 수 있습니다.

2. 이것이 요점입니다. MQL5의 함수 오버로드 논리를 올바르게 이해하면 첫 번째 옵션은 2개 또는 3개의 매개변수와 함께 사용할 수 있고 두 번째 옵션은 4개만 사용할 수 있습니다.

또는 함수가 두 개 또는 세 개의 매개변수를 수신하는 경우 MQL5는 첫 번째 옵션을 사용하고 4와 함께 두 번째 옵션을 항상 사용합니다.

결론은 매개변수 번호가 4가 아닌 두 번째 옵션을 사용하는 경우 컴파일러가 호출에서 혼동을 일으킨다는 것입니다.

3. 참고서에 약간의 부정확(또는 약간 잘못된 표현)이 있습니다. 일반적인 의미는 다음과 같습니다. 대부분의 속성은 창 번호를 지정할 필요가 없지만 이러한 속성 에 대한 첫 번째 옵션 에서는 창 번호를 생략할 수 있습니다( 번째 옵션에서는 지정해야 하지만 무시됨).

4. 위의 내용에 따르면 이 예제에서는 컴파일러가 함수의 첫 번째 버전을 선택합니다.

   int windows= ChartGetInteger ( 0 , CHART_WINDOWS_TOTAL );
   Print ( "CHART_WINDOWS_TOTAL = " ,windows);
컴파일러는 첫 번째 변형에서 세 번째 매개변수를 생략할 수 있고 두 번째 변형에서 반드시 존재해야 한다는 사실에 근거하여 그러한 결론을 내립니다!!!