기본 콘텐츠로 건너뛰기

pandas_ta를 적용한 통계적 인덱스 지표

[stock]SONAR

SONAR

주가의 평균 변화율 추이를 분석하여 상승 및 하락 강도를 측정하여 사용하는 기술적 지표입니다.

  1. 현재 지수이동평균과 과거이동평균의 차를 계산
    • SONAR = EMA(Close, n) - EMA(Close, n)_K일 전
    • Close : 종가
    • n: EMA의 기간을 일반적으로 9일
    • k: 현재의 이동지수평균과 비교하기 위한 과거 이동평균의 기간으로 일반적으로 6일
  2. 신호선 = 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는 이전 상승 시보다 낮은 고점을 형성한다면 약세 다이버전스로 해석할 수 있습니다.

댓글