기고글 토론 "MQL5에서 인디케이터를 호출하는 방법" - 페이지 2

 

저에게는 파일을 컴파일 할 수 없습니다.

나는 무슨 일이 일어나고 있는지 모르겠습니다.

고마워요,

Jordi

 
수고 많으셨습니다!
 

고마워요!

아래는 제가 장난삼아 만든 간단한 예시입니다.

잘못된 부분이 있으면 수정해 주시면 수정하겠습니다.

이상한 점은 차트의 단순 이동 평균과 값이 일치하지 않는 것 같습니다.

################### 스크립트에서

int period = 21; // 21 막대 이동 평균
int sampleSize = 100; // 가져올 데이터의 막대
int handle = iCustom(Symbol(),0,"예제\\Custom 이동평균",
기간// 기간
0, // 오프셋
MODE_SMA, // 계산 방법
PRICE_CLOSE, // 종가 계산
);


void OnTick()
{

// 이동 평균이 복사될 배열입니다.
// 이 배열의 각 항목은 이동평균값입니다
// 이 배열의 첫 번째 항목(0번 위치의 항목)은 가장 최근 항목입니다
// 마지막 항목은 배열의 마지막 항목입니다 ArraySize() - 1
double movingAverageValues[];

ArraySetAsSeries(movingAverageValues, true);
if (CopyBuffer(handle,0,0,sampleSize,movingAverageValues) < 0){Print("CopyBufferMA1 error =",GetLastError());}

double currentMovingAverage = movingAverageValues[0];

double earliestMovingAverage = movingAverageValues[ArraySize(movingAverageValues) - 1];


################################# EA에서 (참고: OnInit 및 OnTick)

int OnInit(){

int period = 21; // 21 바 이동 평균

int sampleSize = 100; // 가져올 데이터의 바 수입니다
int handle = iCustom(Symbol(),0,"Examples\\Custom Moving Average",
period, // 기간
0, // 오프셋
MODE_SMA, // 계산 방법
PRICE_CLOSE, // 종가 계산
);

}

OnTick()
{

// 이동 평균이 복사될 배열입니다.
// 이 배열의 각 항목은 이동평균값입니다
// 이 배열의 첫 번째 항목(0번 위치의 항목)은 가장 최근 항목입니다
// 마지막 항목은 배열의 마지막 항목입니다 ArraySize() - 1
double movingAverageValues[];

ArraySetAsSeries(movingAverageValues, true);
if (CopyBuffer(handle,0,0,sampleSize,movingAverageValues) < 0){Print("CopyBufferMA1 error =",GetLastError());}

double currentMovingAverage = movingAverageValues[0];

double earliestMovingAverage = movingAverageValues[ArraySize(movingAverageValues) - 1];

}

 
훌륭한 기사
 
네... 매번 이러한 핸들을 코딩하는 것보다 자신만의 인디케이터를 만들어 로봇 코드에 빌드하는 것이 더 쉽습니다... 지루함