내결함성
내결함성이라는 용어는 자동화된 시스템이 실패를 만났을 때도 계속 작동할 수 있는 능력을 의미합니다. cTrader 알고리즘의 경우, 내결함성은 cBot, 플러그인 및 지표를 호스팅하는 프로세스가 오류를 만나도 계속 실행될 수 있음을 의미합니다.
이 문서는 내결함성이 어떻게 작동하는지 설명하고 이 기능이 알고리즘 트레이더에게 제공하는 주요 이점을 설명합니다.
1분 만에 내결함성!
- 내결함성 규칙에 따라 예외를 만났을 때 알고리즘은 계속 실행됩니다. 이 기능은 cTrader 알고리즘을 더욱 안정적으로 만들고 코드 실행 방식을 개선할 수 있는 기회를 제공합니다.
- 알고리즘은 이제 작업 로그에서 만난 예외를 자동으로 출력하여 코드를 개선하는 데 유용한 정보를 제공할 수 있습니다.
OnException(Exception exception)메서드를 사용하여 알고리즘이 예외에 반응하는 방식을 사용자 정의할 수 있습니다. 이 이벤트 핸들러를 사용하여 신뢰할 수 있고 효과적인 확장 기능을 만들 수 있습니다.
내결함성 규칙
간단히 말해, 내결함성은 모든 알고리즘이 아래에 설명된 규칙을 따르도록 보장합니다:
- 예외를 만났을 때 알고리즘은 계속 실행되어야 합니다.
- 알고리즘이 작동하는 동안 발생하는 모든 예외는 기록되어야 합니다.
- 사용자는 알고리즘이 다양한 예외를 처리하는 방식을 결정하는 사용자 정의 규칙을 도입할 수 있는 기회를 가져야 합니다.
내결함성은 알고리즘이 프로세스를 중단시키지 않는 모든 오류를 기본적으로 무시할 수 있게 합니다. 예외가 코드 실행을 방해할 수는 있지만, 내결함성은 알고리즘이 예기치 않게 중단되는 횟수를 크게 줄입니다.
OnException() 메서드
내결함성 규칙에 따라 알고리즘은 예외를 무시해야 합니다. 그러나 특정 예외에 대해 알고리즘이 반응하는 방식을 사용자 정의하거나 기본 내결함성 동작을 완전히 덮어쓸 수도 있습니다.
이를 위해 OnException() 메서드를 사용하세요. 이 메서드는 처리되지 않은 예외에 대한 전용 핸들러 역할을 합니다. 기본 서명은 다음과 같습니다:
1 2 3 4 | |
다음 예제에서는 OnException() 메서드를 사용하여 cBot이 NullReferenceException 예외에 반응하는 방식을 변경합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
NullReferenceException 예외를 발생시키기 위해 cBot이 존재하지 않을 수 있는 숏 포지션을 닫도록 합니다. 지정된 예외를 만났을 때 cBot은 설명 텍스트를 표시하는 MessageBox를 표시하도록 되어 있어 이 예외에 빠르게 대응하고 cBot의 동작을 조정할 수 있습니다.
OnException() 핸들러는 이 메서드가 호출되는 동안 발생하는 예외를 처리하도록 설계되지 않았습니다. 그럼에도 불구하고 이러한 예외는 이벤트 로그에 기록됩니다.
장애 허용의 이점
장애 허용은 cTrader에서 알고리즘 트레이딩이 작동하는 방식의 중요한 측면으로, 다음과 같은 이점을 제공합니다.
- 장애 허용은 알고리즘의 신뢰성을 크게 향상시키고 자동화된 트레이딩 접근 방식을 개선할 수 있는 새로운 기회를 제공합니다.
- 알고리즘이 이벤트 로그에서 발생한 예외를 표시할 수 있으므로, 특정 오류가 발생한 조건을 쉽게 파악할 수 있습니다.
- 예외 이벤트 처리를 허용함으로써,
OnException()메서드를 사용하여 알고리즘의 동작을 완벽하게 다듬고 신뢰성을 높일 수 있습니다.
크래시 처리
앞서 언급한 바와 같이, 여러 오류로 인해 전체 프로세스가 중단될 수 있습니다. 이는 다음과 같습니다:
OutOfMemoryException예외.StackOverflowException예외.- 별도의 스레드에서 발생한 처리되지 않은 예외.
- 알고리즘이 실행 중인 프로세스를 중단시킬 수 있는 기타 오류.
위의 오류 중 하나를 마주할 경우, 지표 인스턴스는 중지되며 자동으로 재시작되지 않습니다. 그러나 예외는 여전히 로그에 기록됩니다.
반면, cBot 인스턴스를 호스팅하는 프로세스가 중단되면 자동으로 재시작됩니다 (예외는 로그에 기록됨).
단일 프로세스 내의 여러 인스턴스
단일 프로세스가 여러 cBot 인스턴스를 호스팅하는 경우가 있습니다. 이러한 인스턴스 중 하나가 중단을 유발하는 예외를 마주하면 전체 프로세스도 중단됩니다. 재시작 시, 프로세스는 원래 호스팅했던 모든 cBot 인스턴스를 재시작합니다.
요약
장애 허용은 알고리즘을 더욱 안정적이고 효과적으로 만드는 데 유용한 여러 기회를 제공합니다. OnException() 핸들러는 알고리즘이 예외에 어떻게 반응할지에 대한 추가적인 제어 계층을 제공합니다.