분류
성과
난이도
고급
사용 상황
백테스트전략 설계MT5 운용

워크포워드 분석

워크포워드 분석은 히스토리의 한 창에서 전략을 다시 최적화하고, 그 설정을 손대지 않은 채 바로 뒤따르는 창에서 매매한 다음, 두 창을 함께 앞으로 밀며 그 일을 반복하는 검증 방법이다 — 인용하는 수치는 손대지 않은 창에서만 나온다.

다른 표현: WFA, 워크포워드 최적화, WFO, 롤링 표본 외 테스트

업데이트일 · 검토일 · mt5depot research desk 검수

쉽게 말하면

한 구간의 히스토리에서 규칙을 다듬고, 그 규칙을 손대지 않은 채 바로 뒤 구간에서 매매한 다음, 두 구간을 함께 밀고 다시 한번 그렇게 한다. 당신이 인용하는 숫자에 들어가는 것은 손대지 않은 구간뿐이다.

왜 중요한가

표본 외 테스트 한 번은 하나의 질문에 한 번 답한다. 워크포워드는 그 질문을 매 단계마다 다시 던지며, 어떤 우위가 재적합을 계속 견뎌내는지 아니면 운 좋게 한 번 견뎠을 뿐인지를 볼 수 있는 길은 이것뿐이다. 게다가 이 방법은 EA를 실제로 돌리는 사람이 하는 일 — 가까운 과거에서 파라미터를 고른 다음 아무도 본 적 없는 미래로 그것을 밀어 넣는 일 — 을 그대로 예행 연습한다.

  • 이것은 설정이 아니라 절차를 채점한다. «이런 식으로 다시 적합시킨 다음 매매한다»가 당신이 실제로 하게 될 일이므로, 검증할 값어치가 있는 대상은 바로 그 절차다.
  • 하나의 숫자가 아니라 표본 외 결과의 계열을 돌려주므로, 유난히 보기 좋았던 한 분기가 혼자서 주장을 떠받칠 수 없다.
  • 가만히 있기를 거부하는 입력값을 드러낸다. 재적합할 때마다 최적값이 매번 새로운 곳에 내려앉는다면, 그 규칙은 시장이 아니라 표본을 따라가고 있는 것이다.
  • 한 번의 홀드아웃은 국면 문제를 숨긴다. 우리가 기록한 여덟 건의 탐색 중 두 건이 탐색 뒤 창은 통과하고 탐색 앞 창에서 무너졌다.

전략 검증에 쓰는 법

어디에 쓰이나

  • 입력값을 정말로 주기적으로 다시 적합시킬 생각인 전략을 검증할 때.
  • 재최적화 주기를 고를 때 — 한 벌의 입력값이 갱신을 필요로 하기까지 얼마나 오래 쓸 만한가.
  • 여러 국면을 살아남은 우위와, 자신이 다듬어진 그 창에만 존재했던 우위를 갈라낼 때.
  • 히스토리가 너무 짧아 큼직한 예비 구간 하나를 통째로 떼어놓을 수 없을 때, 그래도 방어할 수 있는 표본 외 기록을 세울 때.

신뢰할 수 있는 결과의 모습

  • 대표 수치를 이루는 것은 표본 외 구간뿐이며, 끝에서 끝으로 이어 붙이고, 표본 내 수치는 섞어 넣지 않고 그 옆에 나란히 둔다.
  • 학습 길이와 테스트 길이, 그리고 이동 폭을 첫 실행 전에 확정했고, 셋 모두가 결과와 함께 따라다닌다.
  • 글에 표본 외 효율 — 표본 내 성과 대비 표본 외 성과의 비율 — 이 적혀 있고, 수익만 적혀 있지 않다.
  • 각 단계가 어떤 입력값을 골랐는지 모두 나열되어, 독자가 그것이 얼마나 떠도는지 판단할 수 있다.
  • 시도한 워크포워드 구성의 개수가 어딘가에 나온다. 여러 번 시도하는 것 자체가 적합의 한 형태이기 때문이다.

경고 신호

  • 표본 내와 표본 외를 가르지 않은 하나의 합산 수치.
  • 다듬어진 티가 나는 창 길이 — 아무도 설명하지 않는 어중간한 학습 대 테스트 비율.
  • 재적합할 때마다 튀어 오르는 입력값. 매 적합이 직전 창의 잡음을 쫓고 있다는 뜻이다.
  • 100 %에 가깝거나 그것을 넘는 효율. 이는 유난히 견고한 전략보다 창 사이의 누수를 가리키는 경우가 훨씬 많다.
  • 앵커드 방식과 롤링 방식을 서로 바꿔 가며 인용하는 것. 늘어나는 창과 고정된 창은 서로 다른 질문에 답하기 때문이다.

백테스트와 실거래의 차이

  • 워크포워드는 실계좌 결과와의 간극을 일부 좁힌다. 테스트한 절차가 곧 배치한 절차이기 때문이다.
  • 체결 위험은 손대지 못한 채 남겨둔다. 슬리피지, 스프레드 확대, 지연은 모두 이 연습 바깥에 있다.
  • 히스토리에 없던 국면을 지어낼 수는 없다. 그래서 평온한 10년 안에서 스무 번의 재적합을 견딘 전략도 스트레스 국면에 대해서는 여전히 검증되지 않은 것이다.
  • 실계좌 결과는 표본 내 계열이 아니라 표본 외 계열 근처에서 나온다고 보라. 표본 내 수치는 탐색을 진단할 뿐, 아무것도 예보하지 않는다.

권장 검증 방법

  1. 1MetaTrader 5에는 롤링 워크포워드가 들어 있지 않다. 전략 테스터의 Settings 탭에 있는 Forward 항목은 구간을 한 번만 자르고 — 1/2, 1/3, 1/4 또는 직접 지정한 날짜 — 살아남은 패스를 뒷부분에서 채점해 별도의 Forward Results 탭에 보여준다. 한 번의 실행으로 얻는 것은 한 단계뿐이다.
  2. 2계열은 손으로 만들어라. 단계마다 최적화를 한 번씩, 각각 날짜 범위를 이동 폭만큼 밀어서 반복하고, 매번 포워드 행을 챙겨 둔다. 스무 구간은 스무 번의 실행을 뜻하므로 시작하기 전에 단계 수를 확정하라.
  3. 3그리드를 들여다보기 전에 최적화 기준을 정하라. 매 단계에서 MT5가 어느 패스를 승자라고 부를지 결정하는 것이 바로 그 기준이기 때문이다. 내장 기준 중 어느 것도 당신이 실행을 평가하는 방식과 맞지 않는다면 Custom max가 그 결정을 OnTester()로 넘긴다.
  4. 4MT5는 언제나 범위의 끝에서 포워드 조각을 잘라내므로, 학습 구간 바로 앞의 창은 한 번도 시험받지 않는다. 그 창은 직접 돌려라. 우리가 직접 돌린 탐색들에서는 그것이 포워드 점검이 이미 통과시킨 설계 두 건을 붙잡아냈다.
  5. 5이긴 입력값을 단계별로 기록하라. Forward Results 탭은 패스 하나를 건네줄 뿐, 단계에 걸친 설정값의 궤적은 결코 건네주지 않는다 — 그런데 발견은 바로 그 궤적에 있다.
  6. 6이 연습 전체를 하나의 실험으로 다루어라. 통과할 때까지 새로운 창 길이로 다시 돌리는 것은 과최적화를 없애는 것이 아니라 한 층 위로 옮기는 것이다.

예시

우리 자신이 기록한 작업에서 가져온 한 단계다. EXP-PARAM-SEARCH-OUTCOMES-001에 들어 있는 여덟 건의 파라미터 탐색이 그것이다. ichimoku 템플릿은 H1에서 12개 조합의 그리드를 탐색해 표본 내 최고 패스를 남겼고, 그런 다음 탐색이 한 번도 건드리지 않은 두 개의 창을 만났다.

탐색한 그리드
12개 조합
SL 30-80 x TP 60-250, H1
표본 내 손익비
1.37
탐색 뒤 창
0.89
탐색 앞 창
0.80
기록된 탐색 / 채택한 탐색
8 / 0

65 %는 대부분의 글이 강하다고 부르는 구간 안에 들어간다. 그럼에도 같은 설정이 보지 못한 두 창 모두에서 돈을 잃었고, 그래서 한 단계는 데이터 한 점으로 읽히지 결코 판정으로 읽히지 않는다.

계산 0.89 ÷ 1.37 = 그 단계에서 65 % 효율, 0.80 ÷ 1.37 = 앞선 창에서 58 %

결과 65 % 효율 — 그런데도 우리가 출시를 거부한 설정이다

해석하는 법

표본 외 계열을 먼저 읽고, 그다음에 비율을, 그다음에 입력값의 안정성을 읽어라. 셋 중 정보가 가장 적은 것이 대표 수익이다.

구간 의미
대략 40 % 미만 탐색이 대체로 자기 자신의 창에 적합했다. 작은 우위는 살아남을 수 있어도 광고된 그 우위는 아니다.
대략 40-60 % 입력값 몇 개가 움직이고 나면 평범한 수준이다. 표본 내 수치가 아니라 표본 외 수치를 기준으로 계획하라.
한 단계에서 60 % 초과 고무적이지 판정은 아니다. 우리의 65 % 단계도 보지 못한 두 창 모두에서 잃었다.
대부분의 단계에서 60 % 초과, 입력값도 안정 강하다. 재적합이 계속 통하고, 설정에 대해 서로 의견이 일치한다.
100 %에 가깝거나 그것을 초과 창 사이의 누수, 미래 참조, 또는 의미를 담기에 너무 적은 구간 수를 의심하라.
  • 구간 수를 세라. 네 구간은 일화이고, 스무 구간은 분포다.
  • 단계에 걸쳐 선택된 입력값을 그려 보라. 떠도는 최적값은 자신이 잡음이라고 말하고 있는 것이다.
  • 표본 내 자산 곡선과 표본 외 자산 곡선을 하나로 섞지 마라. 그 혼합물은 반은 시험 문제이고 반은 정답지다.
  • 학습 구간 앞의 창도 함께 테스트하라. 우리의 여덟 건 중 두 건은 앞으로는 통과하고 뒤로는 무너졌다.

mt5depot은 모든 실행 뒤의 데이터 구간과 테스터 모델, 거래 수를 공개하므로, 여기 실린 어떤 표본 외 주장도 그것을 만들어 낸 표본에 견주어 확인할 수 있다.

흔한 오해

MT5 Forward 실행 한 번을 워크포워드라고 부르는 것

Forward 항목은 구간을 한 번 갈라 뒷부분을 보고할 뿐이다. 그것은 탭이 조금 더 깔끔한 단일 앵커드 홀드아웃이며, 질문에 한 번 답한다. 워크포워드는 그 분할이 움직여야 하고, MT5에서 그 말은 루프를 직접 돌린다는 뜻이다. 단계마다 최적화를 한 번씩 돌린 다음 그 포워드 행들을 모아 계열로 만드는 것이다.

워크포워드 구성 자체를 다듬는 것

여러 학습 길이와 테스트 길이를 탐색한 다음 가장 점수가 좋았던 짝을 공개하는 것은 과최적화를 그저 한 층 위로 옮길 뿐이다. 창 길이도 파라미터이므로, 고르고, 적어 두고, 그런 다음에 돌려라.

높은 표본 외 수치를 자동으로 좋은 것으로 읽는 것

우리의 macd_signal 탐색은 탐색 뒤 창에서 1.14-1.15에, 탐색 앞 창에서 0.74-0.77에 도달했다. 높은 표본 외 수치는 누수일 수도, 우호적인 국면일 수도, 구간 수가 너무 적은 탓일 수도 있다 — 자축하기 전에 조사하라.

워크포워드가 보지 못한 조건에 대한 견고함을 증명한다고 가정하는 것

이 방법이 시험하는 것은 히스토리가 담고 있던 조건뿐이다. 하나의 국면 안에서 스무 번 재적합하면 그 국면에서 나온 스무 개의 결과를 얻을 뿐이며, 그것은 다음 국면에 대해 아무 말도 하지 않는다.

자세히

자주 묻는 질문

MetaTrader 5에서 워크포워드 분석은 어떻게 돌리나요?
MT5는 루프가 아니라 부품을 줍니다. 전략 테스터의 Settings 탭에서 Forward를 1/2, 1/3 또는 1/4로 설정하면, 테스터가 날짜 범위의 앞부분에서 최적화하고 살아남은 패스를 뒷부분에서 채점해 별도의 Forward Results 탭에 나열합니다. 그것이 한 단계입니다. 계열을 만들려면 날짜 범위 전체를 이동 폭만큼 앞으로 밀고 구간마다 한 번씩 최적화를 다시 돌리면서, 매번 포워드 행과 이긴 입력값을 기록하십시오. 스무 구간은 스무 번의 실행을 뜻합니다.
표본 내 창과 표본 외 창의 길이는 어느 정도여야 하나요?
학습 창이 국면을 하나 넘게 담고, 테스트 창이 의미를 가질 만큼의 거래를 담을 정도의 길이면 됩니다. 테스터에 내장된 1/2, 1/3, 1/4 비율은 합리적인 출발점이고, 이동 폭이 작을 때는 직접 지정한 포워드 날짜가 더 짧은 테스트 조각을 줍니다. 숫자보다 규칙이 더 중요합니다. 비율은 첫 실행 전에 고르십시오. 여러 개를 시도해 가장 좋은 것을 공개하는 일은, 워크포워드가 잡아내려고 존재하는 바로 그 실수를 되풀이하는 것이기 때문입니다.
워크포워드 분석은 과최적화를 없애 주나요?
아닙니다. 위치를 옮기고 눈에 보이게 만들 뿐입니다. 재적합은 여전히 각 학습 창 안에서 일어나므로, 이 방법은 적합을 막는 것이 아니라 그 적합 중 얼마나가 다음 창과의 접촉을 견디는지를 잽니다. 우리가 기록한 여덟 건의 탐색은 116개의 파라미터 조합을 돌렸고 하나도 채택하지 않았습니다. 그중 두 건은 탐색 뒤 창을 통과한 다음 탐색 앞 창에서 무너졌는데, 이것이 바로 한 번의 홀드아웃이 숨기는 형태입니다.
좋은 표본 외 효율은 어느 정도인가요?
입력값 몇 개가 움직이고 나면 대략 40-60 %가 평범한 수준이고, 대부분의 단계에 걸쳐 60 %를 넘으면서 입력값이 안정적이면 강한 것으로 봅니다. 단일 단계는 무엇이든 의심하십시오. 우리의 가장 잘 적합된 탐색은 한 단계에서 65 %를 기록했지만, 그것이 고른 설정은 보지 못한 두 창 모두에서 돈을 잃었습니다. 100 %에 가깝거나 그것을 넘는 수치는 유난히 견고한 전략보다 학습 창과 테스트 창 사이의 누수를 알리는 경우가 더 많습니다.
어떤 최적화 기준으로 패스의 순위를 매겨야 하나요?
그리드가 나오기 전에 정하십시오. 기준 — 넓은 문헌에서 말하는 목적 함수 — 이 매 단계에서 이긴 패스를 고르기 때문입니다. 잔고 기반 순위는 가장 크게 위험을 진 패스에 상을 주고, 낙폭 기반 순위는 가장 적게 매매한 패스에 상을 주며, 어느 쪽도 맞지 않으면 Custom max가 그 결정을 당신 자신의 OnTester()에 넘깁니다. 우리가 기록한 탐색에서는 테스터의 순위가 혼자 힘으로 무엇도 결정하지 못했습니다. 살아남은 패스는 모두 세 개의 창에서 1.0을 넘는 손익비를 유지해야 했고, 여덟 건 중 하나도 그것을 해내지 못했습니다.
워크포워드는 표본 외 테스트 한 번과 어떻게 다른가요?
한 번의 테스트는 데이터 한 덩어리를 떼어 두었다가 최종 파라미터를 그것에 대해 한 번 확인합니다. 워크포워드는 다듬고 나서 테스트하는 순환을 히스토리 전체를 따라 반복하므로, 표본 외 결과의 계열을 돌려주고 재적합 절차 자체를 — EA를 실제로 돌리는 사람이 달마다 수행하는 바로 그 일을 — 시험합니다.