당사 팬 페이지에 가입하십시오
- 조회수:
- 14
- 평가:
- 게시됨:
-
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동
개요
표준 MetaTrader 5 도구 상자에 포함된 거의 모든 리스크 관리 도구는 한 가지 숨겨진 가정을 공유합니다. 바로 계획해야 할 최악의 손실은 대략 이미 경험한 최악의 손실과 비슷하다는 가정입니다. 평균 진폭(Average True Range)은 최근의 변동성을 바탕으로 포지션 규모를 결정합니다. 몬테카를로 재표본 추출기는 실제로 체결한 거래를 재구성합니다. 역사적 가치 위험(Historical Value at Risk)은 수익률 기록에서 백분위수를 그대로 읽어냅니다. 이 모든 방법은 분포의 중심부를 살펴보며, 미래가 과거보다 더 극단적인 상황을 만들어내지 않기를 은근히 희망합니다.
금융 수익률은 두꺼운 꼬리 분포(fat-tailed)를 보이기 때문에, 그러한 희망은 근거가 없습니다. 큰 가격 변동은 정규 분포가 허용하는 것보다 더 자주 발생하고 더 큰 폭으로 나타나며, 표본 내에서 가장 나쁜 단 하루의 성과가 시장이 초래할 수 있는 최악의 날과 일치하는 경우는 거의 없습니다. 이미 관측된 손실만큼만 손실을 예측할 수 있는 어떤 방법이라도, 드물게 발생하는 폭락을 체계적으로 과소평가하게 될 것입니다.

정규 모델(곡선)과 실제 팻테일 수익률(히스토그램)의 비교. 음영 처리된 왼쪽 꼬리는 해당 모델이 놓치는 손실을 나타냅니다.
이 지표는 바로 그 격차를 메우기 위해 개발된 통계학 분야를 MQL5에 기본적으로 통합합니다. 극한값 이론은 전체 분포를 모델링하지 않고 꼬리 부분만을 모델링하며, 이는 가정된 형태가 아닌 극한 정리에 의해 정당화된 형태를 사용합니다. 이렇게 적합된 모델은 표본 내의 어떤 값보다도 더 먼 미래까지 외삽할 수 있습니다. 예를 들어, 99.9% 손실이나 대략 3년에 한 번꼴로 나타나는 변동과 같이, 과거 기록에서 실제로 발생하지 않았던 수치까지도 예측할 수 있습니다.
방법론. 이 지표는 ‘Peaks-Over-Threshold(임계값 초과 피크)’ 방식을 구현합니다. 이 지표는 차트의 종가를 일방적인 하방 손실 시계열로 변환하며, 모든 하락 움직임의 크기를 유지하고 모든 상승 움직임은 0으로 매핑합니다. 해당 시계열의 특정 분位数에서 높은 임계값 u를 선정하고, 그 아래의 모든 값을 제거한 뒤, 손실이 임계값을 초과한 양, 즉 초과분만을 분석합니다. Pickands-Balkema-de Haan 정리에 따르면, 광범위한 기초 분포의 경우 임계값이 상승함에 따라 이러한 초과분들은 단일 분포 계열인 일반화된 파레토 분포( Generalized Pareto Distribution)로 수렴합니다. 따라서 꼬리 부분의 형태를 추측할 필요는 없으며, 단지 적합시키기만 하면 됩니다.

Peaks-Over-Threshold: 손실 시계에 임계값을 설정하고, 그 이상의 초과분을 분리해낸 뒤, 해당 초과분만을 대상으로 일반화 파레토 분포(GPD)를 적합시킵니다.
이 적합 과정은 GPD의 형태와 척도에 대한 진정한 최대우도 최적화이며, 터미널에 포함된 ALGLIB 제약 조건 최적화기를 통해 수행됩니다. 파이썬 브릿지, DLL, 그 어떤 종류의 외부 의존성도 없습니다.
보고 내용
세 가지 수치가 롤링 윈도우를 통해 계산되어 차트 내 패널에 표시되며, 그중 첫 번째 수치는 하위 윈도우에 선 그래프로도 표시되어 시간이 지남에 따라 테일이 좁아지거나 넓어지는 추이를 관찰할 수 있습니다.
| 해석 | 이 지표란 | 사용 방법 |
|---|---|---|
| EVT VaR | 선택한 신뢰 수준에서의 Value at Risk(VaR)로, 과거 데이터에서 직접 읽어내는 것이 아니라 적합된 꼬리 분포를 바탕으로 외삽하여 산출됩니다. | 사전에 대비해야 할 손실입니다. 패널에는 백분율로 표시되며, 하위 창에는 선 그래프로 표시됩니다. 선이 상승하면 꼬리 분포가 두꺼워지고 있음을 의미합니다. |
| EVT ES | 기대 손실(Expected Shortfall): VaR을 초과했을 때 발생하는 평균 손실입니다. | 최악의 시나리오가 발생했을 때 상황이 얼마나 악화되는지를 나타냅니다. 항상 VaR보다 크며, 손절매 설정에 있어 더 현실적인 수치입니다. |
| xi (모양) | 적합된 테일 지수입니다. 수치가 클수록 테일이 무거워지며, 손실이 더 먼 시점으로 갈수록 누적됩니다. | 패널에서 색상으로 구분된 레짐(regime) 표시입니다. 이는 외삽 범위를 결정하는 매개변수입니다. |
이 두 추정량은 표준 GPD-POT 형태이므로, 패널이 보고하는 내용은 정확히 다음과 같습니다:
VaR_p = u + (sigma / xi) * [ ( (Nu / n) / (1 - p) )^xi - 1 ] ES_p = VaR_p / (1 - xi) + (sigma - xi * u) / (1 - xi)
여기서 u는 임계값이고, 시그마와 xi는 적합된 규모와 형태이며, Nu / n은 초과율입니다. 두 모델 모두 적합된 형태가 0에 가까울 때 자동으로 적용되는 지수적 한계를 가지고 있어, 형태 값으로 나누는 것이 산술적으로 불안정해질 수 있는 영역에서 정확히 산술적 안정성을 유지합니다.
꼬리 분포 신호등. 패널에서는 숫자를 해석하지 않고도 해당 영역을 파악할 수 있도록 모양에 색상을 지정했습니다:
| xi | 색상 | 해석 |
|---|---|---|
| 0.10 미만 | 녹색 | 얇은 꼬리를 가진 지수 분포에 가깝습니다. 잔잔함. |
| 0.10 ~ 0.30 | 황금 | 대부분의 유동성 높은 상품이 속하는, 중간 정도의 변동성 구간. |
| 0.30 이상 | 빨간색 | 꼬리가 무겁다. 손실이 누적되고 폭락이 빈번하게 발생한다. |
이러한 구분 기준은 통계적 임계값이라기보다는 해석을 돕는 참고 자료에 가깝으며, 필요에 따라 조정할 수 있습니다. 중요한 점은 색상을 결정하는 형태와 공식을 결정하는 형태가 동일하다는 것입니다. 따라서 계산이 은연중에 두꺼운 꼬리를 가진 VaR을 산출하고 있는 동안 패널에 녹색이 표시될 수는 없습니다.

차트의 게이지: 패널은 VaR, 기대 손실(Expected Shortfall), 색상으로 구분된 꼬리 형태를 표시하는 반면, 하위 창은 시간 경과에 따른 EVT VaR을 그래프로 나타냅니다.
추측을 거부합니다
이 기능을 적용하기 전에 알아두어야 할 설계상의 결정 사항입니다. 이는 빈 값이 의미하는 바를 바꾸기 때문입니다. 두 매개변수 테일 피팅이 신뢰성을 갖기 위해서는 실제 초과 횟수가 필요하며, EVT 관련 문헌에서는 대략 30~50개의 테일 포인트를 실질적인 하한선으로 간주합니다. 이 엔진은 30개를 필수 조건으로 적용합니다. 그 미만일 경우 수치가 아닌 상태를 보고하며, 패널은 이를 다음과 같이 명확하게 표시합니다:
| 상태 | 의미 |
|---|---|
| OK | 테일 데이터가 충분히 확보되어 피팅이 수렴했습니다. VaR, ES 및 xi가 활성화되었습니다. |
| 꼬리 데이터 부족 (초과 횟수 N/30 미만) | 해당 기간 동안 초과 사례가 30건 미만으로 발생했습니다. 룩백 기간을 늘리거나 임계 분位수를 낮추십시오. |
| 적합이 수렴되지 않음 | 최적화기가 유효한 형태와 규모에 도달하지 못했습니다. 보고된 내용이 없습니다. |
| 적합되지 않음 / 잘못된 입력 | 아직 피팅이 실행되지 않았거나, 창이 비어 있거나 비정상적인 상태입니다. |
이 현상이 실제로 나타나는 구체적인 예시: 기본 임계값 0.95에서 500바의 룩백을 적용하면 초과 사례가 약 25건밖에 나오지 않으며, 게이지에는 숫자 대신 꼬리 데이터가 불충분하다는 메시지(초과 사례 25/30) 가 표시됩니다. 800 bar에서는 하한선을 넘어서며 깨끗하게 피팅됩니다. 이는 우회해야 할 버그가 아니라, 모델이 추정을 거부하는 것이며, 이는 드문 사건에 대해 정직하게 알려주는 것을 유일한 목적으로 하는 도구에서 기대하는 바로 그 동작입니다.
같은 원리가 반대쪽 끝에서도 적용됩니다. 적합된 형태가 1에 도달하면 꼬리 부분의 평균이 발산하고 기대 손실(Expected Shortfall)이 더 이상 존재하지 않으므로, 엔진은 임의의 수치를 산출하는 대신 해당 지점에서 0을 반환합니다. 적합도가 ‘OK’ 상태를 충족하지 못하는 경우, 해당 막대에는 오래된 값을 그대로 이어가는 대신 그래프 선이 비워지므로, 모델이 결론을 내리지 못한 지점에서는 선이 정확히 비어 있게 됩니다.
권장 설정
| 설정 | 권장 값 | 비고 |
|---|---|---|
| 기호 | 모든 유동성 상품 | 종목에 따라 달라지는 사항은 없습니다. 적합도 분석은 로그 수익률을 기준으로 수행되므로, 측정값은 백분율로 표시되며 종목 간 비교가 가능합니다. 거래량이 적은 종목의 경우, 하한선 초과 기준을 충족하지 못할 가능성이 높습니다. |
| 시간대 | H4 또는 D1 | VaR은 바(bar)당 손실 규모이므로, 시간대가 해당 수치의 의미를 결정합니다. D1에서는 일일 손실을 의미합니다. 일중(Intraday) 분석도 가능하지만, 1분 수익률의 꼬리 부분은 별개의 개념입니다. |
| 룩백 | 800 바 | 0.95 임계값이 30회 초과 하한선을 여유 있게 넘을 수 있도록 설정되었습니다. 기간을 더 짧게 설정하면 반응 속도는 빨라지지만 하한선에 부딪히게 됩니다. |
| 필요한 과거 데이터 | 룩백 + 2 바 | 첫 번째 적합 가능한 봉 이전에는 아무것도 표시되지 않습니다. 차트에 해당 분량의 과거 데이터가 실제로 다운로드되었는지 확인하십시오. 그렇지 않으면 게이지가 비어 있는 상태로 유지됩니다. |
| 임계값 사분위수 | 0.95 | 표준 기본값입니다. 이 값을 낮추면 임계값이 높아질수록 정리가 성립하므로, 점근적 타당성을 희생하는 대가로 초과 횟수가 늘어납니다. |
입력 매개변수
| 매개변수 | 기본값 | 설명 |
|---|---|---|
| 룩백 | 800 | 각 적합값이 계산되는 바(bar) 단위의 롤링 윈도우입니다. 사용 가능한 수익률이 이 수치의 절반 미만으로 떨어지는 윈도우는 데이터가 너무 드문 것으로 간주되어 거부됩니다. |
| 임계값 양 | 0.95 | POT 임계값 u를 설정하는 데 사용되는 손실 시계열의 사분위수입니다. 0.5에서 0.999 사이의 값만 허용됩니다. |
| 신뢰도 | 0.99 | VaR 및 ES에 대한 신뢰 수준. 적합된 테일은 외삽되므로, 표본에 해당 손실이 포함되어 있지 않더라도 0.999는 유효한 설정입니다. |
| 재적합 주기 | 1 | 과거 바에 대한 재적합 주기. 값을 1로 설정하면 모든 바가 재적합되어 플롯된 선이 완전히 정밀하게 표현되며, 이 값을 높이면 매우 긴 차트에서 과거 데이터의 정밀도를 희생하고 속도를 높일 수 있습니다. 현재 바는 값에 관계없이 항상 재적합됩니다. |
| 패널 표시 | true | 차트 상의 텍스트 패널을 그립니다. 지표가 분리되면 패널 객체는 제거됩니다. |
자신만의 코드에서 엔진 사용하기
테일 모델은 차트나 지표 버퍼에 의존하지 않는 독립형 헤더 전용 클래스인 CGPDModel입니다. 이 모델은 손실 배열에 피팅을 수행하며, 여기서 값이 클수록 결과가 더 나쁘다는 것을 의미합니다. 따라서 부호 규칙은 호출자의 규칙을 따르며, 손실 시계를 생성할 수 있는 모든 전략에서 이를 직접 사용할 수 있습니다:
#include <EVT\GPDModel.mqh> CGPDModel model; model.SetThresholdQuantile(0.95); if(model.Fit(losses,count) && model.IsReliable()) { double var = model.VaR(0.99); double es = model.ExpectedShortfall(0.99); double xi = model.Xi(); } else Print("tail not usable: ",model.StatusText());
이 외에도 이 클래스는 피팅된 척도, 선택된 임계값, 초과 횟수 및 상태 열거형을 노출하므로, 사용자는 측정값이 보류된 정확한 이유를 기록하거나 표시할 수 있습니다. 클래스 대신 지표 값을 읽으려면, EVT\EVTCrashGauge에 대해 iCustom을 사용하여 핸들을 획득한 후, EVT VaR을 담고 있으며 적합도가 신뢰할 수 없는 바에서는 0을 유지하는 버퍼 0을 복사하면 됩니다.
제한 사항
EVT는 리스크 툴킷에서 그 가치를 인정받고 있지만, 특수한 도구이며 이를 잘 활용하려면 적용되지 않는 영역을 파악해야 합니다:
- 꼬리 데이터에 대한 의존도가 높습니다. 두 매개변수 꼬리 적합에는 의미 있는 수의 초과 사례가 필요합니다. 거래량이 적은 종목이나 짧은 기간의 경우 올바른 답은 “데이터 부족”이며, 이 설계는 임의의 수치를 만들어내기보다는 이를 존중합니다.
- 임계값에 민감합니다. 0.95는 표준 기본값이지만, 이에 따라 적합된 형태와 규모도 변동합니다. 본격적인 적용 시에는 단일 설정에 의존하기보다 이러한 민감도를 면밀히 분석해야 하며, 이것이 바로 사분위수가 입력값으로 노출된 이유입니다.
- 이 지표는 시점이 아닌 규모를 측정합니다. 가장 흔한 오용 사례이므로 다시 강조할 필요가 있습니다. 상승하는 테일 지수는 방향성 신호가 아닙니다.
- 테일이 명확하게 정의되지 않을 수 있습니다. 적합된 형태가 1에 가까워지면 기대 단손실(Expected Shortfall)은 더 이상 존재하지 않게 되며, 해당 영역에서 0이 나타나는 것은 오류가 아니라 그 자체로 하나의 정보입니다.
파일 구조
지표 하나와 헤더 하나. 헤더는 <EVT\GPDModel.mqh> 로 포함되어 있으므로, Include 폴더 내의 EVT 하위 폴더에 위치해야 합니다.
| 파일 | 역할 | 설명 |
|---|---|---|
| Indicators\EVT\EVTCrashGauge.mq5 | 게이지 | 종가의 롤링 윈도우에서 하락 손실 시계열을 구축하고, 봉(bar) 주기에 맞춰 피팅을 수행하며, EVT VaR을 플롯하고, 색상으로 구분된 테일 수치를 표시하는 차트 내 패널을 유지합니다. |
| Include\EVT\GPDModel.mqh | 테일 엔진 | CGPDModel 클래스: 임계값 선택, 초과치 추출, ALGLIB 제약 최적화를 통한 GPD의 최대우도 적합, VaR 및 기대 손실(Expected Shortfall), 그리고 모든 측정값을 제어하는 상태 열거형. |
이 엔진은 최대우도 추정치를 실행하기 전에 모멘트법 추정치를 사용하여 최적화기에 초기값을 제공하며, 분포 형태를 합리적인 범위로 제한하므로, 비정상적인 창이 발생하더라도 그럴듯해 보이지만 잘못된 적합 결과로 이어지는 대신 거부된 적합 결과로 이어지도록 합니다.
연구 근거
이 구현은 극한값 이론(Extreme Value Theory)의 표준적인 ‘임계값 초과(Peaks-Over-Threshold)’ 처리를 따릅니다: 임계값 초과값이 일반화 파레토 분포(GPD)로 수렴한다는 Pickands-Balkema-de Haan 정리, 그 형태와 척도에 대한 최대우도 추정, 그리고 위험가치(VaR) 및 기대 손실(Expected Shortfall)에 대한 일반적인 GPD-POT 표현식을 따릅니다.
이 프로그램과 관련된 기사에서는 해당 방법을 도출하고, 엔진과 지표를 한 줄 한 줄 자세히 설명하며, 테일 추정치를 포지션 크기 조정 Expert Advisor에 연동하여 전략 테스터(Strategy Tester)에서 그 성능을 측정합니다: MQL5의 극한값 이론: 몬테카를로 VaR을 넘어선 테일 리스크 크래시 게이지 구축.
MetaQuotes Ltd에서 영어로 번역함.
원본 코드: https://www.mql5.com/en/code/75557
RSI Histogram
이것은 ‘RSI 히스토그램’이라는 이름의 MetaTrader 5용 MQL5 사용자 정의 지표입니다. 이 지표는 표준 RSI 선을 별도의 창에 표시하고, 동일한 RSI 값을 바탕으로 한 색상 코드 방식의 히스토그램을 함께 표시하며, 이 히스토그램은 모멘텀에 따라 색상이 변합니다:
IronHawk Fibonacci Structure Map
Free MT5 indicator that automatically maps Fibonacci levels across multiple timeframes and highlights confluence zones, market structure, premium/discount areas and key price reactions.
GDS Renko Reversal Context
A simple MT5 indicator that shows the current fixed-size Renko run and the exact price level required to confirm a classic two-brick reversal.
GDS Renko Bricks
A simple real-time classic Renko chart for MetaTrader 5. Set the brick size and the indicator builds equal-width Renko bricks directly from tick data. No offline charts, custom symbols or external libraries are required.