하드코딩 규칙 vs FreqAI 학습: 트레이딩 전략에 쓰인 8개 지표 완전 정리
퀀트 트레이딩 전략을 짜다 보면 흔히 이런 질문을 받습니다.
“지표를 이렇게 많이 쓰는데, 결국 뭘로 매매 결정을 내리는 거예요?”
이 글에서는 하나의 전략에서 실제로 사용한 8개 지표 — EMA200, EMA20/50, ADX, MACD, RSI, ATR, OBV/Volume, VWAP — 를 예로 들어, **“사람이 직접 정한 규칙”**과 **“모델이 스스로 학습하는 재료”**가 어떻게 다른지 정리합니다.
먼저, 전체 그림
이 전략은 두 가지 완전히 다른 의사결정 방식을 섞어서 씁니다.
- 직접 규칙(Rule-based): “가격이 EMA200 위에 있으면 매수 후보”처럼 사람이 조건을
if문으로 하드코딩한 부분 - FreqAI 피처(Model-based): ADX, MACD, RSI, ATR, OBV, VWAP 같은 지표 값을 숫자 그대로 LightGBM 같은 모델에게 넘기고, 그 값들을 얼마나 중요하게 볼지·어떻게 조합할지는 모델이 데이터를 통해 스스로 학습하게 하는 부분
즉 “진입 여부는 EMA 규칙이 1차로 결정 + 청산 여부는 EMA 규칙과 FreqAI 예측이 함께 결정”하는 구조이고, 나머지 6개 지표는 이 FreqAI 예측을 만드는 원재료 역할을 합니다.
| 역할 | 지표 | 사용 방식 |
|---|---|---|
| 장기추세 | EMA200 | 직접 규칙 — 가격이 위에 있어야 진입 |
| 단기추세 | EMA20, EMA50 | 직접 규칙 — 골든/데드크로스로 진입·청산 판단 |
| 추세강도 | ADX | FreqAI 피처 |
| 모멘텀 | MACD | FreqAI 피처 |
| 과매수/과매도 | RSI | FreqAI 피처 |
| 변동성 | ATR | FreqAI 피처 |
| 거래량 | OBV, Volume | FreqAI 피처 (둘 다) + Volume>0은 진입/청산 가드 |
| 평균가격 | VWAP | FreqAI 피처 |
이제 각 지표를 하나씩 뜯어봅니다.
1. EMA200 — 장기추세, 직접 규칙
**EMA(지수이동평균, Exponential Moving Average)**는 최근 가격에 더 큰 가중치를 주는 이동평균선입니다. 단순이동평균(SMA)보다 최근 변화에 더 빠르게 반응합니다.
EMA200은 최근 200개 캔들의 가격을 지수 가중 평균한 값으로, 장기추세를 판별하는 가장 널리 쓰이는 기준선입니다.
- 가격이 EMA200 위에 있다 → 큰 흐름에서 상승추세
- 가격이 EMA200 아래에 있다 → 큰 흐름에서 하락추세
이 전략에서의 사용법: “가격이 EMA200 위에 있어야 진입”이라는 조건을 코드에 직접 명시합니다. 이건 모델이 판단하는 게 아니라, “장기추세를 거스르는 매매는 하지 않는다”는 사람의 트레이딩 철학을 규칙으로 박아넣은 것입니다. 필터 역할이라고 보면 됩니다 — EMA200 조건을 통과하지 못하면 다른 어떤 신호가 좋아도 애초에 진입 후보에서 제외됩니다.
2. EMA20 / EMA50 — 단기추세, 직접 규칙
EMA20은 최근 20개 캔들, EMA50은 최근 50개 캔들 기준의 지수이동평균입니다. EMA200보다 훨씬 빠르게 움직이기 때문에 단기 추세 전환을 포착하는 데 씁니다.
가장 유명한 활용법이 바로 골든크로스 / 데드크로스입니다.
- 골든크로스: 단기선(EMA20)이 장기선(EMA50)을 아래에서 위로 돌파 → 상승 전환 신호
- 데드크로스: 단기선(EMA20)이 장기선(EMA50)을 위에서 아래로 돌파 → 하락 전환 신호
이 전략에서의 사용법: EMA200과 마찬가지로 이것도 사람이 직접 짠 규칙입니다. “골든크로스가 나오면 진입, 데드크로스가 나오면 청산”처럼 조건이 명확한 if문으로 구현됩니다. 즉 EMA200이 “지금 매매해도 되는 방향인가”를 걸러주는 큰 문이라면, EMA20/50 크로스는 “지금이 그 타이밍인가”를 알려주는 트리거 역할을 합니다.
왜 EMA만 규칙으로 쓰나? 이동평균 크로스는 해석이 직관적이고 검증된 지 오래된 로직이라, 사람이 규칙으로 명시해도 신뢰할 수 있다는 판단 때문입니다. 반면 아래 6개 지표는 서로 간의 상호작용(예: RSI가 높은데 OBV는 떨어지는 다이버전스 같은 복합 패턴)이 사람이 규칙으로 일일이 정의하기엔 너무 많은 조합을 가지므로, 모델에게 위임합니다.
3. ADX — 추세강도, FreqAI 피처
**ADX(Average Directional Index)**는 추세가 “얼마나 강한지”를 0~100 사이 숫자로 나타내는 지표입니다. 주의할 점은 ADX는 방향(상승/하락)을 알려주지 않고 강도만 알려준다는 것입니다.
- ADX 25 이상 → 뚜렷한 추세 존재
- ADX 20 이하 → 추세 없이 횡보
이 전략에서의 사용법: “ADX가 몇 이상이면 진입” 같은 규칙은 코드에 없습니다. 대신 ADX 값 자체를 FreqAI 모델의 입력 피처로 넘깁니다. 예를 들어 “골든크로스가 떴는데 ADX가 낮은 상황”과 “골든크로스 + ADX가 높은 상황”에서 실제로 수익이 났는지 안 났는지를 모델이 과거 데이터에서 학습해서, 그 관계의 가중치를 스스로 정합니다.
4. MACD — 모멘텀, FreqAI 피처
**MACD(Moving Average Convergence Divergence)**는 단기 EMA와 장기 EMA의 차이를 이용해 모멘텀(추세의 가속/감속)을 측정하는 지표입니다. MACD선, 시그널선, 히스토그램 세 가지 요소로 구성됩니다.
- MACD선이 시그널선을 상향 돌파 → 모멘텀 강화(매수 신호로도 흔히 쓰임)
- 히스토그램이 줄어든다 → 추세가 힘을 잃고 있다는 신호
이 전략에서의 사용법: MACD도 흔히 단독으로 매매 신호에 쓰이는 지표지만, 이 전략에서는 규칙이 아니라 피처입니다. MACD 값(혹은 MACD선, 시그널선, 히스토그램 각각)을 모델에 던져주면, 모델이 “지금 같은 EMA 크로스 상황에서 MACD 모멘텀까지 겹쳤을 때 실제 결과가 어땠는지”를 통계적으로 학습합니다.
5. RSI — 과매수/과매도, FreqAI 피처
**RSI(Relative Strength Index)**는 일정 기간 동안의 상승폭과 하락폭을 비교해 0~100 사이로 표현하는 지표입니다.
- RSI 70 이상 → 과매수 구간(단기 조정 가능성)
- RSI 30 이하 → 과매도 구간(단기 반등 가능성)
이 전략에서의 사용법: “RSI 70 넘으면 매도” 같은 전통적인 규칙을 쓰지 않습니다. 대신 RSI 수치 자체를 피처로 넣어, 모델이 “EMA 골든크로스가 났지만 RSI가 이미 과매수 구간”인 상황을 스스로 나쁜 신호로 학습할 수 있게 열어둡니다. 규칙으로 못박지 않았기 때문에, 시장 상황에 따라 RSI 70이 항상 위험한 게 아니라는 뉘앙스까지 모델이 데이터에서 찾아낼 여지가 생깁니다.
6. ATR — 변동성, FreqAI 피처
**ATR(Average True Range)**는 캔들의 고가-저가 범위를 평균 내어 변동성의 크기를 절대값(가격 단위)으로 알려주는 지표입니다. 방향성은 없고 오직 “지금 시장이 얼마나 출렁이는가”만 나타냅니다.
- ATR이 크다 → 변동성 높음(리스크·기회 둘 다 큼)
- ATR이 작다 → 변동성 낮음(횡보 국면)
이 전략에서의 사용법: 손절/익절 폭을 ATR 배수로 정하는 것이 가장 흔한 활용법이지만, 여기서는 그런 규칙이 아니라 모델 입력값으로만 씁니다. 모델은 “변동성이 큰 구간의 골든크로스”와 “변동성이 작은 구간의 골든크로스”가 서로 다른 성공률을 갖는다는 패턴을 학습에 반영할 수 있습니다.
7. OBV & Volume — 거래량, FreqAI 피처 + 진입/청산 가드
**OBV(On-Balance Volume)**는 가격이 오른 날의 거래량은 더하고, 내린 날의 거래량은 빼는 방식으로 누적한 지표입니다. 가격은 아직 안 움직였는데 거래량이 먼저 방향을 만드는 다이버전스를 포착하는 데 주로 쓰입니다.
**Volume(거래량)**은 그 자체로 해당 캔들에서 얼마나 많은 매매가 일어났는지를 나타내는 원시 데이터입니다.
이 전략에서의 사용법: 이 항목은 다른 지표들과 다르게 이중으로 쓰입니다.
- FreqAI 피처: OBV와 Volume 둘 다 그대로 모델에 넘겨서, 거래량 흐름과 가격 흐름 사이의 관계를 모델이 학습하도록 합니다.
- 진입/청산 가드(guard): 이건 규칙입니다. “Volume이 0보다 커야 한다”는 조건은 매매 판단을 위한 신호라기보다, 거래량이 아예 없는(즉 유동성이 없거나 데이터 오류인) 캔들에서는 진입도 청산도 하지 않겠다는 안전장치입니다. 시그널을 만드는 규칙이 아니라 “이상 상황을 걸러내는” 방어 로직에 가깝습니다.
8. VWAP — 평균가격, FreqAI 피처
**VWAP(Volume Weighted Average Price)**은 거래량을 가중치로 삼아 계산한 평균 체결가입니다. 단순 평균가와 달리 “거래량이 많았던 가격대”에 더 큰 의미를 부여합니다. 기관 트레이더들이 “내가 시장 평균보다 좋은 가격에 체결했는가”를 판단하는 기준으로 많이 씁니다.
- 가격이 VWAP 위 → 평균적으로 시장 참여자들보다 비싸게 사고 있는 흐름
- 가격이 VWAP 아래 → 평균보다 싸게 거래되는 흐름
이 전략에서의 사용법: VWAP 대비 현재가 위치를 규칙으로 쓰지 않고, 값 자체(혹은 가격과의 괴리) 를 피처로 제공합니다. 모델이 “골든크로스가 VWAP 위에서 발생했는지, 아래에서 발생했는지”에 따라 신뢰도를 다르게 학습할 수 있습니다.
정리: 왜 이렇게 나눴을까
| 구분 | 특징 | 이 전략에서 해당하는 지표 |
|---|---|---|
| 직접 규칙 | 해석이 명확하고 단독으로도 검증된 로직. 사람이 조건을 통제하고 싶을 때 | EMA200, EMA20/EMA50, Volume>0 가드 |
| FreqAI 피처 | 단독 신호로는 애매하거나, 다른 지표와의 복합적 상호작용이 중요한 경우 | ADX, MACD, RSI, ATR, OBV, VWAP |
핵심은 **“이 지표의 의미를 사람이 확신 있게 규칙화할 수 있는가”**입니다. EMA 추세 판단은 오랜 기간 검증되어 사람이 “이 조건이면 이렇게 하라”고 못박아도 안전하지만, 나머지 6개 지표는 시장 상황과 다른 지표들과의 조합에 따라 의미가 달라지기 때문에, 그 조합을 찾는 일 자체를 모델에게 맡긴 것입니다.
결과적으로 이 전략은 “사람이 큰 방향(장기·단기 추세)을 정하고, 그 방향이 맞을 때 실제로 진입할 가치가 있는지는 모델이 여러 보조지표를 종합해 판단한다”는 하이브리드 구조를 갖습니다.