SONAR
주가의 평균 변화율 추이를 분석하여 상승 및 하락 강도를 측정하여 사용하는 기술적 지표입니다.
- 현재 지수이동평균과 과거이동평균의 차를 계산
- SONAR = EMA(Close, n) - EMA(Close, n)_K일 전
- Close : 종가
- n: EMA의 기간을 일반적으로 9일
- k: 현재의 이동지수평균과 비교하기 위한 과거 이동평균의 기간으로 일반적으로 6일
- 신호선 = SMA(SONAR, m)
- m: SONAR의 이동평균 기간으로 일반적으로 5일
pandas_ta에서는 SONAR를 직접 계산할 수 있는 함수를 제공하지 않지만 pandas_ta.ema() 함수를 적용하여 UDF를 작성할 수 있습니다.
def sonar(series, n=9, k=6, m=5): ema_n=ta.ema(series, length=n) ema_n_k=ema_n.shift(k) sonar_line=ema_n - ema_n_k singal_line=ta.ema(sonar_line, length=m) return pd.DataFrame({"SONAR": sonar_line, "SIGNAL": singal_line})
import numpy as np import pandas as pd import matplotlib.pyplot as plt import pandas_ta as ta import FinanceDataReader as fdr import matplotlib.pyplot as plt import mplfinance as mpf st=pd.Timestamp(2024,9, 1) et=pd.Timestamp(2025, 5,8) trgnme="000660" trg=fdr.DataReader(trgnme, st, et)[["Open", "High", "Low", "Close", "Volume"]] sr=sonar(trg.Close) sr.tail(3)
SONAR | SIGNAL | |
---|---|---|
Date | ||
2025-05-02 | 2983.567678 | 1549.373931 |
2025-05-07 | 4886.854142 | 2661.867335 |
2025-05-08 | 5089.483314 | 3471.072661 |
위 결과를 시각화합니다.
adf=[mpf.make_addplot(trg.ta.ema(10), panel=0, color="r", label="ema_10"), mpf.make_addplot(sr.SONAR, panel=1, color="g",label="sonar"), mpf.make_addplot(sr.SIGNAL, panel=1, color="r", label="signal")] f, axs=mpf.plot(trg, type="candle", style="yahoo", volume=False, addplot=adf, returnfig=True, figsize=(12,5)) axs[0].legend(loc="upper left") axs[2].axhline(0, color="b", ls="--") axs[2].legend(loc="upper left") plt.show()
상승인 경우 sonar > signal 경향을 보입니다. 또한 0선을 경계로 sonar의 영역과 주가의 경향이 다르게 나타납니다. 다음과 같이 정리 할 수 있습니다.
- SONAR > 0 : 상승모멘트
- SONAR < 0 : 하강모멘트
- SONAR 상승: 상승모멘트 강화
- SONAR 하락: 상승모멘트 약화를 시사하며 추세 전환가능성 암시
- SONAR가 신호를 상향돌파(매수신호): 상승모멘텀이 평균대비 강해지고 있다는 신호
- SONAR가 신호를 하향돌파(매도신호): 하락모멘텀이 평균대비 강해지고 있다는 신호
- 다이버전스: 가격 움직임과 SONAR 지표 간의 다이버전스는 추세 반전의 잠재적인 초기 신호가 될 수 있습니다. 예를 들어, 가격은 신고점을 경신하는데 SONAR는 이전 상승 시보다 낮은 고점을 형성한다면 약세 다이버전스로 해석할 수 있습니다.
댓글
댓글 쓰기