MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1738

 
Nikolay Ivanov # :

귀하의 코드는 -1이 아닌 0을 출력합니다.

아마도 -1이 다른 곳에서 인쇄되었을 것입니다. 아마도 모든 코드가 인쇄물에 있을 것입니다 ..

예, 맞습니다. 각 단계는 "속도가 느려진" 위치를 확인하기 위해 인쇄됩니다.

예제 결과가 잘못되었습니다. 죄송합니다. 코드 자체가 큽니다.

그러나 Konstantin의 솔루션으로 문제가 해결되었습니다! 실제로, 나는 i를 교환하고 모든 곳에서 0을 확인했으며 이제 논리가 정상적으로 작동합니다. -1 대신 0 또는 1을 제공합니다. (0 또는 -1 이전에는 오류가 있습니다. 떨어져 있는).

 
Nikolay Ivanov # :

귀하의 코드는 -1이 아닌 0을 출력합니다.

아마도 -1이 다른 곳에서 인쇄되었을 것입니다. 아마도 모든 코드가 인쇄물에 있을 것입니다 ..

문제 해결을 시도하기 전에 문제를 파악해야 합니다. 문제가 있는지 확인하고 해당 위치를 현지화하고 나서야 해결합니다..

펜과 종이를 가져오세요. 주기가 어떻게 계산되는지 기록하십시오. 이 코드에서

 void OnStart ()
  {
int i= 10 ;
for (i; i> 0 ; i--)
{
i--;
if (i== 0 ) break ;
}

Print (i);
  }

시험

 if (i== 0 ) break ;

절대 사라지지 않습니다. 초기 설정만 하면

 int i= 11 ;

홀수 값. 짝수이면 이 코드로

 int i= 10 ;
for (i; i> 0 ; i--)
{
i--;
if (i== 0 ) break ;
}

~ 전에

 if (i== 0 ) break ;

홀수 값이 올 것입니다.

 
Nikolay Ivanov # :

문제 해결을 시도하기 전에 문제를 파악해야 합니다. 문제가 있는지 확인하고 해당 위치를 현지화하고 나서야 해결합니다..

알았어, 내 말은

 
Konstantin Nikitin # :

펜과 종이를 가져오세요. 주기가 어떻게 계산되는지 기록하십시오. 이 코드에서

조건이 인쇄 = -1이고 실제로 (확인) 0으로 인쇄된 경우, 즉 예가 잘못 제공된 경우 펜과 종이를 가져와야 하는 이유는 무엇입니까? 그리고 잘못된 예에 대한 정답을 제공하는 것은 불가능합니다 ...

 
Nikolay Ivanov # :

조건이 인쇄 = -1이고 실제로 (확인) 0으로 인쇄된 경우, 즉 예가 잘못 제공된 경우 펜과 종이를 가져와야 하는 이유는 무엇입니까? 그리고 잘못된 예에 대한 정답을 제공하는 것은 불가능합니다 ...

이 줄에서 0이 인쇄됩니다.

 for (i; i> 0 ; i--)

휴식 시간 에 확인하고 종료하는 것이 아닙니다.

일반적으로 배열을 통과하려면 다음과 같이 작성하는 것이 더 정확합니다.

 for (i; i > = 0 ; i--)

왜냐하면 배열은 인덱스 0에서 시작

 
Konstantin Nikitin # :

이 줄에서 0이 인쇄됩니다.

휴식 시간 에 확인하고 종료하는 것이 아닙니다.

주어진 코드에 대해 이 줄에서 0이 인쇄됩니다.

 Print (i);

문제는 break가 작동하지 않는 이유가 아니라 인쇄가 -1 ..을 준 이유가 전부였습니다. 그리고 시작이 짝수인지 홀수인지는 중요하지 않습니다. -1은 인쇄되지 않습니다...

 
오래 동안 진드기 또는 양초를 계산하는 방법을 알려주세요. (예: 연도).

Close[]를 통해 시도하지만 인덱스가 5000 이상을 제공하지 않습니다.
 
Ivan Butko # :
오래 동안 진드기 또는 양초 를 계산하는 방법을 알려주세요. (예: 연도).

Close[]를 통해 시도하지만 인덱스가 5000 이상을 제공하지 않습니다.

티키나 양초는 너무 커서 뭐라 말하기 무섭습니다...

 
Alexey Viktorov # :

티키나 양초는 너무 커서 뭐라 말하기 무섭습니다...

예를 들어 전문가 고문은 기간을 지정합니다. 최소 틱, 최소 M1 막대로 테스터를 통과하면 모든 사람이 이를 고려할 것입니다.

그리고 실시간으로 긴 역사 속으로 들어가 거기에서 데이터를 가져오는 고문을 데려가면 어떻게 구성해야 하는지 이해가 되지 않습니다. 터미널은 5000개 이상의 양초를 제공하지 않습니다.


UPD
이 문제를 해결해 보겠습니다. 코드는 네트워크에 있습니다.

MqlRates rates[];

   int copied=CopyRates(NULL,0,0,100,rates);

   if(copied<=0)

      Print("Ошибка копирования ценовых данных ",GetLastError());

   else Print("Скопировано ",ArraySize(rates)," баров");


UPD
기이한. 그것은 아무데도 작동하지 않았습니다. 백만 번째 막대도 확인됩니다. 아무것도 하지 않고, 문서를 읽고, 차를 마셨습니다. 방금 다시 시작했고 작동했습니다. 어제 기록을로드하고 설정을 변경했지만 하루 종일 오류가 발생했습니다.
즉, 추가 코드(위)는 확인할 필요가 없습니다.
MT4 - 일종의 변덕스러움. 또는 ForexCif에는 그러한 기능이 있습니다. 브로커가 아닌 표준을 넣어야 합니다.

 
Ivan Butko # :

예를 들어 전문가 고문은 기간을 지정합니다. 최소 틱, 최소 M1 막대로 테스터를 통과하면 모든 사람이 이를 고려할 것입니다.

그리고 실시간으로 긴 역사 속으로 들어가 거기에서 데이터를 가져오는 고문을 데려가면 어떻게 구성해야 하는지 이해가 되지 않습니다. 터미널은 5000개 이상의 양초를 제공하지 않습니다.


UPD
이 문제를 해결해 보겠습니다. 코드는 네트워크에 있습니다.

MqlRates rates[];

   int copied=CopyRates(NULL,0,0,100,rates);

   if(copied<=0)

      Print("Ошибка копирования ценовых данных ",GetLastError());

   else Print("Скопировано ",ArraySize(rates)," баров");


UPD
기이한. 그것은 아무데도 효과가 없었습니다. 백만 번째 막대도 확인됩니다. 아무것도 하지 않고, 문서를 읽고, 차를 마셨습니다. 방금 다시 시작했고 작동했습니다. 어제 기록을로드하고 설정을 변경했지만 하루 종일 오류가 발생했습니다.
즉, 추가 코드(위)는 확인할 필요가 없습니다.
MT4 - 일종의 변덕스러움. 또는 ForexChif에는 그러한 기능이 있습니다. 브로커가 아닌 표준을 넣어야 합니다.

CopyRates()에 대한 첫 번째 호출은 기록 데이터의 펌핑을 시작했습니다(일주일에 실행하지 마십시오. 그러면 동일한 결과를 다시 얻게 될 것입니다. 음, 아마도 일주일은 아니지만 얼마 후).
서버에 얼마나 많은 데이터가 있는지 확인하고 사용 가능한 양을 어드바이저와 비교하기만 하면 됩니다. 필요한 것보다 적으면 다음 틱 전에 종료합니다. 다시 확인하십시오. 특정 시도 횟수 동안 필요한 기록을 얻을 수 없는 경우 필요에 따라 이 오류를 처리합니다.

사유: