MT4 iMAOnArray 및 iBandsOnArray 계산에 대한 요소 수의 영향

Sergey Efimenko  

사실 주제. 전체 배열을 계산할 필요가 없고 마지막 N개 요소만 계산하는 경우.

나는 이러한 기능을 제한적으로 계산하는 논리를 잘 이해하지 못합니다. 시계열 배열(지표 버퍼 중 하나)이 있는데, 요소의 수를 0으로 두면 질문이 없고 모든 것이 계산되고 밝혀지지만 동일한 계산에 참여하는 요소의 수는 오프셋이 감소하면 기본 항목만 얻습니다. 간단히 말해서 5000개 요소(차트의 막대) 배열이 있으므로 시간을 절약하려면 마지막 300개만 계산해야 하지만 두 번째 매개변수에 300개를 지정하면 기본 5000-4700개 요소가 표시되지만 300-0의 오프셋에서 호출하면 값이 변경되지 않습니다. 이 매개변수를 사용하는 요점은 무엇입니까?

Alexander Voronkov  
Sergey Efimenko :

사실 주제. 전체 배열을 계산할 필요가 없고 마지막 N개 요소만 계산하는 경우.

나는 이러한 기능을 제한적으로 계산하는 논리를 잘 이해하지 못합니다. 시계열 배열(지표 버퍼 중 하나)이 있는데, 요소의 수를 0으로 두면 질문이 없고 모든 것이 계산되고 밝혀지지만 동일한 계산에 참여하는 요소의 수는 오프셋이 감소하면 기본 항목만 얻습니다. 간단히 말해서 5000개 요소(차트의 막대) 배열이 있으므로 시간을 절약하려면 마지막 300개만 계산해야 하지만 두 번째 매개변수에 300개를 지정하면 기본 5000-4700개 요소가 표시되지만 300-0의 오프셋에서 호출하면 값이 변경되지 않습니다. 이 매개변수를 사용하는 요점은 무엇입니까?

문제를 완전히 이해할 수 있도록 코드 예제를 제공합니다.
Sergey Efimenko  
Alexander Voronkov :
문제를 완전히 이해할 수 있도록 코드 예제를 제공합니다.

그래서 그것은 잘 작동합니다:

버퍼[i]=GetValue(i);
BufferMA=iMAOnArray(버퍼, 0 , PeriodMA ,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(버퍼, 0 ,PeriodBands,DevBands,0,MODE_MAIN,i);

이것은 제대로 작동하지 않습니다:

버퍼[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer, 300 ,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(버퍼, 300 ,PeriodBands,DevBands,0,MODE_MAIN,i);

Alexander Voronkov  
Sergey Efimenko :

그래서 그것은 잘 작동합니다:

버퍼[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer, 0 ,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(버퍼, 0 ,PeriodBands,DevBands,0,MODE_MAIN,i);

이것은 제대로 작동하지 않습니다:

버퍼[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer, 300 ,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(버퍼, 300 ,PeriodBands,DevBands,0,MODE_MAIN,i);

시간 을 절약 하고 마지막 300개 (차트의 막대) 만 계산하려면 for() 또는 if() 연산자의 값을 사용합니다.
Sergey Efimenko  
Alexander Voronkov :
시간 을 절약 하고 마지막 300개 (차트의 막대) 만 계산하려면 for() 또는 if() 연산자의 값을 사용합니다.

그것을 가볍게 표현하는 방법 ... 당신은 위태로운 것이 무엇인지 이해합니까? 코드의 헤더에 표시된 함수를 사용하고 전체가 아닌 배열의 일부를 계산하려고 시도한 적이 있습니까? 그래서 그것을 시도, 아마도 당신은 그것이 무엇에 대해 "시각적으로" 이해하게 될 것입니다. 이 경우에는 forif 도 도움이 되지 않습니다. 귀하의 제안은 계산해야 할 양을 명시적으로 지정할 수 있지만 이러한 함수를 사용하는 배열이 아닌 막대 또는 기타 상황을 계산할 때 관련이 있습니다. 코드의 일부가 위에 나와 있으며 절대적으로 동일합니다. 유일한 차이점은 첫 번째 경우에는 전체 배열을 계산하고 두 번째 경우에는 해당 값의 300개만 계산하지만 값은 끝에서 계산된다는 것입니다. 배열, 참조는 시작 부분에 사용됩니다. 제가 상황을 명확하게 설명하고 있지는 않지만, 어떤 지표에 연결하고 결과를 비교해보면 코드가 도움이 될 것입니다...

추신 기능의 대체 아날로그의 "자체 작성"버전에 대해서는 이해할 수 있지만 언어를 사용하여 원하는 결과를 얻고 싶습니다.

Alexander Voronkov  
Sergey Efimenko :

그것을 가볍게 표현하는 방법 ... 당신은 위태로운 것이 무엇인지 이해합니까? 코드의 헤더에 표시된 함수를 사용하고 전체가 아닌 배열의 일부를 계산하려고 시도한 적이 있습니까? 그래서 그것을 시도, 아마도 당신은 그것이 무엇에 대해 "시각적으로" 이해하게 될 것입니다. 이 경우에는 forif 도 도움이 되지 않습니다. 귀하의 제안은 계산해야 할 양을 명시적으로 지정할 수 있지만 이러한 함수를 사용하는 배열이 아닌 막대 또는 기타 상황을 계산할 때 관련이 있습니다. 코드의 일부가 위에 나와 있으며 절대적으로 동일합니다. 유일한 차이점은 첫 번째 경우에는 전체 배열을 계산하고 두 번째 경우에는 해당 값의 300개만 계산하지만 값은 끝에서 계산된다는 것입니다. 배열, 참조는 시작 부분에 사용됩니다. 제가 상황을 명확하게 설명하고 있지는 않지만, 어떤 지표에 연결하고 결과를 비교해보면 코드가 도움이 될 것입니다...

추신 기능의 대체 아날로그의 "자체 작성"버전에 대해서는 이해할 수 있지만 언어를 사용하여 원하는 결과를 얻고 싶습니다.

그냥 있는 그대로 말하세요, 별거 아닙니다.

그래서 내가 당신을 오해했습니다.

Sergey Efimenko  
정말 아무도 이러한 기능을 사용하지 않고 그러한 상황에 직면하지 않았습니까?
Alexey Viktorov  
Sergey Efimenko :

그래서 그것은 잘 작동합니다:

버퍼[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer, 0 ,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(버퍼, 0 ,PeriodBands,DevBands,0,MODE_MAIN,i);

이것은 제대로 작동하지 않습니다:

버퍼[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer, 300 ,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(버퍼, 300 ,PeriodBands,DevBands,0,MODE_MAIN,i);

결과적으로 무엇을 기대하며 어떻게 정상적으로 작동해야 합니까?
Sergey Efimenko  
Alexey Viktorov :
결과적으로 무엇을 기대하며 어떻게 정상적으로 작동해야 합니까?
내가 무엇을 기대합니까? 나는 오프셋 299-0에서 배열에 액세스한다는 사실에도 불구하고 마지막 300(현재) 실제 값이 필요하고 처음 300(초기)이 필요하지 않다고 위에서 썼지만 "끝"에서 오프셋에서 데이터를 얻습니다. 배열"에서 " 배열의 끝 - 300 "값(제 경우에는 4999에서 4700까지), 즉 오프셋 299에는 오프셋 4999에 있어야 하는 값이 있고 오프셋 0에도 마찬가지로 오프셋 4700에 있어야 하는 값입니다. 초기 이력 데이터가 아니라 현재 데이터를 수신하기 위해 배열 계산의 수를 줄이는 실제 경우, 문제는 현재는 수행되지 않습니까?
Artyom Trishkin  
Sergey Efimenko :
내가 무엇을 기대합니까? 300-0의 오프셋에서 배열에 액세스한다는 사실에도 불구하고 처음 300(초기)이 아니라 마지막 300(현재) 실제 값이 필요하다고 썼지만 "끝"에서 오프셋에서 데이터를 얻습니다. 배열"에서 "끝 배열 - 300" 값(제 경우에는 4999에서 4700까지), 즉 오프셋 300에는 오프셋 4999에 있어야 하는 값이 있고 오프셋 0에도 마찬가지로 값이 있습니다. 그것은 오프셋 4700에 있어야합니다. 실제로 배열 계산의 수를 줄일 때 초기 기록 데이터가 아니라 현재 데이터를 가져옵니다. 현재는 수행되지 않습니까?

ArraySetAsSeries() 가 도움이 되나요?

그런 쓰레기에 한 번 직면 - 이기지 못하고 그만 두었습니다. iMAOnArray() 없이 제작

Sergey Efimenko  
Artyom Trishkin :

ArraySetAsSeries()가 도움이 되나요?

그런 쓰레기에 한 번 직면 - 이기지 못하고 그만 두었습니다. iMAOnArray() 없이 제작

문제는 배열이 원래 "직렬" 버퍼라는 것입니다. 그리고 얻은 값의 순서는 정상이며, 이미 쓴 것처럼 계산 횟수를 제한하는 데 정확히 문제가 발생합니다. 전체 배열의 계산을 사용할 때 데이터는 정상이지만 터미널이 불쾌하게 느려집니다. 초기화 및 훨씬 더 다양한 시간 프레임에 대해 여러 지표를 사용할 때 그리고 Expert Advisor의 최적화에 대해서만 그러한 지표에 대해서는 아무 말도 하지 않겠습니다. 제가 이해할 수 있는 한 문제는 MT4의 내부 문제입니다. , 유일한 방법은 이러한 기능의 아날로그를 사용하는 것이지만 표준 기능을 사용하고 싶습니다.

PS 나 자신을 위해 iMAOnArray의 아날로그를 사용하지만 여기에 소스 코드가 나와 있을 뿐만 아니라 라이브러리를 사용하고 iBands도 평균적으로 해결할 수 있어야 하지만 편차 계산이 필요합니다. 작성해야 할 것입니다. 일반적으로 표준 기능으로 이러한 상황이 유감입니다.

사유: