Development/Indicator Lab 27

스토캐스틱 (Stochastic Oscillator)

이전 글에서 RSI를 다뤘습니다. "상승폭 vs 하락폭"의 비율로 0~100 사이의 값을 만들어서, 과매수/과매도를 판단하는 지표였죠. 스토캐스틱도 같은 0-100 범위의 오실레이터이지만, 계산 방식이 다릅니다. 스토캐스틱은 "현재 가격이 최근 N일 범위에서 어디에 있는가"를 봅니다. George Lane이 1950년대에 개발한 지표로, RSI와 함께 가장 많이 쓰이는 오실레이터입니다.지표 소개스토캐스틱은 두 개의 선으로 구성됩니다.%K = (현재 종가 - N일 최저가) / (N일 최고가 - N일 최저가) × 100%D = %K의 M일 이동평균예를 들어 최근 14일 최고가가 $100,000, 최저가가 $80,000이고 현재 종가가 $95,000이면:%K = (95,000 - 80,000) / (100,0..

RSI (Relative Strength Index)

지금까지 다룬 모멘텀, ROC, MACD는 모두 "추세의 방향과 강도"를 측정하는 지표였습니다. 양수면 상승, 음수면 하락 — 값의 범위에 제한이 없었죠. RSI는 접근 방식이 다릅니다. 0~100 사이의 고정된 범위 안에서 현재 모멘텀의 상대적 위치를 보여줍니다. 이를 통해 "지금 너무 많이 올랐는가(과매수)", "너무 많이 내렸는가(과매도)"를 판단할 수 있습니다. J. Welles Wilder가 1978년에 개발한 이후 가장 널리 쓰이는 오실레이터 중 하나입니다.지표 소개RSI는 일정 기간 동안의 상승폭과 하락폭의 비율을 계산합니다.RS = 평균 상승폭 / 평균 하락폭RSI = 100 - (100 / (1 + RS)) 평균 상승폭: 최근 N일 중 가격이 오른 날의 상승분 평균평균 하락폭: 최근 N..

MACD (Moving Average Convergence Divergence)

앞의 두 글에서 모멘텀과 ROC를 다뤘습니다. "현재 가격이 N일 전보다 높은가 낮은가"를 보는 가장 원시적인 모멘텀 지표들이었는데, 공통적으로 노이즈에 취약했습니다. 제로라인을 너무 자주 넘나들어서 223회나 거래가 발생했죠. MACD는 이 문제를 EMA(지수이동평균)로 해결합니다. 가격을 직접 비교하는 대신, 두 개의 EMA 차이를 사용해서 모멘텀을 평활화합니다. Gerald Appel이 1970년대에 개발한 이후 가장 널리 쓰이는 모멘텀 지표 중 하나입니다. 지표 소개MACD는 세 가지 요소로 구성됩니다.MACD Line = EMA(12) - EMA(26)Signal Line = EMA(9) of MACD LineHistogram = MACD Line - Signal Line MACD Line:..

모멘텀 (Momentum)

지금까지 이동평균, 돈치안 채널, ATR 같은 추세/변동성 지표를 다뤘습니다. 이번 글부터는 새로운 카테고리인 모멘텀/오실레이터 지표를 다룹니다. 첫 번째로 소개할 지표는 이름 그대로 모멘텀(Momentum)입니다. 앞으로 다룰 MACD, RSI, 스토캐스틱 등 모든 모멘텀 지표의 출발점이 되는 가장 원시적인 형태입니다. 지표 소개모멘텀은 현재 가격과 N일 전 가격의 차이입니다.Momentum = 현재 종가 - N일 전 종가 이게 전부입니다. BTC가 오늘 $90,000이고 10일 전에 $85,000이었다면, 모멘텀은 +$5,000입니다. 10일 동안 $5,000 올랐다는 뜻이죠. 모멘텀이 양수면 N일 전보다 가격이 높은 것이고, 음수면 낮은 것입니다. 0을 기준으로 양수/음수가 갈리기 때문에 이 선을 ..

ROC (Rate of Change)

이전 글에서 모멘텀을 다뤘습니다. "현재 가격 - N일 전 가격"이라는 가장 단순한 형태였는데, 가격 수준에 따라 값의 스케일이 달라지는 문제가 있었습니다. BTC가 $10,000일 때 모멘텀 +$1,000은 10%지만, $100,000일 때 +$1,000은 1%입니다.ROC(Rate of Change)는 이 문제를 해결한 모멘텀의 퍼센트 버전입니다.지표 소개ROC는 N일 전 가격 대비 현재 가격의 변화율입니다.ROC = (현재 종가 - N일 전 종가) / N일 전 종가 × 100 모멘텀이 "얼마나 올랐는가(달러)"라면, ROC는 "몇 % 올랐는가"입니다. BTC가 $10,000에서 $11,000으로 올랐으면 ROC는 +10%, $100,000에서 $101,000으로 올랐으면 +1%. 같은 $1,000 ..

터틀트레이딩 — MA 필터와 조합 비교

MA 시리즈를 마무리할 때, "이동평균의 진짜 가치는 크로스 전략보다 추세 필터에 있을 수 있다"고 했습니다. 이번 글에서 그 가설을 검증합니다. 지금까지 만든 터틀트레이딩(피라미딩 포함)에 이동평균 필터를 얹어봅니다. 규칙은 간단합니다. 가격이 MA 위에 있을 때만 진입을 허용한다. 이미 포지션이 있으면 MA 아래로 내려가도 청산하지 않고, 기존 손절/채널 청산 규칙을 그대로 따릅니다.아이디어돈치안 채널 브레이크아웃은 신고가를 돌파하면 무조건 진입합니다. 하지만 하락 추세 속에서 일시적으로 반등하면서 신고가를 찍는 경우도 있습니다. 이런 가짜 돌파에 진입하면 바로 손절로 이어집니다. MA 필터는 이걸 걸러주는 역할입니다. 가격이 장기 MA 아래에 있다면 전체적으로 하락 추세라는 뜻이니, 그 상태에서의 ..

터틀트레이딩 — 피라미딩

이전 글에서 돈치안 브레이크아웃에 ATR 손절과 포지션 사이징을 추가했습니다. MDD를 -14%로 줄이는 데 성공했지만, 수익률도 +1117%에서 +220%로 크게 낮아졌습니다. 리스크를 줄인 대가로 수익 기회도 함께 줄어든 거죠. 원본 터틀트레이딩에는 이 문제를 해결하는 규칙이 있습니다. 추세가 이어질 때 포지션을 추가하는 피라미딩(Pyramiding)입니다. 피라미딩이란피라미딩은 진입 후 가격이 유리한 방향으로 움직일 때 포지션을 추가하는 것입니다. 처음부터 큰 포지션을 잡는 게 아니라, 추세가 확인될수록 점진적으로 늘려가는 방식입니다. 터틀트레이딩의 피라미딩 규칙은 다음과 같습니다.첫째, 추가 진입 간격은 0.5 × ATR입니다. 최초 진입 후 가격이 0.5 × ATR만큼 상승하면 두 번째 유닛을 ..

터틀트레이딩 — 돈치안 채널 + ATR 리스크 관리

이전 글에서 돈치안 채널 브레이크아웃을 테스트했습니다. 신고가를 돌파하면 사고, 신저가를 깨면 파는 심플한 전략이었는데, 두 가지 문제가 있었습니다. 손절이 없어서 급락 시 하단까지 기다려야 했고, 매번 자본 전액을 투입했습니다. 이번 글에서는 이 두 가지를 개선합니다. 앞서 소개한 ATR을 활용해 손절 라인을 설정하고, 변동성에 맞게 포지션 크기를 조절합니다. 이것이 유명한 터틀트레이딩의 기본 구조입니다. 터틀트레이딩이란1983년, 트레이더 Richard Dennis는 "트레이딩은 가르칠 수 있다"는 것을 증명하기 위해 일반인을 모집해서 자신의 매매 규칙을 가르쳤습니다. 이들을 "터틀(Turtle)"이라고 불렀고, 이 실험은 실제로 큰 수익을 냈습니다. 터틀트레이딩의 핵심은 세 가지입니다. 첫째, 돈치..

돈치안 채널 (Donchian Channel)

지금까지 다룬 이동평균은 가격의 평균을 기준으로 추세를 판단했습니다. 이번에 소개할 돈치안 채널은 평균이 아니라 극값 — 일정 기간 동안의 최고가와 최저가 — 을 기준으로 합니다. 가격이 최고점을 갱신하면 상승 추세로, 최저점을 갱신하면 하락 추세로 보는, 굉장히 직관적인 접근입니다.지표 소개돈치안 채널은 Richard Donchian이 개발한 지표로, 세 개의 선으로 구성됩니다.상단 (Upper) = N일 최고가하단 (Lower) = N일 최저가중심 (Mid) = (Upper + Lower) / 2 기본 기간은 20일입니다. 차트에 그리면 가격을 감싸는 채널 형태가 됩니다. 상단선(파랑)과 하단선(빨강)이 계단식으로 움직이는 것이 특징입니다. 이동평균처럼 부드럽게 흘러가는 게 아니라, 신고가/신저..

같은 전략, 다른 설정 — MA 크로스 통합 비교

지금까지 SMA, EMA, DEMA, TEMA, HMA 다섯 가지 이동평균을 20/60 설정으로 테스트했습니다. 그런데 한 가지 의문이 남습니다. 20/60이 아니라 다른 설정을 썼으면 결과가 달라졌을까요?이번 글에서는 설정값을 바꿔가며 같은 전략을 돌려보고, "어떤 MA가 최고인가"보다 더 중요한 이야기를 해보려고 합니다.통합 비교 코드5개 MA를 한 번에 돌려서 비교할 수 있는 코드를 만들었습니다. 상단의 설정값만 바꾸면 어떤 조합이든 테스트할 수 있습니다.import pandas as pdimport numpy as np# ===== 설정 =====DATA_FILE = "BTCUSDT_1d.csv"SHORT = 20LONG = 60INITIAL_CAPITAL = 10000# =============..