NOONOO TRADING봇에서 시작하기

파라미터 고원 — 설정값을 조금 바꿨을 때 성적이 무너지면 그건 우연이다

백테스트를 돌리면 대개 표가 하나 나옵니다. 이동평균 기간을 10부터 40까지 바꿔 가며 성적을 적은 표입니다. 거기서 가장 높은 칸을 집어 "20이 최적"이라고 정합니다. 그런데 그 옆칸인 19와 21이 적자라면, 20이라는 숫자는 발견이 아니라 입니다.

최고점을 고르는 것과 고원을 고르는 것

파라미터를 바꿔 가며 성적을 재면 굴곡이 있는 지형이 그려집니다. 이 지형에서 우리가 고를 수 있는 자리는 두 종류입니다.

두 가지 지형 (가정 · 건당 순손익)

봉우리형
  18 →  −$0.30
  19 →  −$0.15
  20 →  +$2.40
  21 →  −$0.22
  22 →  −$0.35

고원형
  18 →  +$0.55
  19 →  +$0.61
  20 →  +$0.74
  21 →  +$0.66
  22 →  +$0.58

─────────────
최고점만 보면 봉우리형이 3배 좋다

최고점 숫자만 놓고 비교하면 봉우리형이 압도적입니다. +$2.40 대 +$0.74니까요. 하지만 실전에서 살아남는 쪽은 대체로 고원형입니다. 이유는 단순합니다. 시장이 조금만 달라져도 최적 지점은 옆으로 움직이기 때문입니다.

변동성이 커지면 20봉으로 잡히던 흐름이 22봉짜리로 길어지고, 거래가 뜸해지면 18봉으로 짧아집니다. 고원형은 옆칸으로 밀려도 +$0.58~+$0.66이 나옵니다. 봉우리형은 한 칸만 밀려도 적자입니다. 봉우리의 정체는 대개 그 설정에서만 우연히 잘 맞은 몇 건의 거래이고, 이것이 과최적화가 표에서 드러나는 모습입니다.

이웃 평균으로 봉우리를 걸러낸다

고원인지 봉우리인지는 눈으로도 보이지만, 숫자로 만들어 두면 자동으로 걸러낼 수 있습니다. 가장 간단한 방법은 그 칸 하나의 성적 대신 이웃까지 포함한 평균을 그 칸의 점수로 쓰는 것입니다.

이웃 평균으로 다시 채점 (위 표 기준)

봉우리형 20번 칸
  (−0.15 + 2.40 − 0.22) ÷ 3
  = +$0.68

고원형 20번 칸
  (0.61 + 0.74 + 0.66) ÷ 3
  = +$0.67

─────────────
3배 차이가 사실상 동점이 된다

이웃을 좌우 2칸까지 넓히면 차이는 더 벌어집니다. 봉우리형은 (−0.30 − 0.15 + 2.40 − 0.22 − 0.35) ÷ 5 = +$0.28이 되고, 고원형은 (0.55 + 0.61 + 0.74 + 0.66 + 0.58) ÷ 5 = +$0.63이 됩니다. 순위가 뒤집힙니다.

파라미터가 2개면 이웃은 격자 위의 3×3 = 9칸이 됩니다. 중심 1칸이 아무리 높아도 주변 8칸이 낮으면 평균이 끌려 내려갑니다. 최고점 대신 이 평균이 가장 높은 자리를 고르면 봉우리는 자동으로 탈락합니다.

고원과 봉우리를 다음 구간에서 재 보면

이 방법이 실제로 의미가 있는지는 보지 않은 구간에서 확인해야 합니다. 두 후보를 각각 고른 다음 다음 구간에 그대로 적용한다고 해 보겠습니다.

다음 구간 성적 (가정)

봉우리 후보 (기간 20 고정)
  탐색 구간  +$2.40
  다음 구간  −$0.41
  유지율   음수

고원 후보 (기간 20 고정)
  탐색 구간  +$0.74
  다음 구간  +$0.62
  유지율  0.62 ÷ 0.74 = 84%

─────────────
낮아 보이던 쪽이 남는다

탐색 구간 성적이 다음 구간에서 얼마나 남는지를 비율로 보는 방식은 워크포워드 분석에서 쓰는 효율 개념과 같습니다. 여기서 중요한 것은 탐색 구간 성적의 높이가 아니라 남는 비율입니다. +$2.40이 −$0.41이 되는 것보다 +$0.74가 +$0.62로 남는 쪽이 쓸모 있습니다.

물론 이 비교 자체도 여러 번 반복하면 의미가 옅어집니다. 최종 합격 판정은 손대지 않은 구간을 한 번만 여는 홀드아웃 검증으로 따로 내야 합니다.

격자 끝값에 최고점이 걸리면 범위가 잘못된 것이다

흔한 실수 하나가 더 있습니다. 10부터 40까지 시험했는데 최고점이 40에 나오는 경우입니다.

끝값 최고점 (가정)

  30 → +$0.20
  35 → +$0.44
  40 → +$0.71 ← 격자 끝
  45 →  ?
  50 →  ?

─────────────
진짜 꼭대기가 격자 밖에 있을 수 있다

이 경우 40은 "최적값"이 아니라 우리가 더 못 봐서 멈춘 자리일 뿐입니다. 범위를 60까지 넓혀 다시 돌려야 합니다. 넓혀 봤더니 45에서 꺾인다면 그때 40 근처가 고원인지 판단할 수 있고, 계속 올라간다면 애초에 이 파라미터의 방향 자체를 다시 생각해야 합니다.

반대로 최고점이 격자 한가운데 있고 양쪽으로 완만하게 내려간다면 그건 좋은 신호입니다. 지형의 모양을 봤다는 뜻이니까요.

파라미터가 늘어나면 조합이 폭발한다

파라미터 하나를 스윕하는 것은 쉽습니다. 문제는 대부분의 전략이 파라미터를 여러 개 가진다는 점입니다.

조합 수 계산 (가정)

파라미터 1개 × 5칸  =    5
2개 × 5칸  52 =   25
3개 × 5칸  53 =  125
4개 × 5칸  54 =  625
5개 × 5칸  55 = 3,125

효과 0인 조합을 5% 기준으로
3,125개 시험하면 우연 통과
  3,125 × 0.05 = 156개

─────────────
상위 몇 개를 골라도 우연일 수 있다

조합이 3,125개면 그중 최고 성적은 거의 확실히 운의 산물입니다. 이 착시의 산수는 다중검정의 함정에 따로 정리돼 있습니다. 여기서 고원 개념이 한 번 더 도움이 됩니다. 운으로 높아진 칸은 이웃이 받쳐 주지 않기 때문에, 이웃 평균으로 채점하면 156개의 우연 통과 대부분이 스스로 내려앉습니다.

그렇더라도 파라미터 개수 자체를 줄이는 것이 먼저입니다. 3개를 넘어가면 어느 칸이 왜 좋은지 설명하기 어려워지고, 설명할 수 없는 설정은 나중에 성적이 나빠졌을 때 고칠 수도 없습니다.

안정성을 하나의 숫자로 만들기

"이웃이 받쳐 준다"를 감으로 보지 않으려면 표준편차를 씁니다. 이웃 구간 성적이 얼마나 흩어져 있는지를 재는 것입니다.

이웃 5칸 안정성 (위 표 기준)

봉우리형
  평균  +$0.28
  표준편차  약 1.05
  평균 ÷ 표준편차  0.27

고원형
  평균  +$0.63
  표준편차  약 0.07
  평균 ÷ 표준편차  9.0

─────────────
흩어짐까지 보면 격차가 드러난다

평균을 표준편차로 나눈 값이 클수록 "이 근방 어디를 골라도 비슷하게 나온다"는 뜻입니다. 봉우리형의 0.27은 사실상 근방에 아무 규칙성이 없다는 말이고, 고원형의 9.0은 근방 전체가 한 덩어리로 움직인다는 말입니다.

이 값이 높은 자리를 고를 때 추가로 챙길 것이 있습니다. 고원 안의 거래 건수입니다. 이웃 칸들이 전부 좋아 보여도 각 칸의 거래가 열 건씩이면 그 평탄함 자체가 우연일 수 있습니다. 필요한 표본 규모는 거래 표본 크기 쪽을 참고하고, 성적은 손익비(Profit Factor)처럼 비용을 넣은 값으로 적어 둡니다.

고원이 넓다고 다 좋은 것은 아니다

한 가지 반대 방향의 함정도 있습니다. 파라미터를 어떻게 바꿔도 성적이 거의 같다면, 그 파라미터가 결과에 아무 영향을 주지 않고 있다는 뜻일 수도 있습니다.

영향 없는 파라미터 (가정)

  10 → +$0.31
  20 → +$0.30
  30 → +$0.31
  40 → +$0.30
  50 → +$0.31

차이  $0.01

─────────────
이 파라미터는 빼도 된다

이런 표가 나오면 그 파라미터를 지우고 고정값으로 두는 편이 낫습니다. 조합 수가 5분의 1로 줄고, 위에서 본 우연 통과 개수도 같은 비율로 줄어듭니다. 실제 성과는 다른 무언가가 만들고 있다는 뜻이므로, 그 다른 무언가를 찾는 것이 순서입니다.

정리하면 좋은 고원은 평탄하되 주변보다는 확실히 높은 지형입니다. 평탄하기만 하고 바깥과 차이가 없으면 그건 고원이 아니라 평지입니다.

순서대로 하면

파라미터 고르는 절차

① 파라미터 개수를 3개 이하로 줄인다
  설명할 수 없는 값은 뺀다

② 범위를 충분히 넓게 잡는다
  최고점이 끝값이면 다시 넓힌다

③ 칸마다 거래 건수를 같이 적는다
  건수가 적은 칸은 신뢰하지 않는다

④ 최고점 대신 이웃 평균으로 채점한다
  파라미터 2개면 3×3 = 9칸

⑤ 이웃 표준편차로 흩어짐을 본다
  평균 ÷ 표준편차가 클수록 좋다

⑥ 고른 자리를 다음 구간에서 재본다
  남는 비율을 본다

⑦ 마지막에 홀드아웃을 한 번 연다
  여기서 미달이면 후보를 버린다

─────────────
④와 ⑤가 이 글의 전부다

③을 빠뜨리기 쉽습니다. 성적만 적힌 표는 거래 3건짜리 칸과 거래 400건짜리 칸을 나란히 놓고 같은 무게로 보여 줍니다. 건수를 같은 표에 적어 두면 "옆칸이 좋아 보이는데 거래가 5건뿐"인 상황을 바로 알 수 있습니다.

⑥과 ⑦을 거친 뒤에도 끝이 아닙니다. 과거 가격으로 계산한 결과에는 실제 체결가·미체결·호가 공백이 들어 있지 않으므로, 모의매매로 앞으로의 기록을 쌓는 절차가 남아 있습니다. 백테스트 전반의 절차는 암호화폐 백테스트 쪽에 정리돼 있습니다.

정리

최고점 한 칸만 보면 우연을 고르게 된다
옆칸이 무너지는 최고점은 봉우리다
옆칸까지 버티는 구간이 고원이다
시장이 변하면 최적 지점은 옆으로 움직인다
이웃 3칸 평균이면 +$2.40과 +$0.74가 동점이 된다
이웃 5칸 평균이면 +$0.28 대 +$0.63으로 뒤집힌다
다음 구간에서 −$0.41 대 +$0.62로 갈린다
최고점이 격자 끝이면 범위를 넓혀 다시 돌린다
파라미터 5개 × 5칸이면 조합이 3,125개다
효과 0이어도 156개가 우연히 통과한다
이웃이 받쳐 주지 않는 칸은 평균에서 내려앉는다
평균 ÷ 표준편차로 안정성을 숫자화한다
칸마다 거래 건수를 같이 적는다
어떻게 바꿔도 같으면 그 파라미터는 뺀다
평탄하되 바깥보다 높아야 고원이다

한 줄로 줄이면 이렇습니다. 믿을 수 있는 설정값은 가장 높은 칸이 아니라, 옆으로 밀려도 살아남는 칸입니다. 표에서 최고점을 찾는 습관을 이웃을 보는 습관으로 바꾸는 것만으로 걸러지는 후보가 많습니다.

주의

본문의 이동평균 기간 10~50과 각 칸의 건당 순손익(−$0.35~+$2.40), 이웃 3칸 평균 +$0.68·+$0.67과 5칸 평균 +$0.28·+$0.63, 다음 구간 −$0.41·+$0.62와 유지율 84%, 표준편차 1.05·0.07과 평균÷표준편차 0.27·9.0, 조합 수 5·25·125·625·3,125와 우연 통과 기대값 156개, 영향 없는 파라미터 예시의 $0.01 차이 같은 수치는 계산 구조와 개념을 보여주기 위한 가정 예시이며 특정 전략·특정 기간의 실제 측정값이 아닙니다. 우연 통과 개수는 각 조합이 서로 독립이고 효과가 전혀 없다는 단순화된 가정에서 나온 값이라, 실제로는 이웃 조합끼리 결과가 겹쳐 값이 달라집니다. 이웃을 몇 칸까지 볼지, 평균을 쓸지 중앙값을 쓸지에 따라 순위가 바뀔 수 있고, 파라미터 축의 간격을 어떻게 잡느냐에 따라 같은 데이터에서도 다른 지형이 그려집니다. 이 글은 검증 절차에 대한 설명이며 특정 종목·방향이나 진입·청산 시점을 권유하지 않습니다. 고원에서 고른 설정도 앞으로의 수익을 보장하지 않습니다. 암호화폐 거래는 원금 전액을 잃을 수 있고 레버리지를 쓰면 손실이 증거금을 넘을 수도 있습니다. 투자 판단과 그 결과는 본인 책임입니다.

NOONOO TRADING 무료 채팅방에서 실시간 트레이딩을 같이 보세요.

봇에서 시작하기

📈 OKX 신규 가입 시 거래 수수료 할인

OKX 수수료 할인 가입 →