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

 
Alexey Viktorov :

그리고 OnCalculate에서 이미 수행하는 것은 의미가 없습니다. 배열을 무언가로 초기화한 다음 수식의 일부 값으로 채우는 이유는 무엇입니까? 각각 막대와 배열 셀을 추가할 때 무언가로 채우고 즉시 수식의 값이나 빈 값을 채우는 요점이 무엇입니까?

수식이 모든 막대에 적용되는 경우입니다. 그리고 마지막에만 있다면? 예를 들어, 계산할 막대 수를 설정할 수 있는 칠면조가 많이 있습니다. 계산이 무겁다. 초기화가 필요합니다.

일반적으로 원하지 않는 사람은 그것을하지 마십시오. 더 이상 논의하지 않습니다. ;-)

 
fxsaber :

따라서 ArrayResize가 아니라 ArrayInitialize에 대한 것입니다. ArrayResize는 MT4에서 null 패딩을 보장합니다.

자세히 읽어보면 어떨까요? 다시 인용하겠습니다.

ArrayInitialize (array, init_val) 표현식 으로 배열을 초기화한다고 해서 이 배열에 할당된 예비 요소의 요소가 동일한 값으로 초기화되는 것은 아닙니다. 현재 예약 내에서 ArrayResize() 함수에 의해 배열 배열 의 크기가 계속 증가하면 요소가 배열 끝에 추가되며, 그 값은 정의되지 않고 대부분 init_val 같지 않습니다. .

ArrayInitialize - Операции с массивами - Справочник MQL4
ArrayInitialize - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArrayInitialize - Операции с массивами - Справочник MQL4
 
Stanislav Korotky :

자세히 읽어보면 어떨까요? 다시 인용하겠습니다.

ArrayInitialize (array, init_val) 표현식 으로 배열을 초기화한다고 해서 이 배열에 할당된 예비 요소가 동일한 값으로 초기화되는 것은 아닙니다. 현재 예약 내에서 ArrayResize() 함수에 의해 배열 배열 의 크기가 계속 증가하면 요소 가 배열 끝에 추가되며, 그 값은 정의되지 않고 대부분 init_val 과 같지 않습니다. .

예, 그들은 단지 거기에 init_val이 없다고 설명하는 것이 더 무섭다는 것을 확인했습니다. 따라서 물론 "값이 0인 값"으로 대체할 수 있습니다.
 
Stanislav Korotky :

실제로 MQL 프로그래머의 실수와 같은 비현실적인 시나리오를 왜 발명합니까? 전체 초기화는 한 번만 수행되거나 데이터 재개가 감지된 경우에만 수행되는 것이 분명합니다. 이 경우 코어가 더 효율적입니다.

이중 초기화에 대해 어디에서 이야기 했습니까? 위에서 언급한 것과 거의 동일하게 주기의 모든 요소를 채우면서 말했습니다. 그렇다면 초기화가 필요하지 않으며 리소스만 낭비됩니다.

글쎄, 모든 막대를 계산하지 않으면 직접 0으로 채우십시오.

 
Stanislav Korotky :

수식이 모든 막대에 적용되는 경우입니다. 그리고 마지막 경우에만? 예를 들어, 계산할 막대 수를 설정할 수 있는 칠면조가 많이 있습니다. 계산이 무겁다. 초기화가 필요합니다.

일반적으로 원하지 않는 사람은 하지 마십시오 . 더 이상 논의하지 않습니다. ;-)

이것은 황금 단어입니다 ... 그러나 "필요하지 않은 곳에서 우리는 그것을하지 않을 것입니다."라고 말하는 것이 좋습니다. 또는 그 반대의 경우도 마찬가지입니다. "필요한 경우에만 할 것입니다."

 
fxsaber :

배열 요소만 초기화됩니다. 그리고 의미는 동일합니다. 코드에 오류가 있더라도(종종 자체 오류가 아님) 실행 간 결과의 ID입니다. 매트가 있는 예. 위에서 인용한 성경.

쓰레기는 악입니다.

나는 이것에 대해 논평할 적절한 단어를 찾을 수조차 없습니다.

글쎄, 결국, 당신이 번지라는 제안을 받으면 ... 당신은 이것에 동의하지 않을 것입니다. 글쎄, 처음에는 그것이 무엇인지 인식하지 못했다고 가정 해 봅시다. 그리고 두 번째는 ???

글쎄, 왜 개발자에게 똥으로부터 보호해야합니까? 자신을 보호하다. 또는 그것이 절대적으로 필요하다는 사실에 찬성하여 반박할 수 없는 주장이 있는 경우 대중에게 숨기지 마십시오.

글쎄, 머리카락이 끝까지 서있는 오류를 작성할 수있는 mql3이 있었고 ... 고문은 어떤 식 으로든 모든 곳에서 작동하지만 올바르게 작동합니까? 무슨 상관이야???

어떤 이유로 어레이를 넘어서는 것에 대해 논쟁이 없습니다. 그리고 이것은 배열이나 변수의 쓰레기보다 덜 나쁜 것처럼 보일 것입니다. 글쎄요, 배열에는 그런 인덱스가 없습니다. 예전처럼, 글쎄요, 플래그는 그의 ... 손에 있습니다. 작업을 계속합시다. 모든 것이 지나갔다...

 
Alexey Viktorov :

글쎄, 왜 개발자에게 똥으로부터 보호해야합니까? 자신을 보호하다. 또는 그것이 절대적으로 필요하다는 사실에 찬성하여 반박할 수 없는 주장이 있는 경우 대중에게 숨기지 마십시오.

요구는 없었고 반박불가

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2017.09.12 16:17

 #property strict

void OnStart ()
{
   uchar Array[];
  
   const int Size = ArrayResize (Array, 10000 );
  
   bool Res = false ;
  
   for ( int i = 0 ; (i < Size) && (!Res); i++)
    Res = Array[i];
    
   Print (Res);
}

MT4에서는 쓰레기가 없으면 모든 것이 0이기 때문에 항상 false를 반환합니다. MT5에서 - 사실입니다.

따라서 MT4 테스터의 동일한 코드는 실행 간에 항상 동일한 결과를 표시합니다. MT5 테스터에는 없습니다.

 
fxsaber :

요구는 없었고 반박불가

그리고 누가 한 줄만 추가하는 것을 금지합니까?

   uchar Array[];
   const int Size = ArrayResize (Array, 10000 );
   bool Res = false ;
   ArrayInitialize (Array, 0 );
   for ( int i = 0 ; (i < Size) && (!Res); i++)
    Res = Array[i];
   Print (Res); 

아니면 거짓이 0이고 부호에 관계없이 나머지는 모두 참이라는 것을 모르십니까? 배열의 백엔드에서 값을 가져오고 그것이 0인지 확인하고 싶습니다. 글쎄, 이 경우 배열을 0으로 초기화하는 것이 합리적이지만 그렇게 해서는 안 되는 강제 0으로 시스템에 부담을 주는 이유는 무엇입니까?

죄송합니다. 하지만 이 예는 완전히 넌센스입니다.

 
Alexey Viktorov :

그리고 누가 한 줄만 추가하는 것을 금지합니까?

나에 관한 것이 아니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2017.09.12 16:52

그것은 일종의 매트에 있다고 생각하면 끔찍합니다. 라이브러리(Include\Math - 7Mb 소스 )가 한두 곳에서 초기화되지 않았습니다! 그리고 MT5 테스터에서는 다른 단일 실행을 제공하고 MT4에서는 동일한 실행을 제공하는 이 오류를 어떻게 파헤칠 수 있습니까?

 
fxsaber :

나에 관한 것이 아니다.

다른 모든 사람들의 라이브러리를 포기하는 것만 남아 있습니다. 그리고 나는 표시된 특정 항목을 본 적이 없으며 훨씬 덜 사용합니다. 그런 더미를 파고 거기에 부저가 있는지 확인하는 것보다 필요한 모든 것을 직접 작성하는 것이 더 쉽습니다 ... 그리고 두세 가지 기능 만 사용하십시오 ...