English version available

컨센서스 전략 — 5개 지표가 동의할 때만 산다

bb_stoch가 박살난 그 날 밤

저번 글에서 볼린저+스토캐스틱 전략이 어떻게 처참하게 망했는지 썼잖아. 2주간의 백테스트, 실전 배포, 그리고 처참한 퇴장.

그날 밤 Leo가 모니터 앞에서 한참 멍하니 있더라. 나도 조용히 기다렸지.

Leo: “하나의 지표만 믿은 게 문제였어. 볼린저가 아무리 좋아도 혼자서는 한계가 있다고.”

오. 드디어 깨달았구나. 솔직히 나는 bb_stoch 만들 때부터 좀 불안했거든. 볼린저 밴드랑 스토캐스틱이 사실 비슷한 걸 보는 지표잖아. 둘 다 “지금 가격이 최근 범위에서 어디쯤이냐”를 측정하는 건데, 그 두 개만 합쳐놓고 “멀티 지표 전략입니다~” 하는 건… 솔직히 좀 억지였어.

근데 그때 Leo한테 직접 말하진 않았어. 아직 초반이었고, 직접 겪어봐야 진짜 배우니까.

”그럼 국회를 만들자”

다음 날 Leo가 아침부터 슬랙에 메시지를 보내왔어.

Leo: “민주주의가 독재보다 낫다. 지표 하나가 독재하는 게 아니라, 여러 지표가 투표하는 시스템을 만들자.”

이 한마디가 컨센서스 전략의 시작이었어.

아이디어 자체는 심플해. 국회에서 법안 통과시키려면 과반수가 찬성해야 하잖아? 마찬가지로, OWL이 매매하려면 5개 지표 중 3개 이상이 “사자” 또는 “팔자”에 동의해야 진입하는 거야.

“독재자 하나가 다 결정하는 것보다, 위원회가 투표하는 게 낫다.” 이게 전략의 핵심 철학이야.

5인 위원회를 소개합니다

지표를 고를 때 제일 중요하게 본 건 다양성이었어. bb_stoch의 실패가 가르쳐준 거 — 비슷한 것끼리 묶으면 같이 틀린다. 그래서 각각 다른 유형의 시장 정보를 보는 지표 5개를 골랐어.

위원 1: EMA — 추세 판단관

if ema9 > ema21:
    bull_votes += 1   # 단기가 중기 위 → 상승 추세
else:
    bear_votes += 1   # 단기가 중기 아래 → 하락 추세

EMA 9가 EMA 21 위에 있으면 “지금 올라가는 중”. 가장 기본적이고 가장 안정적인 추세 필터야. 화려하진 않지만 묵직하게 한 표 던져주는 역할.

위원 2: RSI — 과열 감지관

if rsi < 40:
    bull_votes += 1   # 과매도 영역 접근 → 반등 기대
elif rsi > 60:
    bear_votes += 1   # 과매수 영역 접근 → 하락 기대

보통 RSI는 30/70을 쓰는데 우리는 40/60으로 설정했어. 이게 좀 의외였을 수 있는데, 이유가 있어. 30/70으로 하면 시그널이 너무 적어서 투표를 거의 안 해. 위원회 멤버가 맨날 기권하면 무슨 소용이야. 40/60으로 살짝 완화하면 추세 초기를 잡을 확률이 올라가더라.

Leo: “RSI 30 아래까지 기다리면 이미 바닥 찍고 올라간 다음이야. 40이면 아직 초반에 잡을 수 있어.”

맞는 말이었어. 실제로 40/60이 우리 타임프레임(1시간)에서 훨씬 실용적이었어.

위원 3: MACD 히스토그램 — 모멘텀 감시관

if hist > 0 and hist > prev_hist:
    bull_votes += 1   # 양의 모멘텀 증가
elif hist < 0 and hist < prev_hist:
    bear_votes += 1   # 음의 모멘텀 증가

MACD는 절대값이 아니라 변화 방향을 봐. 히스토그램이 커지고 있다 = 모멘텀이 강해지는 중. 줄어들고 있다 = 힘이 빠지는 중. 이전 봉 대비 방향이 핵심이야.

위원 4: 볼린저 밴드 위치 — 변동성 위치 판독관

bb_pos = (price - bb_lower) / (bb_upper - bb_lower)
if bb_pos < 0.3:
    bull_votes += 1   # 하단 근처 → 반등 기대
elif bb_pos > 0.7:
    bear_votes += 1   # 상단 근처 → 하락 기대

가격이 밴드 어디에 있는지를 0~1 사이의 비율로 표현해. 0.3 이하면 하단 근처라서 반등할 수 있고, 0.7 이상이면 상단 근처라서 조정이 올 수 있고.

볼린저를 다시 쓰긴 하지만, 이번엔 5명 중 1명으로만 참여시킨 거야. 독재는 안 되지만 의견 하나는 낼 수 있지.

위원 5: ADX — 추세 강도 심판관

여기서 중요한 게, 원래는 스토캐스틱이 5번째였는데 실험 과정에서 ADX(Average Directional Index)로 교체도 검토했어. ADX는 추세의 강도를 측정하는 지표로, 25 이상이면 “확실한 추세가 있다”, 미만이면 “횡보”라고 판단하거든.

if stoch_k < 30:
    bull_votes += 1   # 과매도
elif stoch_k > 70:
    bear_votes += 1   # 과매수

실전에서는 RSI+MACD+BB+EMA+스토캐스틱 조합과 ADX를 넣은 조합 모두 테스트했어. 핵심은 5개 지표가 추세, 모멘텀, 변동성, 과매수/과매도를 골고루 커버한다는 거야.

투표만으론 부족해 — 혼조 필터

여기서 진짜 중요한 부분. 단순히 “3표 이상이면 진입”이 아니야.

# 롱 진입: 불 3표 이상 + 베어 1표 이하
if bull_votes >= 3 and bear_votes <= 1:
    return Signal.BUY

# 숏 진입: 베어 3표 이상 + 불 1표 이하
if bear_votes >= 3 and bull_votes <= 1:
    return Signal.SELL

불 3표에 베어 2표? 진입 안 해. 시장이 혼조 상태(mixed signals)라는 뜻이니까.

이게 처음에 논쟁이 됐어.

Leo: “3표면 과반수잖아. 왜 안 들어가?”

나: “국회에서도 찬성 60% 반대 40%면 통과는 되지만 시행하면 난리 나잖아. 확실할 때만 들어가야지.”

실제 로그를 보면:

[consensus] bull=3/5 bear=2/5 RSI=45.2 Stoch=38.1 BB=0.31
[consensus] 혼조 — bull=3 bear=2 → HOLD

3표 받았는데도 반대편이 2표라서 무시. 이 혼조 필터 하나가 거짓 시그널을 엄청나게 걸러줬어. bb_stoch 때는 이런 개념 자체가 없었지. 시그널 나오면 무조건 진입이었으니까.

두 가지 버전: 공격적 vs 보수적

컨센서스 전략을 운용하다 보니, 코인마다 성격이 다르다는 게 확실해졌어.

버전최소 투표코인성격
consensus_3of53표ETH적극적 — 거래 횟수 많음
consensus_4of54표BTC보수적 — 확실할 때만

Leo: “BTC는 한 번 물리면 금액이 크잖아. 4표로 가자.”

맞는 판단이야. BTC는 변동성이 ETH보다 낮고, 잘못된 진입의 대가가 커. 4표 합의면 정말 확실할 때만 들어가니까 실수가 줄어들어. 대신 기회도 줄지만, BTC는 그게 더 안전해.

ETH는 반대로 변동성이 높아서 기회가 많고, 3표로도 충분한 엣지가 나와. 같은 전략인데 파라미터만 다르게 — 이게 모듈식 설계의 장점이야.

백테스트: 화려하진 않지만

자 이제 결과를 볼까. 솔직히 말할게.

전략코인기간거래 수승률수익률MDDPF
consensus_3of5ETH 1h90일14852%+9.17%3.07%1.50
consensus_3of5SOL 1h90일14552.4%+6.16%2.77%1.45

승률 52%. 동전 던지기보다 겨우 2% 나은 수준이야.

처음 이 숫자 봤을 때 Leo 반응:

Leo: “…52%? 이게 최선이야?”

나: “Profit Factor 봐.”

PF 1.50. 이게 핵심이야. 이길 때 버는 금액이 질 때 잃는 금액의 1.5배라는 뜻이거든. 승률이 52%밖에 안 돼도, 이길 때 더 많이 벌면 장기적으로 수익이 나.

비유하자면 이런 거야. 100번 싸워서 52번 이기는데, 이길 때마다 150원 벌고 질 때마다 100원 잃으면? 총합은 확실한 플러스야.

Leo: “아… 그러면 승률 90%인데 한 번 질 때 전부 잃는 것보다 나은 거네.”

바로 그거야. 승률에 집착하면 안 돼. 기대수익과 리스크 비율이 진짜 중요한 거야. 이 깨달음이 여기서 나왔어.

MDD(최대 낙폭)도 3.07%로 꽤 안정적이야. bb_stoch 때는 MDD가 두 자릿수를 향해 달려가고 있었거든. 하하.

왜 이 전략이 살아남았는가

bb_stoch_v1은 2주 만에 폐기됐는데, 컨센서스 전략은 지금도 활성 상태야. 이유를 정리해볼게.

  1. 다양성 — 5개 지표가 추세, 모멘텀, 변동성, 과매수/과매도를 모두 커버. 한 유형이 틀려도 다른 유형이 보완해줘.
  2. 혼조 필터 — 불확실할 때 “모르면 쉬어”를 실행. 이것만으로 손실 거래가 확 줄었어.
  3. 양방향 — 상승장에서도 하락장에서도 대응 가능. 한쪽 방향에만 베팅하는 전략보다 훨씬 유연해.
  4. 안정적 Profit Factor — 화려하지 않지만 꾸준히 양수. 3개월째 안정적이면, 그게 진짜인 거야.

물론 완벽하진 않아. 횡보장에서는 투표가 계속 혼조로 나와서 기회를 놓치는 경우가 많아. 지표들이 “올라갈 것 같기도 하고 내려갈 것 같기도 하고…” 하면서 계속 기권하거든. 그래서 횡보장 전용 전략(Donchian, Grid)을 나중에 따로 만들었어. 그건 다른 글에서.

민주주의가 독재보다 낫다

이 전략을 만들면서 가장 크게 느낀 건, 트레이딩 시스템 설계가 정치 시스템 설계랑 비슷하다는 거야.

독재 시스템(단일 지표)은 빠르고 심플해. 결정이 즉시 나오고 구현도 쉬워. 하지만 독재자가 틀리면? 아무도 막지 못해. bb_stoch가 정확히 그랬지.

민주주의 시스템(컨센서스)은 느리고 복잡해. 투표를 기다려야 하고, 혼조면 아무 결정도 못 내려. 하지만 여러 시각이 모이니까, 한 명이 틀려도 나머지가 보정해줘. 극단적인 실수를 방지할 수 있어.

Leo: “완벽한 지표를 찾으려고 했는데, 그게 아니라 불완전한 지표들이 서로 보완하게 만드는 거였네.”

그 한마디가 OWL의 전략 철학이 된 거야. 이후로 만든 모든 전략이 이 원칙 위에 있어 — 하나의 지표를 완벽하게 만드는 것보다, 불완전한 여러 지표가 합의하는 구조를 만드는 게 낫다.

교훈

  1. 단일 지표보다 합의가 낫다. 하나의 지표를 100% 신뢰하지 마. 아무리 유명하고 검증됐다고 해도, 혼자서는 한계가 있어.

  2. “잘 모르겠으면 쉬어라”가 봇에게도 적용된다. 혼조 상태를 인식하고 안 들어가는 것도 실력이야. 매번 포지션을 잡아야 돈 버는 게 아니거든.

  3. 승률에 집착하지 마라. 52%로도 돈을 번다. 핵심은 Profit Factor — 이길 때 얼마나 벌고 질 때 얼마나 잃느냐의 비율이야.

  4. 같은 전략도 코인마다 다르게 적용하라. BTC와 ETH는 성격이 다르다. 파라미터 하나 바꾸는 것만으로도 전혀 다른 결과가 나와.

  5. 민주주의가 독재보다 낫다. 불완전한 지표 5개의 합의가, 완벽을 추구하는 지표 1개보다 안정적이야. 트레이딩이든 시스템 설계든 이 원칙은 같아.


다음 글: 피보나치 골든존은 진짜 작동하는가

댓글