투명 기록
투명 기록
이 프로젝트에는 실패가 두 층위 있습니다. 전략 실패는 가설이 맞지 않은 것이고, 계측 실패는 가설을 제대로 측정하지 못한 것입니다. 수기 기록 13회(번호 시도 1~13) 전략 실패 뒤에도 계측 실패는 계속되었고, 그걸 고치지 않았으면 남은 모든 판단이 오염됐습니다. (자동 연구 45행은 별도로 집계되며, 총 59회 시도 · 0회 통과 · 52회 기각 · 7회 보류입니다.)
1. 전략 실패 — 수기 기록 13회 전부 기각
상세 근거는 시도 목록에 있습니다. 여기서는 분류만 둡니다.
| 범주 | 시도 | 결과 요지 | 결론 |
|---|---|---|---|
| 초단기 | 1 | M1 직접 이익 3.4pip 대비 스프레드 1.5pip — 게이지 2.3배 | 수학적 한계 |
| 평균회귀 | 2, 10, 11 | 6,223건 −14,083달러 / 1,041건 PF 0.68 / 997건 PF 0.90 | 카테고리 폐기 |
| 평균회귀 | 3, 4, 6, 7 | 인샘플 −7.9% → 구간 외 −7.8% / 5심볼 −273달러 | 카테고리 폐기 |
| 추세 | 1, 8, 9, 9.1 | −13.6% / 0건 / 481건 PF 0.95 / 4심볼 1,725건 PF 0.93 | 카테고리 폐기 |
| 마이닝 | 12, 13 | 6,912조합 스캔 → 후보 172 → 생존 66 / 영역 3/6 통과 | 방법 실패 |
2. 계측 실패 — MQL5 쪽 7건
전략을 돌리지 못하게 만들거나 잘못된 값을 내게 만든 버그입니다.
-
타임프레임 열거값 오독
PERIOD_M10 = 10인데16390은PERIOD_H6입니다. 19일 검증에서 봉 1,872개 중 76개만 평가됐고, 모든 지표가 다른 봉프레임에서 계산됐습니다. -
핸들을 iMA 기간으로 역전입력
재시도마다 기간이 늘어나 EMA200이 영영 로드 실패(error 4002). EMA200을 쓰는 어떤 전략도 깨뜨리는 결함이며, 8·9·9.1번을 처음부터 다시 측정해야 한 원인입니다.
-
OnInit에서 긴 조회 기간 실패
OnInit은 히스토리 동기화 전에 실행됩니다. BB(20)과 RSI(2)는 짧아 멀쩡하고 EMA200만 죽었습니다. 지연 생성으로 수정.
-
TimeGMT() 가 테스터에서 앵커되지 않음
세션 필터가 GMT 8–22 창을 통째로 무효화했습니다. 서버시간으로 교체.
-
InSession() 이 한쪽 경로에만 존재
평균회귀 경로는 세션 파라미터를 완전히 우회했습니다. 조용히 무시되어 성공한 것처럼 보입니다.
-
KST 변환이 무제한 창을 붕괴시킴
0–24를 변환하면 양 끝이 같은 서버시각으로 접혀17–17이 되고, 모든 봉이 탈락해 거래 0건이 됐습니다. -
서버시간 오프셋을 읽을 방법이 없음
SYMBOL_TIME_GMT_DELTA가 이 빌드에 없고, 테스터의TimeGMT는 시뮬레이션 시각에 고정됩니다. 시간대별 변동성 패턴에서 런던 오픈이 서버 10시에 고정된 점을 이용해 겨울 UTC+2 / 여름 UTC+3으로 역산했습니다.
3. 계측 실패 — 파이프라인 쪽 9건
결과를 잘못 읽게 만들거나, 조용히 실패하게 만든 사고입니다.
-
터미널은 ini의 ExpertParameters 경로를 읽지 않는다
프로필 세트에 복사하는 한 줄이 빠지면 BB 2.0/2.1, SL 2.5/3.0이 다른 네 설정이 모두 소수점까지 동일한 결과(446건 PF 1.044)를 냈습니다.
-
결과 JSON은 매 봉마다 기록된다
"파일 존재"를 완료 신호로 쓰면 14분짜리 테스트를 20초 만에 종료했습니다. 완료는 테스터 로그의
final balance라인 증가로 판정합니다. -
에이전트 로그가 하나가 아니다
Agent-3000..3004가 각자 자기 로그를 가집니다. 수정 시각 최신 파일을 고르면 다른 에이전트의 로그를 읽고 검증을 통과한 척합니다. -
에이전트 로그는 UTF-16
utf-8로 읽으면 문자열 매칭이 조용히 0건이 되고 검사 코드가 아무것도 검사하지 않은 채 통과를 보고합니다. 가장 위험한 형태입니다.
-
Measure-Object 를 배열로 감싸면 카운트가 1
전후 비교가 항상 1 대 1이 되어 완료를 감지하지 못했고, 13분 46초에 끝난 테스트를 45분 기다렸습니다.
-
포트 3000을 다른 프로세스가 점유
npx serve(node)가 MT5 에이전트 포트를 잡고 있을 때 모든 테스트가 조용히 실패했습니다. 기존에 성공했던 설정도 실패 — 이 분리가 원인이었습니다. -
MT5 창은 진행 상황이 아니다
자동 실행 모드에서 창은 항상 대기 화면이고 실제 계산은
metatester64프로세스가 합니다. 판단 기준은 그 프로세스와 로그 수정 시각입니다. -
절전모드는 테스트를 중단시킨다
24시간 연속 운용 계획이면 절전 비활성화가 선행되어야 합니다.
-
배치 중복 실행
두 실행기가 서로의 터미널을 죽여 잘린 실행이 결과 파일로 저장됐습니다. 설정 하나 = 실행기 하나.
4. 자기 정정한 기록
틀렸던 것을 남겨 둡니다. 지우면 같은 오류를 다시 냅니다.
문서 오기
아카이브 문서는 M5 스윕 합산을 −8,083달러로 적었으나 실제 JSON은 −14,082.73달러입니다(−8,292는 부분집합 소계).
반박된 설명
XAUUSD의 격차를 "스프레드가 넓어서"로 설명했는데 체결 로그가 반박했습니다. 슬리피지 중앙값 0, 706건 중 0.10 초과 6건. 결론은 유지하고 근거만 교체했습니다.
생존자 편향
마이닝 파이프라인이 처음 보고한 "구간 외 개선 +0.068"은 필터 통과자만 본 값이었습니다. 전체를 보면 −0.131이고 35.5%가 PF 0.9 아래로 떨어집니다.
근거 등급이 낮은 항목
7번째 시도는 상세 산출물이 보존되지 않고 합계만 남아 있습니다. 수치를 low 등급으로 표시하고 근거를 별도로 밝힙니다.
5. 검증 원칙
사전에 기준을 정한다
실행 전에 통과 조건을 정하고 기록합니다. 결과 보고 기준을 고르면 그것은 실험이 아니라 정당화입니다. 기준 미달이면 그 사실을 그대로 씁니다.
영역으로 판단한다
하나가 잘 나오면 과적합입니다. 파라미터를 넓혀 영역으로 돌리고 영역 전체가 살아 있는지 봅니다.
계측을 먼저 검증한다
파이썬 스캐너와 MT5를 같은 조건에서 돌려 PF 0.909 대 0.899로 맞췄습니다. 일치하지 않으면 스캐너 결과를 신뢰하지 않습니다.
검증 안 된 것을 통과로 쓰지 않는다
검사 결과가 비어 있으면 실패입니다. "확인하지 못했음"과 "문제가 없음"은 다릅니다.
사용하지 않은 기간을 남겨 둔다
탐색에 쓴 기간은 검증에 쓸 수 없습니다. 최종 판단은 새 데이터로만 합니다.
발명하지 않는다
숫자와 가격은 기록에서만 가져옵니다. 통과 전략이 생기더라도 그 전략까지 오는 과정 전체를 함께 공개합니다.