마지막 파라미터 가중치가 필요한 이유
int LinearWeightedMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[],int &weightsum)
에만 있는 반면 다른 세 함수에는 없습니다. 그래도 필요하다면 외부 변수 weightsum=0을 초기화할 때 사용하는 방법, 다른 함수는 비뚤어지게 작동하고 0으로 나누기 오류가 발생합니다.
터미널과 함께 제공되는 유사한 인디케이터 사용자 지정 이동평균.mq5에서는 함수 내부에 선언되어 있습니다:
static int weightsum;
즉, 인디케이터를 새로 재계산할 때마다 재설정되지 않습니다. 지표에서 정적 int 가중치 - 서로 다른 스레드이고 자체 변수가 있기 때문에 교차하지 마십시오.
그러나 기간이 다른 2 개 이상의 LWMA (전문가 고문에서 실행)를 계산하는 경우 함수 내에서 정적을 선언하여 모두 1이 아닌 각각에 대해 가중치를 다르게해야한다고 가정합니다.
따라서 각 LWMA마다 고유한 전역 변수가 필요하며, 이를 LinearWeightedMAOnBuffer()에 전달합니다,
예를 들어 LWMA가 2개인 경우 다음 변수를 전역으로 선언해야 합니다.
int weightsum1;
int weightsum2;
를 선언한 다음 함수에 전달해야 합니다.
제가 잘못 이해한 부분이 있다면 바로잡아 주세요.
ExponentiaMA 함수에서 세 번째 매개 변수 prev_value를 입력하는 의미를 잘 이해하지 못합니다. 평균을 계산하는 순수한 공식에서 이전 기간의 값이 필요하다는 것은 분명하지만, 제 생각에는이 값을 내부적으로 계산하고 SimpleMA와 같이 함수에 3 개의 데이터 만 입력해야하는 경우 함수가 평균적인 사람에게 더 명확 할 것입니다.
전적으로 동의합니다! 사용 방법이 명확하지 않습니다. 결국 저는 prev_value를 어디에서 가져와야 할지 몰라서 ExponentialMAOnBuffer를 선택했습니다. 이 함수는 Expert Advisor에서 외부 지표를 호출하는 것이 아니라 내부의 모든 것을 읽는 데 필요합니다. 개발자는 무엇을 제안했나요?
"필요하지 않은 것을 팔기 위해서는 먼저 필요하지 않은 것을 사야하는데 우리는 돈이 없다"는 만화 "Prostokvashino"의 인용문이 생각납니다.
전적으로 동의합니다! 사용 방법이 명확하지 않습니다. 결국 저는 prev_value를 어디에서 가져와야 하는지 이해하지 못해서 ExponentialMAOnBuffer를 선택했습니다. 이 함수는 전문가 어드바이저에서 외부 지표를 호출하는 것이 아니라 내부의 모든 것을 읽는 데 필요합니다. 개발자는 무엇을 제안했나요?
"필요하지 않은 것을 팔려면 먼저 필요하지 않은 것을 사야하는데 우리는 돈이 없다"는 만화 "Prostokvashino"의 인용문이 생각납니다.
네, 동의합니다. 이것도 마찬가지입니다:
//+------------------------------------------------------------------+ //| 평활 이동 평균| //+------------------------------------------------------------------+ double SmoothedMA(const int position,const int period,const double prev_value,const double &price[]) { double result=0.0; //--- 확인 기간 if(period>0 && period<=(position+1)) { if(position==period-1) { for(int i=0; i<period; i++) result+=price[position-i]; result/=period; } result=(prev_value*(period-1)+price[position])/period; } return(result); }
노란색의 코드가 어떻게 계산되는지는 중요하지 않습니다. 결과는 여전히 녹색 문자열이 될 것입니다. 그리고 이것은 표준 MT5 라이브러리에 있습니다! 예!
기능을 개선하지 않으면 쓸모가 없습니다. MQL5에서는 여러 상품에서 MA 값을 계산해야 할 때 매우 유용합니다. 그리고 어떤 상품인지 미리 알 수 없습니다. 시장 개요에서 모든 상품의 MA 핸들을 만들 수는 없습니다!
전적으로 동의합니다! 사용 방법이 명확하지 않습니다. 결국 저는 prev_value를 어디에서 가져와야 하는지 이해하지 못해서 ExponentialMAOnBuffer를 선택했습니다. 이 함수는 전문가 어드바이저에서 외부 지표를 호출하는 것이 아니라 내부의 모든 것을 읽는 데 필요합니다. 개발자는 무엇을 제안했나요?
"필요하지 않은 것을 팔려면 먼저 필요하지 않은 것을 사야하는데 우리는 돈이 없다"는 만화 "Prostokvashino"의 인용문이 생각납니다.
네, 저도 동의합니다. 저도 마찬가지입니다:
노란색으로 강조 표시된 코드가 어떻게 계산되는지는 중요하지 않습니다. 결과는 여전히 녹색 문자열입니다. 그리고 이것은 표준 MT5 라이브러리에 있습니다! 네!
기능을 개선하지 않으면 쓸모가 없습니다. MQL5에서는 여러 상품에서 MA 값을 계산해야 할 때 매우 유용합니다. 그리고 어떤 상품인지 미리 알 수 없습니다. 시장 개요에서 모든 상품의 MA 핸들을 만들 수는 없습니다!
코드베이스에서 검색해서 찾아볼 수 있습니다. 이 라이브러리를 사용한 사람은 저뿐만이 아닙니다...

실례합니다만, "위치"라는 변수가 무엇인가요?
double SimpleMA(const int position,const int period,const double &price[])
double SimpleMA( const int position, const int period, const double &price[]) { double result= 0.0 ; //--- 확인 기간 if (period> 0 && period<=(position+ 1 )) { for ( int i= 0 ; i<period; i++) result+=price[position-i]; result/=period; } return (result); }
좋은 아침
이렇게 하면 더 명확해지나요?
MovingAverages:
MovingAverages 라이브러리에는 다양한 유형의 이동 평균을 계산하기 위한 함수가 포함되어 있습니다.
작성자: MetaQuotes