맞춤형 지표 라이프사이클
샘플 코드 구조
이 글은 cTrader 지표의 코드 구조와 이벤트 및 라이프사이클 뒤의 논리를 설명합니다. 맞춤형 지표에 접근하려면 Algo 앱의 로컬 탭을 엽니다.

예를 들어, 코드 편집기 창에서 사용 가능한 다음 샘플 코드로 "LifeCycle Test"라는 새로운 지표를 생성할 수 있습니다.

보일러플레이트 버전으로 재설정하려면 아래 코드를 복사하세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
한눈에 보면, 코드 구조는 Initialize() 메서드와 Calculate() 메서드 두 가지만 포함합니다. 빌드를 클릭하여 이 지표를 테스트하세요. 나중에 그 목적을 설명할 OnDestroy()라는 추가 메서드를 추가할 것입니다.
초기화 이벤트
cTrader 지표가 처음 차트에 첨부되거나 사용자가 매개변수 설정을 변경할 때, 지표 인스턴스가 재생성되고 Initialize() 메서드가 호출됩니다. 이 메서드는 지표에서 사용할 변수를 초기화하는 데 사용됩니다. 또한 다른 지표의 공식을 사용하여 단일 지표를 생성하기 위해 추가 지표를 정의하고 참조할 수도 있습니다.
기본적으로, 새로운 코드 템플릿에는 "Hello world!"라는 값이 있는 Message라는 매개변수 설정이 포함되어 있습니다.
1 2 | |
Initialize() 메서드에는 이 메시지를 로그에 출력하는 코드가 있습니다.
1 | |
Initialize() 메서드를 시연하기 위해, 빌드 아이콘 옆의 플러스 아이콘을 클릭하고 심볼을 선택하여 지표 인스턴스를 추가하세요. 지표 행에서 더보기를 클릭하고 인스턴스 추가를 선택하면 EURUSD 심볼과 h1 시간 프레임이 자동으로 추가됩니다.

참고
cTrader Algo에서 인스턴스를 추가하는 것은 트레이드 애플리케이션에서 지표를 차트에 첨부하는 것과 동일합니다.
이제 차트 아래의 트레이드 워치 패널에서 로그 탭을 엽니다. 보시다시피, "Hello world" 메시지가 출력되었습니다.

지표가 처음 차트에 추가되거나 매개변수가 변경될 때마다 차트가 새로 고쳐지고 Initialize() 메서드가 다시 호출됩니다. 매개변수 섹션에 다른 메시지를 입력하여 로그 항목이 그에 따라 업데이트되는지 확인하세요.

지표 출력 계산
Calculate() 메서드는 각각의 과거 데이터 인덱스와 각각의 들어오는 틱에 대해 호출됩니다. 예를 들어, 현재 차트에 1000개의 바가 있다면, Calculate() 메서드는 인덱스 0, 1, 2 등 최대 999까지 호출됩니다.
1 | |
Calculate() 메서드는 변동성이 높은 기간 동안 초당 여러 번 호출되거나 시장이 평평할 때 더 적게 호출될 수 있습니다. 작동 방식을 테스트하려면 Calculate() 메서드 본문에 코드를 추가하여 각각의 새로운 데이터 틱에 대해 메서드로 전달되는 인덱스 값을 출력할 수 있습니다. 코드 편집기 창에서 변경 사항을 추가한 후에는 매번 빌드를 클릭하는 것을 잊지 마세요.
1 | |
코드 편집기 창에서 차트로 전환하려면 추가된 지표 인스턴스를 클릭하세요. 트레이드 워치 패널에서 로그 탭을 열면 메서드로 전달된 각 인덱스에 대해 출력된 값을 볼 수 있습니다.

OnDestroy() 메서드
OnDestroy() 메서드는 지표가 차트에서 제거되고 더 이상 필요하지 않을 때 호출됩니다. 이 메서드는 기본적으로 추가되지 않으므로 구현해야 합니다.
1 2 3 4 | |
이 메서드는 프로그래머에게 유용하며, 관리되지 않는 리소스를 해제하고 최종 작업을 수행할 수 있게 해줍니다. 이는 메모리 누수를 방지하고 지표가 제거된 후 리소스를 유지하지 않도록 합니다. 예를 들어, 외부 데이터 피드에 대한 연결을 닫고, 큰 데이터 객체를 해제하고, 메모리를 해제하는 기타 작업이 포함됩니다.
요약
요약하면, Initialize(), Calculate() 및 OnDestroy() 메서드는 맞춤형 지표의 생명주기의 다양한 단계를 보여줍니다. Algo 앱의 샘플 코드를 조정하여 지표 변수를 초기화하고, 지표 출력을 계산하고, 최종 작업을 실행하는 방법을 자유롭게 결정할 수 있습니다.
