MT4 iMAOnArray 및 iBandsOnArray 계산에 대한 요소 수의 영향 - 페이지 6

 

고의로 계산기나 Excel을 제안했습니다. 이 쓰레기가 어떻게 작동하는지 이해하는 데 도움이 됩니다. 미리 만들어진 배열이 있는 경우에만 0 이외의 계산에 요소 수를 사용할 수 있습니다. 1000개 요소의 배열이 있지만 마지막 100개 요소에 대해서만 평균을 계산해야 한다고 가정해 보겠습니다. 그리고 여기에 두 가지 옵션이 있습니다. 이 100개의 요소를 사용자 정의 배열에 복사하여 계산하거나 100에서 0까지의 주기를 사용하여 미리 만들어진 배열을 사용하고 요소 수를 0이 아닌 100으로 설정합니다.

그러나 여기에 표시기에서 불가피한 배열 크기를 변경하는 데 문제가 있습니다.

그리고 다시 계산을 위한 요소의 수를 제한하는 다른 방법에 대해 이야기했습니다. 글쎄, 조건을 iMAOnArray() 만 계산하도록 설정하십시오. if(rates_total-i >= Rates_total-100); 마지막 100개 막대만 다시 계산되고 새 막대가 도착하면 모든 것이 정상입니다.

 int i, limit;
   limit = prev_calculated == 0 ? rates_total-1 : rates_total-prev_calculated;

   for (i = limit; i >= 0 ; i--)
     {
      Buffer[i]=open[i];
       if (rates_total-i >= rates_total- 100 )
      BufferMA[i] = NormalizeDouble ( iMAOnArray (Buffer, 0 , 5 , 0 , MODE_LWMA , i), _Digits );
      
     }

return (rates_total);


 
Alexey Viktorov :

고의로 계산기나 Excel을 제안했습니다. 이 쓰레기가 어떻게 작동하는지 이해하는 데 도움이 됩니다. 미리 만들어진 배열이 있는 경우에만 0 이외의 계산에 요소 수를 사용할 수 있습니다. 1000개 요소의 배열이 있지만 마지막 100개 요소에 대해서만 평균을 계산해야 한다고 가정해 보겠습니다. 그리고 여기에 두 가지 옵션이 있습니다. 이 100개의 요소를 사용자 정의 배열에 복사하고 계산하거나, 준비된 배열을 사용하고 100에서 0까지의 주기를 사용하여 요소 수를 0이 아닌 100으로 설정하는 것입니다.

그러나 여기에 표시기에서 불가피한 배열 크기를 변경하는 데 문제가 있습니다.

그리고 다시 계산을 위한 요소의 수를 제한하는 다른 방법에 대해 이야기했습니다. 음, iMAOnArray()를 계산하도록 조건을 설정하십시오. if(rates_total-prev_calculated-i >= 100); 마지막 100개 막대만 다시 계산되고 새 막대가 도착하면 모든 것이 정상입니다.


말해봐, 당신은 프로그래머입니까, 아니면 취미로 합니까, 아니면 필요에 따라 합니까? 나는 그것이 어떻게 작동하는지 이해하기 위해 엑셀이나 종이가 필요하지 않으며 Barabashka는 이전에 화면에서 모든 "어려움"을 보여주었습니다. 순서대로 가자.

1. iMAOnArray(iBandsOnArray와 같은)는 두 가지 방식으로 작동할 수 있습니다. 전체 어레이를 읽고 올바르게 수행하거나(그러나 초기 계산 중에 브레이크가 있음) 어레이의 일부를 읽지만 초기 요소에 대해서만 수행한다는 사실에도 불구하고 오프셋은 최종으로 설정됩니다. 즉, 계산을 막대로 제한하는 방법에 관계없이 전체 배열(즉, "제동"의 원래 버전)을 계산하거나 버퍼를 복사하는 것과 유사한 옵션을 제시해야 합니다. 이 버퍼의 모든 요소를 다시 계산하면 앞서 내 메시지에서 설명한 것처럼 복잡한 평활화 방법에 대해 올바른 결과를 제공하지 않으며 일반적으로 데이터 처리 시간이 늘어납니다.

2. 배열 크기를 변경하는 표시기에서 설명한 문제는 배열이 표시기 버퍼 중 하나가 아닌 경우에만 발생합니다. 기본 소스 코드로 돌아가서 문제는 느린 계산과 첫 번째 단계에서만 발생했습니다.

3. 100(N) 막대의 배열 중 일부만 재계산하여 제안한 옵션은 다시 전체 성능 손실과 배열 복사 또는 불필요한 재계산과 관련된 불필요한 구현 문제를 제공합니다. 또한 화면과 위의 코드에서 모든 계산이 수행되었습니다(내부 배열의 어딘가에 있는 것 같습니다. 이 때문에 1차 브레이크가 발생했을 가능성이 큽니다). 그렇지 않으면 이러한 유형의 스무딩을 사용하면 첫 번째 채워진 결과는 다르며 단순히 버퍼 배열을 채우지 않을 것입니다. 함수 계산을 위한 배열 크기 매개변수의 0은 명시적으로 모든 데이터를 읽도록 지시하기 때문에 이것이 캐치입니다.

나는 오직 하나의 결과만을 본다 - 그것은 정확히 작동해야 하고 새 막대의 도착과 함께 모든 데이터(해당 N번째 부분)를 다시 계산하지 않도록 허용하지만 오직 그것만을 세는 것을 허용할 내 자신의 기능을 사용하는 것, 특히 평균화 기능이 있고 많은 제품에 사용되기 때문입니다. 이 포럼 주제의 질문은 처리 속도와 결과를 악화시키지 않으면서 MT4의 일반 기능을 "무효"하는 것이 가능한 방법이었습니다. Bollinger Bands에 대해 유사한 함수를 작성하는 것이 두 번째 문제에 대한 해결책이 될 것입니다. 중간 라인은 본질적으로 움직이는 것이고 이미 이에 대한 기능이 있습니다. 음, 위의 메시지를 믿는다면 어레이의 " 표준 편차 "가 브레이크 없이 계산되거나 대체 옵션으로 직접 작성하십시오. 특히 계산 공식은 문서에서 여기 모든 사람이 사용할 수 있기 때문에 편차 계산.

 

너무 많은 편지 ... 그리고 모든 것은 제안 된 옵션에 동의하지 않는 것을 목표로합니다.

아이디어 덕분에 최소한 어떻게 작동하는지 알아냈지만 불필요한 기능으로 인해 이러한 기능의 복잡성에 대해 자세히 살펴보지는 않았습니다.

직접 작성한 것을 사용하는 것을 좋아하지 않습니다.

 
Alexey Viktorov :

너무 많은 편지 ... 그리고 모든 것은 제안 된 옵션에 동의하지 않는 것을 목표로합니다.

아이디어 덕분에 최소한 어떻게 작동하는지 알아냈지만 불필요한 기능으로 인해 이러한 기능의 복잡성에 대해 자세히 살펴보지는 않았습니다.

직접 작성한 것을 사용하는 것을 좋아하지 않습니다.

글쎄, 왜 동의하지 않아야 하는지, 왜 이렇게 해서는 안 되는지 설명하기 위해. 느린 기능에 묶인 코드나 추가 복사 주기를 생성하는 코드를 작성하는 것이 항상 올바른 옵션은 아니지만 때로는 시간이 덜 소요됩니다. :)
그리고 여기서 요점은 "좋아요" / "싫어요"에 관한 것이 아니라 기능이 제대로 작동하지 않는다는 것입니다. 왜냐하면 실제로 아날로그의 생성은 자전거의 발명과 비슷하지만 이 특별한 경우에는 불가능하기 때문입니다. 그것 없이 할.

나 자신을 위해, 나는 몇 페이지 전에 결론을 내렸지만, 당신의 길은 누군가가 이 상황이 여기에서 이미 다루어졌다는 것과 이 문제를 해결하기 위해 수행해야 하는 것이 무엇인지 이해하는 데 도움이 될 수 있습니다. 그래서 많은 편지가 있습니다. :)

 

후자 버전에서는 복사 또는 추가 주기가 없습니다. 그리고 당신과 Dmitry가 이전에 말한 정확한 재 계산의 불가능에 대한 계산 방법 MODE_LWMA.

코드와 스크린샷을 보십시오. MA 화면에서 기간 5는 코드에서와 같이 MODE_LWMA 메서드를 사용하여 계산된 막대의 수, MA 표시기의 값과 표시기와 iMAOnArray() 함수의 일치에 주의하십시오. 바닥글에서. 모든 막대를 다시 계산하거나 100개만 다시 계산하려면 시간 비용이 크게 다릅니다. 변경 사항이 없으면 다른 계산에서 브레이크가 걸립니다.

 
단락 완성!
 
Sergey Efimenko :

말해봐, 당신은 프로그래머입니까 아니면 취미로 합니까, 글쎄요, 아니면 필요에 따라 합니까? ...

이전에 그는 자신이 프로그래머가 아니라 아마추어이기 때문에 운전할 수 있다고 비명을 지르기 시작했습니다.
 
Alexey Viktorov :

후자 버전에서는 복사 또는 추가 주기가 없습니다. 그리고 당신과 Dmitry가 이전에 말한 정확한 재 계산의 불가능에 대한 계산 방법 MODE_LWMA.

코드와 스크린샷을 보십시오. MA 화면에서 기간 5는 코드에서와 같이 MODE_LWMA 메서드를 사용하여 계산된 막대의 수, MA 표시기의 값과 표시기와 iMAOnArray() 함수의 일치에 주의하십시오. 바닥글에서. 모든 막대를 다시 계산하거나 100개만 다시 계산하려면 시간 비용이 크게 다릅니다. 변경 사항이 없으면 다른 계산에서 브레이크가 걸립니다.

마지막 버전은 본질적으로 원본과 다르지 않습니다. 이미 언급했듯이 배열 크기가 0이면 여전히 전체로 간주됩니다. 모든 값의 계산이 필요하지 않은 Expert Advisor에서 최적화를 위해 일반적으로 수행되는 것처럼 포럼에서 주제를 만들기 전에도 계산 시간을 줄이기로 한 첫 번째 결정은 숫자를 제한하기 위한 그런 옵션이었습니다. 그러나 불행히도 이것은 어떤 식으로든 영향을 미치지 않았고 iMAOnArray에 대한 어레이의 길이를 실험하기 시작했고 상황의 복잡성을 깨달았습니다. 그런 다음 다른 조합에 대한배열 인덱싱 변경을 포함하여 거의 모든 간단한 옵션을 시도한 후 이 주제를 만들었습니다. 자, 그럼 답이 나왔고, 그들 중 일부는 다른 사람들도 시도가 있었고 모두가 자신의 기능을 만들러 왔다는 것을 확인했습니다. 그것이 내가 처음에 무슨 일이 일어날지 알고 코드를 요청한 이유입니다 :) 불쾌하지 않습니다 :) 아마도 사용자 중 한 명이 이 주제를 읽은 후 이 "갈퀴"를 넘어갈 것입니다. :)
 
Dmitry Fedoseev :
이전에 그는 자신이 프로그래머가 아니라 아마추어이기 때문에 운전할 수 있다고 비명을 지르기 시작했습니다.

좀 더 수사학적인 질문이었어요 :)

PS 신사 여러분, 서로에게 좀 더 관대합시다. 결국, 우리 모두는 시장을 "밀착"한다는 하나의 목표를 가지고 여기에 모였습니다. :) 그러니 흐트러짐 없이 이 목표를 향해 가자. 나폴레옹이 말한 것처럼 우리 각자는 자신의 어려움과 인식의 특성을 가지고 있지만 진실은 논쟁에서만 태어납니다. 그러므로 나는 결코 논쟁하지 않는다."

 
Sergey Efimenko :
마지막 버전은 본질적으로 원본과 다르지 않습니다. 이미 언급했듯이 배열 크기가 0이면 여전히 전체로 간주됩니다. 모든 값의 계산이 필요하지 않은 Expert Advisor에서 최적화를 위해 일반적으로 수행되는 것처럼 포럼에서 주제를 만들기 전에도 계산 시간을 줄이기로 한 첫 번째 결정은 숫자를 제한하기 위한 그런 옵션이었습니다. 그러나 불행히도 이것은 어떤 식으로든 영향을 미치지 않았고 iMAOnArray에 대한 어레이의 길이를 실험하기 시작했고 상황의 복잡성을 깨달았습니다. 그런 다음 다른 조합에 대한 배열 인덱싱 변경을 포함하여 거의 모든 간단한 옵션을 시도한 후 이 주제를 만들었습니다. 자, 그럼 답이 나왔고, 그들 중 일부는 다른 사람들도 시도가 있었고 모두가 자신의 기능을 만들러 왔다는 것을 확인했습니다. 그것이 내가 처음에 무슨 일이 일어날지 알고 코드를 요청한 이유입니다 :) 불쾌하지 않습니다 :) 아마도 사용자 중 한 명이 이 주제를 읽은 후 이 "갈퀴"를 넘어갈 것입니다. :)

if(rates_total-i >= Rates_total-100); 이후에 계산할 막대가 100개만 남았을 때 iMAOnArray() 함수가 먼저 전체 배열을 다시 계산한다는 뜻입니까?