기본 콘텐츠로 건너뛰기

4월, 2025의 게시물 표시

[stock]ADL과 Chaikin Oscillator

[stock]ADL과 Chaikin Oscillator

ADL과 Chaikin Oscillator ADL(Accumulation/Distribution Line) Chaikin Oscillator ADL(Accumulation/Distribution Line) ADL(누적/분산선)은 거래량 기반의 기술적 지표로 특정기간 동안 가격 변동과 거래량을 분석하여 자금의 흐름(매수, 매도 압력)을 측정하는 것으로 주식, 자산이 매집(Accumulation) 또는 분산(Distribution)되는지를 파악하는데 도움이 됩니다. 매집: 종가가 해당 기간의 고가에 근접할수록 매수 압력이 강하고, 거래량이 많다면 자금의 유입(매집)되고 있다고 해석할 수 있음 분산: 종가가 해당기간의 저가에 근접할수록 매도 압력이 강하고, 거래량이 많다면 자금 유출(분산)이 되고 있다고 해석할 수 있음 Money Flow Multiplier(MFM) 계산: 가격 범위내에서 종가의 위치 MFM=(CloseLow)(HIghClose)HIghLow +1에 근접: 종가가 고가에 근접 -1에 근접: 종가가 저가에 근접 Money FLow Volume(MFV) 계산: 자금 흐름의 크기를 나타냄 MFV = MFM × Volume ADL: MFV의 누적합 추세확인 가격상승, ADL 상승 : 상승 추세가 매수세에 의해 지원되는 것으로 추세 지속 암시 가격하락, ADL 하락: 하락추세를 매도세에 의해 지지되므로 추세 지속 암시 디버전스(Divergence): 가격과 ADL이 반대 방향으로 움직임. 추세 전환 신호일 수 있음 상승 디버전스: 가격 하락, ADL 상승 현상으로 매도세가 약해지고 매수세 유입 가능성 시사 하락 디버...

[stock]일목균형표(Ichmoku)

일목균형표(Ichmoku) 매수와 매도의 균형을 시각적으로 보여주고, 시간 개념을 도입하여 추세 전환 시점을 예측하는 데 도움을 줍니다. 구성요소 전환선 (Conversion Line): (최고가 + 최저가) / 2 (최근 9일 기준) 최근 9일 동안 최고와 최저의 평균값 단기 추세방향을 나타내며 주가가 단기적인 균형점에서 얼마나 벗어났는지 나타냄 기준선 (Base Line): (최고가 + 최저가) / 2 (최근 26일 기준) 최근 26일 동안의 최고와 최저의 평균 중기 추세 방향을 나타내며 시장의 중심적인 균형가격으로 해석 선행스팬 1 (Leading Span A): (전환선 + 기준선) / 2 (26일 후행 이동) 미래의 지지 또는 저항 영역의 상단을 나타냄 선행스팬 2 (Leading Span B): (최고가 + 최저가) / 2 (최근 52일 기준, 26일 후행 이동) 미래의 지지 또는 저항 영역의 상단을 나타냄 후행스팬 (Lagging Span): 당일 종가 (26일 선행 이동) 당일종사를 26일 전의 위치에 표시 현재의 주가가 26일 전의 주가와 비교하여 강세 또는 약세를 판단 구름대 선행스팬1과 선행스팬2 사이의 영역을 색칠하여 나타냄 미래의 강력한 지지 또는 저항 영역으로 해석, 구름대의 두께는 지지/저항의 강도를 나타냄 양운(선행스팬1> 선행스팬2): 상승추세의 가능성 음운(선행스팬1< 선행스팬2): 하락추세의 가능성 해석 전환선과 시준선 전환선 > 기준선 : 단기추세 > 중기추세 → 상승, 매수신호로 해석할 수 있음 전환선 전환선이 기준선을 상향돌파(골든 크로스): 단기가 중기를 상향돌파로 상승추세로 전환 가능성 시사, 강력한 매수신호로 해석할 수 있음 전환선이 기준선을 하향돌파(데드크로스): 단기가 중기를 하향돌파로 하락추세로 전환가능성 시사, 강력한 매도신호로 해석할 수 있음 상승추세에서 전환선과 기준선은 지지선으로 역할. 강한 상승시 전환선이...

[stock]CCI(Commodity CHannel Index)

CCI(Commodity CHannel Index) 과매수, 과매도 상태를 식별하고 추세의 방향과 강도를 측정. 추세추종형 모멘텀 지표 1.TP=High+Low+Close32.SMA(TP, n)=i=1nTPin3.MD=i=1n|TPiSMA(TP, n)i|N4.CCI=TPSMA(TP, n)0.015MD 위 식에서 0.015는 CCI의 대부분 값이 -100 ~ +100 사이에서 움직이기 위해 조정하는 인자 CCI > 100: 가격이 평균보다 매우 높음 즉, 과매수상태로 매도신호로 해석할 수 있음, 그러나 강한 상승추세의 시작일 수 있음(다른 지표로 관찰?) CCI < 100: 가격이 평균보다 매우 낮음 즉, 과매도상태로 매수신호로 해석할 수 있음, 그러나 강한 하락추세의 시작일 수 있음(다른 지표로 관찰?) 0선 상향돌파는 가격이 평균 보다 낮다가 높은 방향으로 이동하므로 추세전환(약세 → 강세) 가능성 시사 100선 하향돌파는 가격이 평균 보다 높다가 낮은 방향으로 이동하므로 추세전환(강세 → 약세) 가능성 시사 다이버전스: 가격과 CCI 움직임이 반대 방향으로 나타나는 현상 상승(강세)디버전스: 가격의 저점은 하향, CCI의 저점 상향 → 약세에서 강세로 추세전환 가능성 시사 하락(약세)디버전스: 가격의 고점은 상향, CCI의 고점 하향 → 강세에서 약세로 추세전환 가능성 시사 CCI와 이동평균선, MACDm RSI와 함께 고려 주의 변동성이 ...

[stoock]모멘텀지표(RSI, MOM, ROC)

모멘텀지표(RSI, MOM, ROC) RSI (Relative Strength Index, 상대 강도 지수) 모멘텀(momentum) RSI (Relative Strength Index, 상대 강도 지수) 금융상품의 가격변동폭과 속도를 측정하여 과매수 또는 과매도 상태를 파악하는 모멘텀 지표 입니다. 특정기간에서의 가격이 상승한 날의 상승폭 합계와 하락한 날의 하락폭의 합계를 비교하여 상대적인 강도를 나타냄 0~100 사이의 값으로 표현 RSI> 70 → 과매수 상태: 조만간 가격이 하락할 가능성을 암시 RSI< 30 → 과매도 상태: 조만간 가격이 상승할 가능성을 시사 강한 추세가 지속될 때는 과매수/ 과매도 구간이 오래 지속될 수 있음 RSI = 50: 상승세와 하락세의 균형 RSI: 50 이상을 유지 → 상승추세 RSI: 50 이하를 유지 → 하락추세 50을 기준으로 RSI값이 증가할수록 상승 추세 강도 증가, 낮을수록 하락 추세 강도 증가 50을 상향 돌파 : 매수신호 50을 하향 돌파: 매도신호 diverence: 가격 움직임과 RSI 움직임이 반대되는 현상으로 추세전환의 강력한 신호로 고려할 수 있지만 의심과 함께 다른 지표와 비교해야 함 상승 다이버전스: 가격 하락, RSI 증가, 반전가능성으로 매수신호로 해석할 수 있음 하락 다이버전스: 가격 상승, RSI 하락, 매도신호로 해석 가능 실패스윙(Failure Swing): 과매도, 과매수 구간에서 RSI가 이전 저점 또는 고점을 넘지 못하고 방향을 반전하는 패턴으로 추세전환의 신호로 해석할 수 있음 $$\begin{align}&\begin{aligned}\text{가격상승}\;& \Delta U=C_t -C_{t-1},\; \Delta D = ...

[stock]StDev(표준편차)

StDev(표준편차) 주가의 변동성 정도를 측정하는 지표로 표준편차 개념을 차용하여 특정기간 동안의 주가들이 평균가격으로부터 얼마나 흩어져 있는지를 나타냅니다. 핵심 개념: 변동성 측정: STDEV는 시장의 변동성을 수치화합니다. 높은 STDEV 값은 주가가 평균 가격으로부터 크게 벗어남 → 변동성 증가 낮은 STDEV 값은 주가가 평균 가격 주변에서 비교적 안정적 움직임 → 변동성이 작음 평균으로부터의 편차: STDEV는 각 주가가 설정된 기간의 평균 주가와 얼마나 차이가 나는지를 계산하고, 이 차이들의 평균적인 크기를 나타냅니다. mean=i=1npriceinDeviationi=priceimeanDeviationi2=(priceimean)2Variance=i=1n(priceimean)2n1STDEV=Variance 활용: 변동성 판단 STDEV ↑ → 시장의 불확실성이 크거나 급격한 가격 변동이 예상 STDEV ↓ → 시장이 안정적이라고 해석할 수 있음 추세 강도 확인 추세가 진행될 때 STDEV 값이 상승하면 추세의 강도가 강해짐을 고려 추세가 진행될 때 STDEV 값이 하락하면 추세의 약화를 암시 매매 시점 포착: 낮은 STDEV 후 급격한 상승: 장기간 횡보 후 STDEV가 급격히 상승하는 것은 가격 변동성이 커지며 새로운 추세가 시작될 수 있음을 시사할 수 있습니다. 높은 STDEV 후 하락: ...

[Matplotlib]matplotlib.dates 모듈

matplotlib.dates 모듈을 사용한 날짜 수정 import matplotlib.pyplot as plt import matplotlib.dates as mpl_dates 형식: mpl_dates.DateFormatter('%y%m%d') '%Y-%m-%d': YYYY-MM-DD 형식 '%Y/%m/%d': YYYY/MM/DD 형식 '%b %d, %Y': Apr 15, 2025 형식 '%y-%m-%d %H:%M:%S': yy-mm-dd HH:MM:SS 형식 축의 눈금 간격을 조정하기 위해 이 모듈이 Locator 클레스를 함께 사용합니다. DayLocator(): 특정 일 간격으로 눈금을 표시합니다. WeekdayLocator(): 특정 요일마다 눈금을 표시합니다. MonthLocator(): 특정 월마다 눈금을 표시합니다. YearLocator(): 특정 연도마다 눈금을 표시합니다. AutoDateLocator(): 자동으로 최적의 눈금 간격을 설정합니다. 다음은 일정기간의 주가 data에 대해 그래프를 작성한 것으로 x축을 날짜 표시를 첨가한 것입니다. plt.figure(figsize=(6, 3)) plt.plot(df["Close"]) ax=plt.gca() ax.xaxis.set_major_locator(mpl_dates.AutoDateLocator()) ax.xaxis.set_major_formatter(mpl_dates.DateFormatter('%y/%m/%d')) plt.xticks(rotation=45) plt.show() gac() 함수는 현재 활성화된 Axes 객체를 반환합니다. 즉, 그래프내의 데이터를 플롯하는 영역을 나타냅니다. 그러므로 ax=plt.gca()는 작성된 플롯의 축 객체를 ax에 할당한 것으로 ax.xaxis.~()는 그 풀롯의 x축을 조...

[stock]볼린져밴드(Bolinger Band, BB), Band%B,bandwidth

볼린져밴드(Bolinger Band, BB)와 Band%B 볼린져밴드(Bolinger Band, BB) Band%B bandwidth 볼린져밴드(Bolinger Band, BB) 볼린저 밴드(BB, Bollinger Bands)는 시장 변동성을 평가하고 잠재적인 과매수와 과매도 조건을 파악하는 데 사용됩니다. 볼린저 밴드는 가격 차트에 표시되는 세 개의 선으로 구성되며, 이는 단순 이동 평균(SMA)과 SMA 위아래로 두 배의 표준 편차를 포함합니다. 밴드는 시장 변동성에 따라 확장되고 수축되어 트레이더에게 잠재적 가격 움직임에 대한 통찰력을 제공합니다. 구성 요소: 볼린저 밴드는 일반적으로 세 개의 선으로 구성됩니다. 중심선 (Middle Band): 일반적으로 20일 단순이동평균선(SMA) 을 사용합니다. 이는 주가의 중기 추세를 나타냅니다. 상한선 (Upper Band): 중심선에서 위로 2 표준편차 떨어진 선입니다. 하한선 (Lower Band): 중심선에서 아래로 2 표준편차 떨어진 선입니다. 계산 방법: 중심선 (20일 SMA) 계산: 지난 20일 동안의 종가를 모두 더한 후 20으로 나눕니다. 표준편차 계산: 지난 20일 동안의 종가의 표준편차를 계산합니다. 표준편차는 가격 변동성의 정도를 나타냅니다. 상한선 계산: 중심선 + (표준편차 x 2) 하한선 계산: 중심선 - (표준편차 x 2) 볼린저 벤드는 주가가 통계저긍로 상한선과 하한선 사이에서 움직일 가능성이 높다는 전제를 기반으로 합니다. 약 95%의 주가 움직임이 이 밴드내에서 발생한다고 알려 있습니다. 과매수 및 과매도 판단: 주가가 상한선에 근접하거나 상향 돌파 → 과매수 상태로 간주되어 매도 시점으로 볼 수 있습니다. 주가가 하한선에 근접하거나 하향 돌파 → 과매도 상태로 간주되어 매수 시점으로 볼 수 있습니다. 하지만 강한 추세가 형성될 때는 주가가 밴드 밖에...

[stock]평균방향성 지수(ADX)

평균방향성 지수(ADX, Average Directional Index) 평균방향성지수(ADX, Average Directional Index)는 추세의 강도를 측정하고 시장에서 잠재적인 진입 및 청산 지점을 파악하기 위해 사용하는 인기 있는 기술 분석 도구입니다. ADX 지표는 방향성을 고려하지 않는 추세 강도 지표로, 0에서 100까지 범위를 가집니다. 이 지표는 추세의 방향에 관계없이 추세의 강도를 정량화하기 위해 설계되었습니다. ADX는 긍정적 방향 지표(+DI)와 부정적 방향 지표(-DI)라는 두 가지 관련 지표를 기반으로합니다. 이 두 지표는 가격의 방향성 움직임을 측정하는 반면, ADX 자체는 추세의 강도를 평가합니다. 핵심 개념: ADX는 0에서 100 사이의 값을 가지며, 높은 값은 강한 추세를, 낮은 값은 약한 추세 또는 횡보 시장을 나타냅니다. ADX 자체는 추세의 방향을 나타내지 않습니다. +DI가 -DI보다 높으면 상승 추세의 강도를, -DI가 +DI보다 높으면 하락 추세의 강도를 나타냅니다. ADX 값이 상승하면 추세 강도가 증가하고 있음을 의미하며, 하락하면 추세 강도가 약화되고 있음을 의미합니다. 계산 방법: True Range (TR) 계산: 현재 고가와 저가의 차이, 현재 고가와 이전 종가의 절대값 차이, 현재 저가와 이전 종가의 절대값 차이 중 가장 큰 값을 TR로 설정합니다. Directional Movement (+DM, -DM) 계산: +DM: 현재 고가 - 이전 고가  (+DM < 0) or (+DM < -DM) → 0 -DM: 이전 저가 - 현재 저가  (-DM < 0) or (-DM < +DM) → 0 Directional Index (+DI, -DI) 계산: 일정 기간 (일반적으로 14일) 동안의 +DM, -DM 및 TR의 이동평균을 사용하여 계산합니다. $\begin{alig...

[Stock]Stochastic Oscillator

Stochastic Oscillator 기본 아이디어: 추세의 모멘텀은 가격자체보다 먼저 변함 특정기간의 종가가 그 기간의 가격변동폭(최고가와 최저가 사이) 내에서 상대적 위치 측정. 강한 상승추세의 경우 종가는 최고가 근처에 형성하는 경향을 보임 강한 하락 추세에서는 종가가 최저가 근처에 위치하는 경향을 보임 계산 Fast%K=CloseLow(n)High(n)Low(n)Slow%K=SMA(Fast%K,m)Fast%D=SMA(Slow%K,m)Slow%D=SMA(Slow%D,m)Close: 현재 종가Low(n), High(n): n기간동안의 최저가, 최고가일반적으로 n =14, m = 3 해석 과매도와 과매수 영역 일반적으로 > 80: 과매수 영역으로 간주할 수 있으며 가격이 단기적으로 너무 많이 상승하여 매도 압력 증가 일반적으로 < 20: 과매도 영역으로 간주할 수 있으며 가격이 단기적으로 너무 많이 하락하여 매수 압력 증가 그러나 강한 추세에서는 오랫동안 과매도, 과매수 영역에 머무를 수 있음을 고려하여야 함 매수와 매도 신호 과매도 영역에서 %K이 %D를 상위교차, 과매도 영역을 벗어난 직후 %K의 상위교차가 발생시 매수신호 과매수 영역에서 %K이 %D를 하위교차, 과매수 영역을 벗어난 직후 %K의하위교차가 발생시 매도신호 Divergence(벌어짐): 가격의 움직임과 스토캐스틱 오실레이터의 움직임이 반대 방향으로 나타나는 현상으로...

[stock] 지표계산을 위한 UDF

지표계산을 위한 UDF import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mpl_dates x축형식 지정을 위한 UDF def xaxis_form(n=20, format='%y/%m/%d', ax=False): locator = mpl_dates.DayLocator(interval=n) form = mpl_dates.DateFormatter(format) if ax==False: ax=plt.gca() ax.xaxis.set_major_locator(locator) ax.set_xticklabels([]) else: ax=plt.gca() ax.xaxis.set_major_locator(locator) ax.xaxis.set_major_formatter(form) plt.xticks(rotation=45) A ADL def calculate_adl(df, short_period=3, long_period=10): high = df['High'] low = df['Low'] close = df['Close'] volume = df['Volume'] result=pd.DataFrame() result["MFM"] = ((close - low) - (high - close)) / (high - low) result["MFV"] = result["MFM"] * volume result["ADL"] = result["MFV"].cumsum() short_ema=result["ADL"].ewm...

[matplotlib]candle chart 작성

candle chart 작성 주가이 변화추이를 나타내는 기본이 되는 봉차트(candle chart)를 작성하기 위한 사용자정의 함수(UDF)입니다. 특정한 날의 시가, 고가, 저가, 종가를 사용합니다. 시가와 종가를 기준으로 body, 고가와 시가-종가 중의 최대값을 사용하여 위쪽꼬리, 저가와 시가-종가의 최소값을 사용하여 아래쪽 꼬리를 작성합니다. x축의 날짜는 mpl_dates.DataFromatter() 함수를 적용하여 조정합니다. import numpy as np import pandas as pd import yfinance as yf import matplotlib.pyplot as plt import matplotlib.dates as mpl_dates st=pd.Timestamp(2025,1, 1) et=pd.Timestamp(2025, 4,15) trgnme="000660.KS" trg=yf.download(trgnme, st, et) trg.columns=[i[0] for i in trg.columns] trg.tail(3) Close High Low Open Volume Date 2025-04-10 183200.0 189900.0 180000.0 189700.0 7836984 2025-04-11 180800.0 181800.0 176100.0 177800.0 3223735 2025-04-14 180200.0 184400.0 178000.0 182900.0 ...

[Stock]Awesome Oscillator(AO) 지표

Awesome Oscillator(AO) Awesome Oscillator는 추세의 강도를 측정하고 잠재적인 반전 지점을 식별하는 데 사용되는 기술적 분석 지표입니다. AO는 일반적으로 추세를 확인하거나 반전 가능성을 예측하는 데 사용됩니다. 추세확인: 추세강도 측정하여 추세의 지속 또는 반전을 판단에 도움 가격과 오썸오실레이터 간의 다이버전스(벌어짐)은 잠재적인 추세 반전을 나타냄 오썸오실레이터가 제로라인을 교차하는 것은 추세 변화의 신호로 해석할 수 있음 상승추세에서 두개의 봉우리가 발생했을 때 두 번째 봉우리가 첫번째 봉우리보다 낮을 경우 매도신호로 해석할 수 있음 과거 데이터를 기반으로 하므로 미래 가격의 정확한 예측은 어렵고 모든 시장 상황에 적합하다고 할 수 없으므로 다른 지표와 함께 사용하여야 합니다. 계산 지정한 기간의 중간값에 대한 단기(5)와 장기(34) 평균값의 차입니다. median=High+Low2AO=SMA(Median, fast)SMA(Median, solw) 다음은 AO를 계산하기 위한 UDF입니다. #awesome oscillator 계산 def calculate_ao(data, short=5, long=34): high=data["High"] low=data["Low"] median_price=(high+low)/2 sma_short=median_price.rolling(window=short).mean() sma_long=median_price.rolling(window=long).mean() ao=sma_short - sma_long return ao def ao_color(data): awesome_color=[] #awesome_colo...