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

 
Nikolai Semko :

제로인 것은 분명합니다.

그리고 무엇 - 주어진 기간에 0 막대가 있다고 결정하는 것이 정상적인 22초입니까?

Bars의 내부 구현에서 명백한 알고리즘 버그입니다.

하지만 주어진 시간에 0개의 막대를 이 0 과 어떻게 구별하는지 이해가 되지 않습니다.

문서에서: Bars() 함수를 호출 할 때 지정된 매개변수를 가진 시계열에 대한 데이터가 터미널에서 아직 생성되지 않았거나 함수 호출 시 시계열 데이터가 거래 서버와 동기화되지 않은 경우, 함수는 null 값을 반환합니다 .

즉, 결과 0과 오류 0을 구별하는 방법은 무엇입니까?
 
A100 :

하지만 주어진 시간에 0개의 막대를 이 0 과 어떻게 구별하는지 이해가 되지 않습니다.

문서에서: Bars() 함수를 호출 할 때 지정된 매개변수를 가진 시계열에 대한 데이터가 터미널에서 아직 생성되지 않았거나 함수 호출 시 시계열 데이터가 거래 서버와 동기화되지 않은 경우, 함수는 null 값을 반환합니다 .

이 질문에서 0의 기원은 중요하지 않지만 중요한 것은 이 0이 몇십초의 형태로 몇 년 동안 Bars 함수에 의해 탄생한다는 것입니다.

 
A100 :

하지만 주어진 시간에 0개의 막대를 이 0 과 어떻게 구별하는지 이해가 되지 않습니다.

문서에서: Bars() 함수를 호출 할 때 지정된 매개변수를 가진 시계열에 대한 데이터가 터미널에서 아직 생성되지 않았거나 함수 호출 시 시계열 데이터가 거래 서버와 동기화되지 않은 경우, 함수는 null 값을 반환합니다 .

즉, 결과 0과 오류 0을 구별하는 방법은 무엇입니까?

글쎄, 스스로 판단하십시오. Bars 함수의 아날로그를 생성하는 작업에 직면하고 datetime형 배열이 주어지면 숫자가 증가함에 따라 요소의 값이 감소합니다. 즉, 배열이 정렬됩니다.

주어진 시간에 정렬된 배열의 요소 수를 찾는 알고리즘을 구현하는 것이 어렵다고 생각하십니까? 그리고 주어진 간격에 단일 막대가 없거나 배열이 아직 초기화되지 않은 경우 0이 반환되어야 합니다.

아니요, 알고리즘은 매우 간단합니다. 22초 동안 실행할 수 있는 것은 무엇입니까?

 
Nikolai Semko :

이 질문에서 0의 기원은 중요하지 않지만 중요한 것은 이 0이 몇십초의 형태로 몇 년 동안 Bars 함수에 의해 탄생한다는 것입니다.

중요한 것은 원점입니다. 왜냐하면 ::Bars()가 히스토리 오류의 경우 -1을 반환하고 0이 아니라(지금처럼) 지연이 없을 것이기 때문입니다. 그리고 이제 0은 오류로 해석되고 내부 재시도 때문에 지연이 발생합니다 https://www.mql5.com/en/forum/1111/page2200#comment_6955559

또한 추가 검사를 도입했다고 가정해 보겠습니다. 지연이 사라졌습니다. 그 다음엔? 당신은 0을 얻었다. 이것은 결과인가 오류인가?

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2018.03.31
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Vitaly Muzichenko :

아마도 이것은 기록 로드 때문일 것입니다.

그래서 농담은 첫 번째 인쇄가 지연 없이 처리된다는 것입니다. H4 기록이 이미 로드되었습니다.

그리고 CopyTime H4를 W1으로 변경하면 브레이크가 전혀 걸리지 않습니다. 그래서 W1의 히스토리도 이미 로드되어 있습니다.

Bars는 CurrentTime()에서 0 bar 의 여는 시간 까지의 시간 간격에 있는 시간부터 혼미에 빠지게 됩니다.

 
A100 :

중요한 것은 원점입니다. 왜냐하면 ::Bars()가 히스토리 오류의 경우 -1을 반환하고 0이 아니라(지금처럼) 지연이 없을 것이기 때문입니다. 그리고 이제 0은 오류로 해석되고 내부 반복으로 인해 지연이 발생합니다 https://www.mql5.com/en/forum/1111/page2200#comment_6955559

또한 추가 검사를 도입했다고 가정해 보겠습니다. 지연이 사라졌습니다. 그 다음엔? 당신은 0을 얻었다. 이것은 결과인가 오류인가?

내 알고리즘의 모든 곳에서 결과가 0인지는 중요하지 않습니다. 지정된 간격에 막대가 없거나 배열이 없는 경우입니다.

당신은 문제를 회피하고 있습니다.

 
Nikolai Semko :

당신은 문제를 회피하고 있습니다.

나는 문제의 본질을 말하지만 당신은 당신의 특정한 경우에 집착합니다. 이전 메시지로 판단하면 모든 것이 이전 페이지에 자세히 설명되어 있지만 어떤 경우에 지연이 발생하는지 이해하지 못합니다(이것이 이유에 추가됨).

아마도 이 스크립트가 이해에 도움이 될 것입니다.

 void OnStart ()
{
         Print ( "begin" );
        :: Bars ( _Symbol , PERIOD_W1 , D'2018.03.20' , D'2018.03.23' );
         Print ( "end" );
}
 
A100 :
나는 문제의 본질을 말하지만 당신은 당신의 특정한 경우에 집착합니다. 이전 메시지로 판단하면 모든 것이 이전 페이지에 자세히 설명되어 있지만 어떤 경우에 지연이 발생하는지 이해하지 못합니다(이것이 이유에 추가됨).

나는 이미 지연이 발생하는 경우에 대해 위에서 내 의견을 공식화했습니다.

다시:
start_time이 요청된 TF의 0 막대가 열리는 시간부터 TimeCurrent()까지의 범위에 있으면 막대가 멈춥니다. (가설일 뿐이지만 실습으로 입증됨)
예, 특정 경우에 오류가 발생합니다. 그러나 특별한 경우는 프로그래밍 언어의 표준 내장 함수에 있어서는 안 됩니다.

그리고 당신의 "본질"은 그러한 본질이 아닙니다. 왜냐하면. 당신은 내가 매우 익숙한 Bars 명령에 대한 도움말을 인용하고 있습니다. Bars 기능은 필요하지 않기 때문에 오류 코드가 없습니다.

게다가, 이 경우 우리는 완전히 형성된 시계열 배열을 다루고 있습니다.

이것은 내 스크립트의 약간 증대된 코드에서 명확하게 볼 수 있습니다.

 void OnStart ()
  {
   datetime Arr[];
   if ( CopyTime ( _Symbol , PERIOD_W1 , 0 , 1 ,Arr)< 0 ) Print ( "Ошибка" );
   Print ( "Время открытия нулевого бара W1 = " + TimeToString (Arr[ 0 ]));
   ArraySetAsSeries (Arr, true );
   if ( CopyTime ( _Symbol , PERIOD_H4 , 0 , 100 ,Arr)< 0 ) Print ( "Ошибка" );
   Print ( "1 " + "CurrentTime = " + TimeToString ( TimeCurrent ()));
   int Res= Bars ( _Symbol , PERIOD_W1 ,Arr[ 99 ], TimeCurrent ());   // выполняется быстро   
   Print ( "2 Время открытия 99 бара H4 = " + TimeToString (Arr[ 99 ])+ "  Номер бара W1= " + IntegerToString (Res)); 
   Res= Bars ( _Symbol , PERIOD_W1 ,Arr[ 0 ], TimeCurrent ());       // выполнение происходит более 10 секунд!!!   
   Print ( "3 Время нулевого бара H4 = " + TimeToString (Arr[ 0 ])+ "  Номер бара W1= " + IntegerToString (Res));
  }

결과:

 2018.03 . 30 23 : 39 : 31.079 BagBars (EURUSD,H4)     Время открытия нулевого бара W1 = 2018.03 . 25 00 : 00
2018.03 . 30 23 : 39 : 31.079 BagBars (EURUSD,H4)     1 CurrentTime = 2018.03 . 30 23 : 54
2018.03 . 30 23 : 39 : 31.079 BagBars (EURUSD,H4)     2 Время открытия 99 бара H4 = 2018.03 . 08 20 : 00   Номер бара W1= 3
2018.03 . 30 23 : 39 : 47.176 BagBars (EURUSD,H4)     3 Время нулевого бара H4 = 2018.03 . 30 20 : 00   Номер бара W1= 0
 
A100 :

아마도 이 스크립트가 이해에 도움이 될 것입니다.

귀하의 스크립트는 이 문제를 보여줍니다.

시간 범위 start_time - stop_time 이후 주간 막대 안에 있습니다.

주간 막대를 넘어서면 중단이 없습니다.

 Bars ( _Symbol , PERIOD_W1 , D'2018.03. 12 ' , D'2018.03.23' );

더 나은 예를 들어 주셔서 감사합니다.

 

МТ4 기능에서 CopyHigh, CopyLow(다른 것은 보지 않음)는 테스터에 이력이 없을 때 치명적인 오류 를 일으켰습니다. EA는 H1에서 테스트되었으며 M1에서 요청했습니다.

1 15:14:35.410 2017.01.04 19:54:24  Access violation read to 0x0A971FE8 in 'C:\Users\Halyna\AppData\Roaming\MetaQuotes\Terminal\287469DEA9630EA94D0715D755974F1B\MQL4\Experts\____________.ex4'

15:14:35.465 2017.01.04 19:54:24 EA의 치명적인 오류로 인해 테스트 통과가 중지되었습니다.

사유: