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

 
Vladimir Karputov # :

1단계: 'MQL5 마법사'를 사용하여 공백 생성:


2단계: 'limit'의 철자를 정확하게 지정하고 닫기 배열을 사용하세요. iClose를 호출하지 마세요!!!


결과:

오류가 없습니다.

이것이 한계와 지표의 유일한 정확한 계산이라고 누가 말했습니까?

논의는 역사의 시작부터 현재까지 왼쪽에서 오른쪽으로 한계와 지표 자체의 다른 계산에 관한 것입니다. 더 간단하고 명확합니다.

이러한 방식으로 계산된 한계(int limit = Rates_total - prev_calculated; if(limit>1) limit=rates_total-1;)는 다음의 모든 데이터를 즉시 포함합니다.

  1. 현재 틱인지,
  2. 새로운 바의 오픈인가,
  3. 이것이 과거 데이터의 변경인지 여부.

현재 눈금이 (limit==0)이면 for(int i=limit; i>=0; i--) { // ... }는 각각의 새 눈금에 대한 표시기를 계산하고 0 막대만 계산합니다. 다시 계산됩니다.

새 막대의 여는 것이 (limit==1)이면 for(int i=limit; i>=0; i--) { // ... }는 첫 번째 막대와 0 막대를 계산합니다. 새로 오픈한

이것이 기록 변경(limit>1)인 경우 for(int i=limit; i>=0; i--) { // ... }는 사용 가능한 전체 기록에 대해 전체 표시기의 완전한 재계산을 수행합니다. (역사는 변경된 곳이 있습니다)

 
TheXpert # :
차이점이 뭐야? 0보다 작을 수 있습니까?

예, 했습니다(이전 메시지에 추가됨)

 
Artyom만이 문제를 이해했습니다.
그러나 분명히 이 문제는 영구적입니다.
그리고 지금은 if-s만 가능합니다.
 
Roman # :
Artyom만이 문제를 이해했습니다.
그러나 분명히 이 문제는 영구적입니다.
그리고 지금은 if-s만 가능합니다.

아니, 이해하지 못했다. 제가 이해한 바를 알려주세요...

 
Vladimir Karputov # :
   int limit=prev_calculated- 1 ;
   if (prev_calculated== 0 )
      limit= 0 ;
   for ( int i=limit; i<rates_total; i++)
     {
      CloseBuffer[i]=close[i];
     }

그럼에도 불구하고 삼항 연산자는 더 간결해 보입니다(IMHO).

 int limit = prev_calculated== 0 ? 0 : prev_calculated- 1 ;

특히 그가 말했듯이, 갑자기 무언가 잘못되어 prev_calculated가 Rates_total보다 큰 것으로 판명되면.
맥스 때 그런 상황을 만났습니다. 창의 막대 != 무제한, 예를 들어 50000. 이 경우 새 막대가 있을 때마다 막대 배열의 크기가 1씩 증가했지만 어느 시점에서 다시 50000이 되었습니다. 논리를 파악하지 못했습니다. 몇 년 전에 이것을 잡았습니다. 이제 확인해야 합니다. 내 VPS에 출력물을 넣을 것입니다.

 
Artyom Trishkin # :

아니, 이해하지 못했다. 제가 이해한 바를 알려주세요...

지금은 예전처럼 작동하지 않습니다

제한==0
틱의 경우 i>=0
막대 i>0의 경우

위의 당신은 모든 것을 올바르게 썼습니다.
for(int i=limit; i>=0; i--)는 새 막대에 대해서만 잘못 입력 되었습니다.
여기서 연산자 =는 필요하지 않지만 아마도 이미 과거일 것입니다.
이전 동작을 반환하지 않는 경우.

 
Roman # :

지금은 예전처럼 작동하지 않습니다

제한==0
틱의 경우 i>=0
막대 i>0의 경우

위의 당신은 모든 것을 올바르게 썼습니다.
for(int i=limit; i>=0; i--)는 새 막대에 대해서만 잘못 입력 되었습니다.
여기서 연산자 =는 필요하지 않지만 아마도 이미 과거일 것입니다.
이전 동작을 반환하지 않는 경우.

역시나 나는 아무것도 이해하지 못했다. 당신에게 무슨 문제가 있습니까? 모든 것이 이전과 동일한 것 같습니다.

 
Artyom Trishkin # :

역시나 나는 아무것도 이해하지 못했다. 당신에게 무슨 문제가 있습니까? 모든 것이 이전과 동일한 것 같습니다.

그런 디자인으로

 int limit = rates_total-prev_calculated;

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


표시기 버퍼가 범위를 벗어났습니다.

i>=0 주기인 틱 의 예를 보여주세요.
아마도 내가 뭔가를 잊어버렸고 제대로 하고 있지 않을 수 있습니다.

 
Roman # :

그런 디자인으로
표시기 버퍼가 범위를 벗어났습니다.

항상 나갔다.
 
Roman # :

그런 디자인으로


표시기 버퍼가 범위를 벗어났습니다.

i>=0 주기인 틱 의 예를 보여주세요.
아마도 내가 뭔가를 잊어버렸고 제대로 하고 있지 않을 수 있습니다.

나는 이미 그러한 구성을 사용하여 rate_total 숫자로 버퍼 인덱스에 액세스한다고 썼습니다(prev_calculated == 0일 때).
그리고 이것은 오버플로 입니다. Rates_total 은 버퍼의 크기이고 마지막 요소는 Rates_total -1 이기 때문입니다.