안녕하세요, 트레이더 여러분! 오늘은 메타트레이더 5에서 사용할 수 있는 iSpread 지표에 대해 알아보겠습니다. 이 지표를 활용하면 두 개의 선택된 통화쌍을 기반으로 합성 심볼을 생성할 수 있습니다.
이 지표의 알고리즘은 다음과 같습니다:

- 시작 날짜 - 합성 심볼을 생성할 시작 날짜를 선택합니다. 오래된 데이터를 사용할 필요가 없도록 하기 위한 필수 단계입니다.
- 심볼 1/2 - 두 개의 초기 통화쌍을 선택합니다.

- 작업 - 두 개의 시리즈를 하나로 병합하기 위해 사용할 산술 연산을 선택합니다. 가능한 연산은 - + / * 총 4가지입니다. 저는 차이와 비율을 사용했습니다. 합계와 곱셈도 필요할 수 있지만, 이쪽은 사용해본 적이 없습니다. 누군가 어떻게 활용할 수 있는지 알려주시면 감사하겠습니다.
- 심볼 반전 1/2 - 상관관계가 부정적일 경우 선택한 시리즈를 반전시킵니다.
- 심볼 차수 1/2 - 선택한 시리즈의 지수화를 수행합니다. 이 옵션이 필요한 것은 알고 있지만, 정확히 왜 지수화가 필요한지 이해하지 못해 사용하지 않습니다. 두 시리즈의 차원을 맞추기 위해 곱셈기를 사용하곤 합니다. 이 가정이 맞다면, 어떤 방법이 더 나은지 궁금합니다.
- 심볼 곱셈기 1/2 - 특정 숫자로 시리즈를 곱합니다. 이는 시리즈의 차원을 맞추기 위해 사용합니다.
- 로그 - 결과 시리즈를 로그 스케일로 변환합니다. 로그를 사용할 경우 두 원본 시리즈 간의 차이를 이용해 최종 시리즈를 준비합니다. 로그를 사용하지 않는다면 비율을 선택하세요. 일반적으로 이 스케일로 변환하면 2차 추세의 영향을 피할 수 있습니다. 하지만 짧은 구간에서는 차이를 느끼지 못해 자주 사용하지 않고 비율을 선택합니다. 제가 잘못된 부분이 있다면 피드백 주시면 감사하겠습니다.
- 스무딩 기간 - 모든 작업이 완료된 후, 두 시리즈를 하나로 병합하기 전에 가벼운 스무딩을 사용합니다. 저는 지정된 기간으로 단순 이동 평균(MA)을 사용해 이 시리즈를 부드럽게 만듭니다. 이는 거의 왜곡을 일으키지 않지만 일부 스파이크를 제거할 수 있습니다. 이 매개변수를 0으로 설정하면 스무딩을 사용하지 않게 됩니다. 추세를 제거하기 위해 짧은 기간을 사용할 때는 스무딩을 사용하지 않습니다. 스무딩은 큰 값에 적용할 때 데이터 손실을 일으키지 않으면서 최종 시리즈를 더 부드럽고 노이즈가 적게 만들어 줍니다.
이제 데이터를 준비하고 합성 심볼을 만드는 모든 단계를 마쳤습니다. 우리가 한 작업은 다음과 같습니다:
EURUSD를 선택했습니다:

GBPUSD도 선택했습니다:

이렇게 생성된 합성 심볼입니다:

마지막 단계는 진입 포인트를 찾기 위해 필요한 편차를 결정하는 것입니다:

- 알고리즘 선택 - 단순 MA 또는 1차 차이를 사용해 추세를 제거합니다. 결과 시리즈에서 추세를 제거하는 방법은 두 가지가 있습니다 (저는 두 번째 방법을 선호합니다). 첫 번째 방법은 결과 시리즈에서 필요한 기간의 MA를 제거하는 것입니다. 이 기간은 투자 수익률에 따라 선택됩니다. MA는 간단한 알고리즘에 기반합니다. 지수 이동 평균을 사용할 의미가 있는지는 아직 명확하지 않아서 여러분의 의견을 듣고 싶습니다. 두 번째 방법은 두 번의 1차 차이를 취하는 것입니다. 먼저 각 쌍에 대해 1차 차이를 계산한 후, 그 결과 간의 차이를 계산합니다. 두 방법의 최종 결과는 한 시리즈에 강한 움직임이 없을 때 유사합니다. 강한 움직임이 있을 경우 첫 번째 방법이 합성 결과를 0으로 빠르게 되돌려 주기 때문에 종종 잘못된 신호가 됩니다. 첫 번째 차이에 대한 주의: Close[1]-Close[2] 대신 Close[1]/Close[2], 즉 '첫 번째 비율'을 사용하고 있습니다. 이 용어를 들어본 적은 없지만요.
- 알고리즘 기간 - 지연, 오프셋. 0으로 설정하면 합성 심볼은 수정되지 않습니다.
- 레벨 표시 - 시장 진입 결정을 나타내는 편차 레벨을 표시하거나 숨깁니다. 저는 양 방향으로 세 가지 레벨: 빨강, 노랑, 초록을 사용합니다.
- 레벨 계산 방법 - 이 레벨을 결정하는 방법은 세 가지가 있습니다. 방법 1 (0..1로 정규화 후 오프셋) - 추세가 제거된 합성 심볼을 단위 범위로 정규화한 후, 오프셋 = -0.5를 적용해 0을 중심으로 진동하게 합니다. 저는 주로 이 방법을 사용합니다. 하지만 초기 데이터가 안정적인 극단이 없을 때는 여전히 정규화가 이루어지며, 이 값은 고려하지 않아야 한다는 점에 유의하세요. 지표는 업데이트된 극단이 나타난 후 과거를 다시 그리지 않기 때문에 차트에서 다음과 같이 보일 것입니다:
하지만 초기 시리즈의 두세 번의 좋은 다이버전스 후에는 이 레벨을 신뢰하기 시작할 수 있습니다. 정규화를 위한 극단은 데이터가 축적됨에 따라 잃지 않게 됩니다.
방법 2 (극단의 레벨) - 단순히 절대 최대 편차를 추적하고 이를 3개의 레벨로 나누어 시장에 진입하는 것입니다.
특징은 정규화와 동일합니다 - 안정적인 극단을 얻을 때까지 이러한 레벨을 신뢰하지 않는 것이 좋습니다.
이 방법을 사용할 때 다음과 같은 그림을 볼 수 있습니다:

위의 방법 중 어느 방법을 사용하든 레벨이 좁아지지 않는다는 장점이 있습니다. 하지만 하나의 단점은 스파이크가 발생하면 이후 계산이 이를 기준으로 이루어진다는 점입니다. 이를 제거하기 위해 지표에는 레벨 계수라는 추가 매개변수가 있습니다 (단순히 시장 진입을 위해 수동으로 레벨을 좁히거나 넓힐 수 있는 계수입니다).
레벨을 그리는 방법 3 - 표준 편차 계산. 이 방법은 지표에 구현되어 있지 않습니다. 왜냐하면 레벨이 좁아지는 것을 초래하기 때문에 제 생각에는 받아들일 수 없습니다. 결과적으로 레벨은 계속 좁아졌다가 확장되는 거품처럼 보입니다. 안타깝게도 스크린샷을 제공할 수 없는 이유는 이 계산 방법을 모든 지표에서 제거했기 때문입니다. 또 다른 단점은 모든 가용 데이터를 지속적으로 확인해야 정확히 계산할 수 있다는 점입니다.
P.S. 이 지표는 메타트레이더 4에서 아이디어를 검증하기 위해 이전된 것인데, 몇 가지 주의사항이 있습니다:
- 지표가 모든 데이터를 가져올 수 없을 때 일부 노이즈를 그립니다. 그 이유를 찾을 수 없었습니다. 이는 메타트레이더 4에서는 발생하지 않습니다;
- 지표가 역사에서 데이터 누락이 발생할 때 이전 데이터를 사용할 수 있지만, 첫 번째 항목 때문에 빈 데이터로 남겨 두었습니다. 이를 통해 데이터가 누락된 정확한 위치를 확인할 수 있습니다.
- 이상한 점이 있다면 차트를 새로 고치거나 기간, 쌍 등을 변경해 보세요.
- 데이터가 없을 때 타이머를 사용해 보았지만 결과가 만족스럽지 않아 타이머를 삭제했습니다.
- 1-4 항목이 제가 MQL5에 대한 "불충분한" 지식에서 기인한 것 같아, 여러분의 의견을 주시면 감사하겠습니다.