일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Design Patterns
- 볼린저 밴드
- front-end
- LLM
- 추세 기반 지표
- pyQT
- 행동패턴
- 소프트웨어공학
- Flutter
- 티스토리챌린지
- ai
- behavioral pattern
- Python
- 어댑터 패턴
- ccxt
- MACD
- 플러터
- 비트코인
- 디자인 패턴
- 구조패턴
- adx
- frontend
- RSI
- 변동성 기반 지표
- 오블완
- next.js
- design pattern
- 디자인패턴
- pyqt6
- 모멘텀 기반 지표
변혁적인 삶
[AI | 데이터분석] 2. 추세 기반 지표(MA, MACD, ADX) 본문
📊 [AI | 데이터분석] 2. 추세 기반 지표(MA, MACD, ADX)
목차
- 1. 이동평균선 (MA)
- 2. MACD
- 3. ADX
1. 이동평균선 (Moving Average, MA)
이동평균선(MA)은 가격의 평균 값을 계산하여 시장의 전반적인 추세를 확인하는 데 사용됩니다.
두 가지 주요 유형인 단순 이동평균선(SMA)과 지수 이동평균선(EMA)이 있습니다.
1.1 단순 이동평균선 (SMA)
SMA는 지정된 기간 동안의 평균 값을 단순히 계산합니다.
예를 들어, 20일간의 SMA는 지난 20일 동안의 종가 평균입니다.
# SMA 계산
df["sma_20"] = df["close"].rolling(window=20).mean()
# SMA 출력 예시
print(df[["close", "sma_20"]].tail())
출력 예시:
close sma_20
95 57300.0 57250.5
96 57350.0 57260.3
97 57400.0 57280.0
98 57320.0 57290.3
99 57300.0 57310.0
1.2 지수 이동평균선 (EMA)
지수 이동평균선(EMA, Exponential Moving Average)은 최근 데이터에 더 많은 가중치를 부여하여 이동평균선을 계산하는 방법입니다.
단순 이동평균선(SMA)은 모든 데이터에 동일한 가중치를 부여하는 반면, EMA는 가중 변수(Weighting Factor)를 사용해 최근 데이터의 영향을 더 크게 반영합니다.
어차피 저희는 pandas의 ewm함수를 이용하여 EMA를 간편히 계산하기에 깊게 설명할 필요는 없으나, 이해를 돕기 위해 EMA 계산 과정을 설명드리겠습니다.
1.2.1 EMA 계산 과정
1. 가중 변수 계산
- EMA는 일정 기간을 기준으로 가중 변수를 계산합니다.
- 가중 변수는 다음 공식으로 정의됩니다.
- 예를 들어, 20일 EMA의 가중 변수는 다음과 같습니다.
2. EMA 초기값 설정
- EMA는 계산을 시작하기 위해 초기값을 설정해야 합니다.
- 일반적으로 첫 번째 EMA 값은 단순 이동평균(SMA)로 시작합니다:
EMA 초기값 = 첫 N일의 SMA 값
3.EMA 업데이트
- 이후 값은 다음 공식을 통해 점진적으로 계산됩니다:
- : 현재 EMA 값
- 가격ₜ: 현재 종가
- EMAₜ-1: 이전 EMA 값
- 가중 변수: 최근 값에 부여할 가중치
1.2.2 계산 예시
close 데이터(종가)가 아래와 같다고 가정
Day Close
1 100
2 102
3 104
4 106
5 108
...
초기값 (첫 20일 SMA): SMA = (100 + 102 + ... + 118) / 20
Day 21 이후 EMA 계산:
EMA_21 = Close_21 × 0.0952 + EMA_20 × (1 - 0.0952)
EMA_22 = Close_22 × 0.0952 + EMA_21 × (1 - 0.0952)
아래 코드는 pandas의 ewm 함수와 mean 함수를 이용하여 20일 EMA를 계산하는 코드입니다.
# EMA 계산
df["ema_20"] = df["close"].ewm(span=20, adjust=False).mean()
# EMA 출력 예시
print(df[["close", "ema_20"]].tail())
출력 예시:
close ema_20
95 57300.0 57255.2
96 57350.0 57265.8
97 57400.0 57285.4
98 57320.0 57292.8
99 57300.0 57296.5
2. MACD (Moving Average Convergence Divergence)
MACD는 이동평균선(MA)을 활용하여 시장의 추세와 모멘텀을 동시에 분석할 수 있는 대표적인 지표입니다.
특히 단기(빠른) 이동평균선과 장기(느린) 이동평균선 간의 차이를 활용하며, 추가로 Signal선을 계산하여 매매 신호를 포착합니다.
2.1 MACD 공식
MACD Line (MACD 선):
- MACD는 기본적으로 단기 12일 EMA(12)와 장기 26일 EMA(26)를 사용합니다.
MACD 선 = EMA(단기) - EMA(장기)
Signal Line (Signal 선):
- MACD선의 9일 지수 이동 평균선을 추가로 계산하여 매매 신호를 생성합니다.
Signal 선 = EMA(9)(MACD 선)
MACD Histogram (히스토그램):
- MACD 선과 Signal 선 간의 차이를 나타내는 막대그래프.
히스토그램 = MACD 선 - Signal 선
import pandas as pd
# 샘플 데이터
data = {"close": [100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120]}
df = pd.DataFrame(data)
# 단기 EMA(12)와 장기 EMA(26) 계산
df["ema_12"] = df["close"].ewm(span=12, adjust=False).mean()
df["ema_26"] = df["close"].ewm(span=26, adjust=False).mean()
# MACD 선 계산
df["macd"] = df["ema_12"] - df["ema_26"]
# Signal 선 계산
df["signal"] = df["macd"].ewm(span=9, adjust=False).mean()
# 히스토그램 계산
df["histogram"] = df["macd"] - df["signal"]
# 결과 출력
print(df)
출력 예시:
close ema_12 ema_26 macd signal histogram
0 100 100.000000 100.000000 0.000000 0.000000 0.000000
1 102 100.307692 100.148148 0.159544 0.031909 0.127635
2 104 100.801120 100.438243 0.362877 0.092556 0.270320
3 106 101.457281 100.856708 0.600573 0.179606 0.420967
4 108 102.257953 101.393247 0.864706 0.296113 0.568593
5 110 103.187823 102.037267 1.150556 0.435594 0.714962
6 112 104.234994 102.778938 1.456056 0.592113 0.863943
7 114 105.390898 103.608232 1.782666 0.760460 1.022206
8 116 106.648059 104.515942 2.132117 0.936319 1.195798
9 118 108.000077 105.493712 2.506365 1.116091 1.390274
10 120 109.441470 106.533990 2.907480 1.296603 1.610877
2.2 MACD 해석
- MACD 선과 Signal 선의 교차
- 골든 크로스: MACD 선이 Signal 선을 상향 돌파 → 매수 신호.
- 데드 크로스: MACD 선이 Signal 선을 하향 돌파 → 매도 신호.
- 히스토그램
- 히스토그램이 양수(+)이면 상승 모멘텀이 강함.
- 히스토그램이 음수(-)이면 하락 모멘텀이 강함.
- 히스토그램이 0에 가까워질수록 추세 전환 가능성을 나타냄.
3. ADX (Average Directional Index)
3.1 ADX의 구성 요소
ADX는 시장의 추세 강도를 측정하는 지표로, 다음과 같은 구성 요소를 포함합니다:
- +DI (Positive Directional Index): 상승 추세 강도를 나타냅니다. 특정 기간 동안의 고점 변화량을 기반으로 계산됩니다.
- -DI (Negative Directional Index): 하락 추세 강도를 나타냅니다. 특정 기간 동안의 저점 변화량을 기반으로 계산됩니다.
- ADX (Average Directional Index): +DI와 -DI 간의 차이를 활용해 추세의 강도를 측정하며, 0~100 사이의 값을 가집니다.
3.2 ADX 계산 과정
ADX는 다음 단계를 통해 계산됩니다:
- True Range (TR): 현재 고점, 저점, 그리고 이전 종가 간의 최대 범위를 계산합니다.
TR = max(고점 - 저점, |고점 - 이전 종가|, |저점 - 이전 종가|)
- +DM과 -DM: 고점과 저점의 변화량을 계산하여 양수 값만 사용합니다.
+DM = max(현재 고점 - 이전 고점, 0)
-DM = max(이전 저점 - 현재 저점, 0)
- +DI와 -DI 계산: 특정 기간 동안 +DM과 -DM의 합을 TR의 합으로 나눠 계산합니다.
+DI = (+DM 합 / TR 합) × 100
-DI = (-DM 합 / TR 합) × 100
- DX (Directional Movement Index): +DI와 -DI의 차이를 기반으로 DX를 계산합니다.
DX = |(+DI - -DI)| / (+DI + -DI) × 100
- ADX 계산: 특정 기간 동안의 DX 값을 평균 내어 ADX를 계산합니다.
ADX = n일 동안의 DX의 이동평균
3.3 Python 코드로 ADX 계산
Python의 talib
라이브러리를 활용하면 ADX를 간단히 계산할 수 있습니다:
import pandas as pd
import talib
# 샘플 데이터
data = {
"high": [120, 122, 121, 124, 126, 125, 127, 130, 129, 131],
"low": [118, 119, 120, 122, 124, 123, 125, 128, 127, 130],
"close": [119, 121, 120, 123, 125, 124, 126, 129, 128, 130],
}
df = pd.DataFrame(data)
# ADX 계산 (14일 기준)
df["adx"] = talib.ADX(df["high"], df["low"], df["close"], timeperiod=14)
# +DI와 -DI 계산
df["+di"] = talib.PLUS_DI(df["high"], df["low"], df["close"], timeperiod=14)
df["-di"] = talib.MINUS_DI(df["high"], df["low"], df["close"], timeperiod=14)
print(df)
3.4 ADX 출력 예시
high low close adx +di -di
0 120 118 119 NaN NaN NaN
1 122 119 121 NaN NaN NaN
2 121 120 120 NaN NaN NaN
3 124 122 123 NaN NaN NaN
4 126 124 125 NaN NaN NaN
5 125 123 124 NaN NaN NaN
6 127 125 126 NaN NaN NaN
7 130 128 129 NaN NaN NaN
8 129 127 128 NaN NaN NaN
9 131 130 130 23.4567 30.1234 15.6789
3.5 ADX 해석
- ADX 값이 20 이하: 약한 추세. 시장이 횡보 상태일 가능성이 높음.
- ADX 값이 20~40: 강한 추세. 상승 또는 하락 방향이 명확.
- ADX 값이 40 이상: 매우 강한 추세. 극단적인 상승 또는 하락.
마무리
2부에서는 추세 기반 지표인 이동평균선(MA), MACD, ADX를 이해하고, 계산하는 방법을 배웠습니다. 이러한 지표는 시장의 흐름을 파악하는 데 중요한 역할을 합니다. 다음 3부에서는 모멘텀 기반 지표를 다뤄보겠습니다. 🚀
'AI' 카테고리의 다른 글
[AI | 데이터분석] 4. 변동성 및 거래량 지표(볼린저 밴드, ATR, Volume Oscillator, OBV) (0) | 2024.11.21 |
---|---|
[AI | 데이터분석] 3. 모멘텀 기반 지표(RSI, Stochastic Oscillator, CCI) (1) | 2024.11.20 |
[AI | 데이터분석] 1. 코인 자동 매매 프로그램을 위한 데이터 분석의 기본 (0) | 2024.11.18 |
[AI | 데이터분석] CCXT를 이용한 코인 데이터 수집하기 (1) | 2024.11.14 |
[OpenAI] Chat GPT-4o 무료 사용법 (2) | 2024.10.07 |