OnCalculate () 함수는 사용자 정의 표시기에서만 호출되며 척도 값을 계산하여 계산해야 합니다. 일반적으로 지수적으로 계산된 거래 품목에 대한 신규 주문 번호를 받을 때 발생합니다. 이 지표는 거래 품종의 가격표에 붙일 필요가 없다.
OnCalculate () 함수의 반환 값은 int 입니다. 두 가지 정의가 가능합니다. 하나의 표시기에는 두 가지 함수 버전이 있을 수 없습니다.
하나는 단일 데이터 버퍼에서 계산에 사용되는 인덱스입니다. 예를 들어 사용자 정의 이동 평균 척도를 들 수 있습니다.
Intoncalculate (constintrates _ total, //price[] 배열의 크기입니다.
Const int prev_calculated,//마지막 호출에서 처리된 열입니다.
Const int begin,//유효한 데이터 시작 위치
Const double & amp 가격 []//계산 배열
);
Price [] 배열에서는 시계열과 일부 계산된 인덱스 버퍼를 전송할 수 있습니다. ArrayGetAsSeries () 함수는 price [] 배열의 인덱스 방향을 결정합니다. 기본값에 의존하지 않으려면 작업 배열에 대해 무조건 ArraySetAsSeries () 함수를 호출해야 합니다.
Price [] 배열에서 Parameters 탭에서 포인터가 시작될 때 적절한 시계열 또는 표시기를 선택합니다. 따라서 적용 대상 필드의 드롭다운 목록에서 필요한 항목을 지정해야 합니다.
척도를 계산할 시계열을 선택합니다
다른 mql5 프로그램에서 사용자 정의 척도 값을 수신하려면 iCustom () 함수를 사용하여 포함된 척도 처리기로 돌아가야 합니다. 적절한 price [] 배열이나 다른 표시기 처리기를 지정할 수 있습니다. 이 매개변수는 결국 사용자 지정 척도 입력 변수 목록으로 전송됩니다.
예:
Void OnStart ()
{
//-
Stringterminal _ path = terminal info string (status _ terminal _ path);
Inthandle _ customma = icustom (symbol (), PERIOD_CURRENT, "사용자 정의 이동 평균 선",13,0,
If(handle _ customMA & gt;; 0)
Print("handle_customMA = ",handle _ customma);
기타
Print ("열 수 없거나 EX5 파일'"+terminal _ path+"\ \ mql5 \ \ indicators \ \"+"사용자 정의 moving averal
}
이 예에서 마지막으로 전달된 매개변수는 PRICE_TYPICAL value (ENUM_APPLIED_PRICE count 부터 시작) 로, 얻을 수 있는 일반 가격 (고가+저가+플랫 창고) /3 으로 사용자 정의 척도를 설정할 수 있음을 나타냅니다. 이 매개변수가 확실하지 않은 경우 PRICE_CLOSE 값을 기준으로 행 당 종가와 같은 척도가 생성됩니다.
또 다른 예는 iCustom () 함수에 의해 설명되는 지정된 price [] 배열의 마지막 매개 변수에 따라 표시기 핸들러를 전달하는 것을 보여 줍니다.
또 다른 형식은 다른 모든 지표에 대해 더 많은 시계열을 계산하기 위한 것입니다.
Intoncalculate (const intrates _ total,//시계열 크기를 입력합니다.
Const int prev_calculated,//마지막 호출에서 처리된 열입니다.
상수 날짜 시간 및 시간. 시간 [],//시간
Const double & ampOpen[],//개장가격
Const double & amp 높음 [],//최고 가격
Const double & amp 낮음 [],//최저 가격
Const double & amp 파장 [],//종가
Const long & ampTick_volume[],//주문 거래량
Const long & amp 거래량 [],//실제 거래량
Const int& 배치 []//배치
);
개장가격 [], 최고가 [], 최저가 [], 종가 [] 매개변수는 현재 일람표의 개장가격, 최고가, 최저가, 종가 배열로 구성되어 있습니다. 시간 매개 변수 [] 에는 시작 시간 값의 배열이 포함되고 확장 매개 변수 [] 에는 확장 기록이 포함된 배열이 있습니다 (트랜잭션 보안을 위한 확장이 제공되는 경우). Volume[] 및 tick_volume[] 매개변수는 각각 트랜잭션 및 거래량 내역을 포함합니다.
시간 [], 개장가격 [], 최고가 [], 최저가 [], 종가 [], 거래량 [], 거래량 [], 상승폭 기본값을 사용하지 않으려면 작업 배열의 ArraySetAsSeries () 함수를 무조건 호출해야 합니다.
먼저 rates_total 매개변수에는 그래프의 기존 열 수와 일치하도록 척도를 계산하는 데 사용할 수 있는 열 수가 포함됩니다.
OnCalculate () 의 반환 값과 두 번째 입력 매개 변수인 prev_calculated 사이의 연결을 확인합니다. 함수를 호출할 때 prev_calculated 매개 변수에는 OnCalculate () 가 마지막 호출에서 반환한 값이 포함됩니다. 이를 통해 사용자 정의 지수를 경제 알고리즘을 통해 계산할 수 있으며 중복 계산을 피할 수 있습니다.
Rates_total 매개 변수의 값을 반환하면 현재 호출된 함수의 열 수를 포함하여 충분합니다. OnCalculate () 함수를 마지막으로 호출한 이후 가격 데이터가 변경된 경우 (깊이 내역 다운로드 또는 내역 공백 채우기) 터미널은 입력 매개 변수 prev_calculated 의 값을 0 으로 설정합니다.
참고: OnCalculate 가 0 을 반환하면 척도 값이 클라이언트의 데이터 창에 표시되지 않습니다.
더 잘 이해하기 위해 다음 코드를 사용하여 표시기를 시작하는 것이 유용합니다.
지표의 예:
# 속성 표시기 _ 차트 _ 창
# 속성 표시기 _ 버퍼 1
# 부동산 지표 _ 구획 1
//-그래프의 선
# 부동산 지표 _label 1 "라인"
# property indicator _ type1draw _ line
# property indicator _ color1clr dark blue
# 속성 indicator _ style1style _ solid
# 부동산 지표 _ 폭11
//-표시기 버퍼
이중선 버퍼 [];
//+-+
//| 사용자 지정 표시기 초기화 함수 |
//+-+
Int OnInit ()
{
//-표시기 버퍼 도면
SetIndexBuffer(0, LineBuffer, indicator _ data);
//-
반환 (init _ successed);
}
//+-+
//| 사용자 지정 표시기 반복 기능 |
//+-+
Int on calculate (const intrates _ total,
Const int prev_calculated,
상수 날짜 시간 및 시간. 시간 [],
Const double & amp 열기 [],
Const double & amp 높이 [],
Const double & amp 낮음 [],
Const double & amp 종료 [],
Const long & amptick_volume[],
Const long & amp 볼륨 [],
Const int& 전파 [])
{
//-현재 거래 품종 및 차트 주기에 유효한 열 수를 가져옵니다.
Int bars=Bars(Symbol (), 0);
Print("Bars = ",Bars,", rates_total = ",rates_total,", prev_calculated = ","
Print("time[0] = ",time[0]," time[rates_total- 1] = ",time [
//-다음 호출에 대한 prev_calculated 값을 반환합니다.
리턴 (rates _ total);
}
//+-+