기본 콘텐츠로 건너뛰기

5월, 2025의 게시물 표시

[matplotlib]quiver()함수

[stock]SGDRegressor를 사용한 주가예측

SGDRegressor를 사용한 주가예측 Stochastic Gradient Descent(SGD) 알고리즘을 사용하여 선형모델을 학습시키는 클래스입니다. sklearn.linear_mode.SGDRegressor() 클래스를 사용하며 선형모델을 생성합니다. loss: 손실함수 지정, 'squaredd_error'(최소제곱오차, 기본값), 'huber', 'epsilon_insensitive', 'squared_epsilon_insensitive'를 지정할 수 있음. penalty : 과적합 방지를 위한 적용할 규제 지정 . ('l1', 'l2', 'elasticnet'). 기본값은 None (규제 없음)입니다. alpha: 규제 강도를 조절하는 상수이며 클수록 규제가 강해집니다. 기본값은 0.0001입니다. l1_ratio: Elastic Net 규제 사용 시 L1 규제와 L2 규제의 혼합 비율을 결정합니다 (0 ≤ l1_ratio ≤ 1). penalty='elasticnet'일 때만 사용됩니다. fit_intercept: 모델에 절편 (bias) 항을 추가할지 여부를 결정. 기본값은 True. max_iter: 학습 데이터에 대한 최대 반복 횟수 (epoch)를 지정. 기본값은 1000. tol: 학습 종료 조건으로, 손실 함수의 감소량이 이 값보다 작으면 학습을 중단. 기본값은 1e-3. learning_rate: 학습률 스케줄링 방법을 지정('constant', 'optimal', 'invscaling', 'adaptive'). 기본값은 'invscaling'. eta0: 초기 학습률을 지정 (learning_rate='constant' 또는 learning_rate='invscaling'일 때 사용). 기본값은 0.0...

[stock]선형회귀 모델에 의한 주가 예측

선형회귀 모델에 의한 주가 예측 sklearn.linear_model.LinearRegression() 클래스를 사용합니다. import numpy as np import pandas as pd import pandas_ta as ta import matplotlib.pyplot as plt import FinanceDataReader as fdr import matplotlib.pyplot as plt from scipy import stats from sklearn.model_selection import GridSearchCV from sklearn.linear_model import LinearRegression from sklearn.preprocessing import StandardScaler, MinMaxScaler from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, mean_squared_error, r2_score st=pd.Timestamp(2023, 1,1) et=pd.Timestamp(2025, 5,20) trgnme="000660" trg=fdr.DataReader(trgnme, st, et) df=trg[["Open", "High", "Low", "Close", "Volume"]] df.tail(1) Open High Low Close Volume Date 2025-05-20 202500 208000 201500 202000 ...

[stock] Support Vector Merchine(SVM)을 사용한 주가예측

Support Vector Merchine(SVM)을 사용한 주가예측 Support Vector Classifier Support Vector Regressor Support Vector Classifier SVM의 핵심 아이디어는 데이터를 가장 잘 분리하는 초평면(hyperplane) 을 찾는 것입니다. 단순히 데이터를 나누는 평면을 찾는 것이 아니라, 각 클래스에 가장 가까운 데이터 포인트(서포트 벡터)와의 거리를 최대화하는 초평면을 찾는 것을 목표로 합니다. 이 거리를 마진(margin) 이라고 하며, 마진을 최대화하는 것이 일반화 성능을 높이는 데 중요합니다. sklearn.svm.SVC (Support Vector Classifier) 클래스를 사용합니다. SVM은 강력하고 다재다능한 지도 학습 알고리즘으로, 선형 또는 비선형 데이터 분류 작업에 효과적으로 사용됩니다. C (규제 매개변수): 오류 항에 대한 페널티 강도를 조절 값이 작을수록 마진을 넓히는 것을 우선시하며, 훈련 데이터의 오류를 어느 정도 허용합니다 (과소적합 가능성 증가). 값이 클수록 훈련 데이터의 모든 포인트를 정확하게 분류하는 것을 우선시하며, 마진이 좁아질 수 있습니다 (과적합 가능성 증가). kernel (커널 유형): 사용할 커널 함수를 지정합니다. 'linear': 선형 커널. 선형적으로 분리 가능한 데이터에 적합합니다. 'poly': 다항식 커널. 비선형 결정 경계를 만들 수 있습니다. degree 파라미터로 다항식의 차수를 설정합니다. 'rbf': 방사 기저 함수(Radial Basis Function) 커널. 가장 널리 사용되는 비선형 커널 중 하나이며, 복잡한 결정 경계를 만들 수 있습니다. gamma 파라미터로 커널의 폭을 조절합니다. 'sigmoid': 시그모이드 커널. 일부 신경망 모델과 유사한 형태의 결정 경계를 만듭니다. gamma 및 coef0 파라미터를 ...

[stock]RandomForest를 사용한 주가 예측

RandomForest를 사용한 주가 예측 RandomForestClassifier RandomForestRegressor RandomForestClassifier 랜덤포레스트의 분류를 기법은 sklearn.ensemble.RandomForestClassifier() 를 사용합니다. n_estimators: 앙상블에 사용할 결정 트리의 개수. 일반적으로 클수록 모델의 성능이 향상되지만, 계산 비용도 증가. (기본값: 100) criterion: 각 트리의 노드를 분할하는 데 사용할 함수. 'gini' (지니 불순도) 또는 'entropy' (정보 이득)를 사용할 수 있습니다. (기본값: 'gini') max_depth: 각 트리의 최대 깊이를 제한합니다. 깊이가 깊어질수록 모델이 복잡해지고 과적합될 가능성이 높아집니다. None으로 설정하면 모든 리프 노드가 순수해질 때까지 또는 모든 리프 노드가 min_samples_split 샘플보다 적은 수의 샘플을 가질 때까지 트리가 확장됩니다. (기본값: None) min_samples_split: 노드를 분할하는 데 필요한 최소 샘플 수입니다. 이 값보다 적은 샘플을 가진 노드는 더 이상 분할되지 않습니다. (기본값: 2) min_samples_leaf: 리프 노드가 가져야 하는 최소 샘플 수입니다. 이 값보다 적은 샘플을 가진 리프 노드는 생성되지 않습니다. (기본값: 1) max_features: 각 노드에서 분할을 위해 고려할 특성의 최대 개수입니다. 'sqrt' (또는 'log2'): sqrt(n_features) 개의 특성을 사용합니다. 'log2': log2(n_features) 개의 특성을 사용합니다. None (또는 'auto'): 모든 특성을 사용합니다. 정수 값: 지정된 개수의 특성을 사용합니다. 부동 소수점 값 (0.0 ~ 1.0): 전체 특성 수의 해당 비율만큼 ...

[time series] 단위근(Unit root) 검정

단위근(Unit root) 단위근과 통계적 검정 방법 Augmented Dickey Fuller test (ADF Test) KPSS(Kwiatkowski-Phillips-Schmidt-Shin) test 단위근과 통계적 검정 방법 근은 방정식의 해이므로 단위근은 그 식의 해가 1이 됨을 의미합니다. 단위근은 시계열을 비정상적으로 만드는 특성입니다. 회귀모형인 회귀식 역시 방정식이므로 그 식의 해를 결정할 수 있습니다. 그러나 일반식과는 다르게 모형의 근(해)는 확률적 특성을 가진 추정치입니다. 예를 들어 간단한 자기회기모형은 AR(1)의 형태는 다음과 같습니다. $$y_t = \alpha y_{t-1} + \epsilon_t$$ α는 지귀회귀의 계수로 해 즉, 근이 됩니다. Y t ,Y t-1 : 시계열 데이터. 현재와 이전 값 ε t : 오차항으로 백색잡음입니다. α에 따라 다음과 같이 설명할 수 있습니다. |α|<1이라면, 이 시계열은 정상성(stationarity)을 가집니다. 정상성을 갖는 시계열은 평균과 분산이 시간에 따라 일정하고, 공분산은 시차에만 의존하는 특징을 보입니다.(오차항은 평균, 표준편차가 0, 1인 정규분포에 부합하고 긴 과거일수록 현재에 미치는 영향이 작아지므로 평균과 표준편차등 통계량이 오차항에 의존됩니다.) α=1이라면, 이 시계열은 단위근(unit root)을 가지며 비정상적(non-stationary)입니다. 단위근을 갖는 시계열은 과거의 충격이 현재와 미래에 지속적으로 영향을 미치기 때문에, 평균과 분산이 시간에 따라 변할 수 있습니다. 이러한 시계열은 분석이나 예측 전에 적절한 변환(예: 차분)을 통해 정상성을 확보해야 합니다. α>1이라면, 시계열은 **폭발적(explosive)**인 형태를 보이며 비정상적입니다. 단위근 검정(Unit Root Test): 시계열 데이터에 단위근이 존재하는지 ...

[stock]Vortex

Vortex 추세의 시작과 방향을 식별하는데 사용되는 기술적 지표입니다. 양의 소용돌이 지표(VI+)와 음의 소용돌이 지표(VI-)로 구성됩니다. 상승 및 하락 추세 움직임 VM+ = 현고가 - 이전고가 VM- = 현저가 - 이전저가 일반적으로 14 ~ 30 기간 동안 VM+와 VM- 각각을 합산합니다. 실제범위(TR) 계산 TR = max(현고가 - 현저가, |현고가 - 이전종가|, |현저가 - 이전 종가|) 일반적으로 VM+, VM-와 같은 기간동안 TR을 합산 정규화된 상승 및 하락 추세 움직임 $\begin{align}\text{VI+} &= \frac{\sum^n_{i=1} \text{VM+}_i}{\sum^n_{i=1} \text{TR}_i} \\ \text{VI-} &= \frac{\sum^n_{i=1} \text{VM-}_i}{\sum^n_{i=1} \text{TR}_i}\end{align}$ pandas_ta.vortex(high, low, close, length=None, drift=None, offset=None, **kwargs) 함수로 계산할 수 있습니다. length, drift의 기본값은 각각 14, 1입니다. drift는 이전 고가등의 기간을 지정하기 위한 것입니다. 정규화된 VIP(VI+), VIM(VI-)를 반환합니다. 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,5, 1) et=pd.Timestamp(2025, 5,12) trgnme="000660" trg=fdr.DataReader(trgnme, st, et)[["Open...

[stock]통계적 지표

통계적 지표 StDev(표준편차) 첨도(kurtosis) 왜도(Skewness) StDev(표준편차) 주가의 변동성 정도를 측정하는 지표로 표준편차 개념을 차용하여 특정기간 동안의 주가들이 평균가격으로부터 얼마나 흩어져 있는지를 나타냅니다. 핵심 개념: 변동성 측정: STDEV는 시장의 변동성을 수치화합니다. 높은 STDEV 값은 주가가 평균 가격으로부터 크게 벗어남 → 변동성 증가 낮은 STDEV 값은 주가가 평균 가격 주변에서 비교적 안정적 움직임 → 변동성이 작음 평균으로부터의 편차: STDEV는 각 주가가 설정된 기간의 평균 주가와 얼마나 차이가 나는지를 계산하고, 이 차이들의 평균적인 크기를 나타냅니다. $$\begin{align}\text{mean} &=\frac{\sum^n_{i=1} \text{price}_i}{n}\\ \text{Deviation}_i&=\text{price}_i-\text{mean}\\ \text{Deviation}^2_i&=\left(\text{price}_i-\text{mean}\right)^2\\ \text{Variance}&=\frac{\sum^n_{i=1}\left(\text{price}_i-\text{mean}\right)^2}{n-1}\\ \text{STDEV}&=\sqrt{\text{Variance}}\end{align}$$ pandas_ta.stdev(close, length=None, ddof=None, talib=None, offset=None, **kwargs) 함수로 계산합니다. length의 기본값은 30이며 ddof는 자유도를 계산하기 위해 전체 수에서 제외하는 값으로 기본값은 1입니다. import numpy as np import pandas as pd import matplotlib.pyplot as plt import pandas_ta as ta import FinanceDataRea...

[data analysis]베타분포(Beta distribution)

베타분포(Beta distribution) 베타분포는 두개의 양의 매개변수를 가지며 [0, 1] 구간에서 정의되는 연속확률 분포의 일종으로 비율, 확률, 백분율 등의 확률변수를 모델링하는데 사용되는 분포입니다. 베타분포의 PDF $$\begin{align}& f(x; \alpha,\; \beta)=\frac{1}{B(\alpha, \,\beta)}x^{\alpha-1}(1-x)^{\beta-1}\\&0\le x \le 1,\; \alpha, \beta \ge 0\\ & B(\alpha,\, \beta): \text{beta function}\end{align} $$ 베타함수는 확률밀도 함수의 전체 면적으로 1로 만들기 위한 정규화 상수입니다. numpy.random.beta(a, b, size=None) 함수로 베타분포를 따르는 표본을 추출할 수 있습니다. 이 표본을 시각화하기 위해 다음 UDF를 작성하여 사용합니다. import numpy as np from scipy.stats import skew np.random.seed(3) plt.figure(figsize=(5, 3)) arg=[(5,5), (5,2), (2,5)] for i in arg: beta_Shape(i[0], i[1], size=100000) sam=np.random.beta(i[0], i[1], size=100000) print(f'beta({i[0]},{i[1]} )의 중앙값:{np.median(sam).round(5)}, 평균:{np.mean(sam).round(5)}, 왜도:{skew(sam).round(5)}') plt.show() np.random.seed(3) plt.figure(figsize=(5, 3)) arg=[(5,5), (5,2), (2,5)] for i in arg: beta_Shape(i[0], i[1], size=100000) sam=np.random.beta(i[0], i[...

[stock]Pivot point

피벗포인트(pivot point) 잠재적인 지지선/ 저항선을 예측하기 위해 사용하는 지표로서 이전 거래일의 고가, 저가, 종가를 평균하여 계산하고 이를 기준으로 여러개의 지지선과 저항선을 산출합니다. 피벗포인트(PP) $\text{PP}=\frac{\text{High+Low+Close}}{3}$ High, Low, Close: 이전 거래일의 가격 차수 지지선 저항선 1차 S1 = (2 × PP) - High R1=(2 × PP) - Low 2차 S2 = PP - (High - Low) R2 = PP + (High - Low) 3차 S3 = Low - 2 × (High - PP) R3 = High - 2 × (PP - Low) Pandas_ta에서 직접계산하는 함수는 제공하지 않습니다. 대신에 다음과 같이 UDF를 작성하여 사용합니다. def calculate_pivot(data): result=pd.DataFrame() result["PP"]=(data.High+data.Low+data.Close)/3 result["R1"]=(2*result["PP"])-data.Low result["S1"]=(2*result["PP"])-data.High result["R2"]=result["PP"]+(data.High-data.Low) result["S2"]=result["PP"]-(data.High-data.Low) result["R3"]=data.High+2*(result["PP"] - data.Low) result["S3"]=data.Low-2*(data.High-result["PP"]) return result ...

[stock]PSAR(Parabolic Stop and Reverse)

PSAR(Parabolic Stop and Reverse) 추세의 방향 파악, 잠재적인 추세의 반전 시점 예측에 사용되는 지표입니다. 가격차트 위에 점으로 표시됩니다. PSAR은 상승과 하락 추세에 따라 약간 다른 공식을 사용하며 가속요소(Accerleration Factor, AF)와 극점(Extreme Point, EP)으로 계산됩니다. AF의 초기값은 0.02를 사용하며 상승추세에서 최고점 그리고 하락추세에서 최저점이 발생할 때마다 0.02씩 증가합니다. 일반적으로 최고점은 0.2로 제한됩니다. EP는 상승추세에서 현재 추세에서 최고가, 하락추세에서는 현재추세에서 최저가가 되며 새로운 최고가 또는 최저가가 발생하면 EP 값이 업데이트 됩니다. pandas.psar(high, low, close=None, af0=None, af=None, max_af=None, offset=None, **kwargs) 함수로 계산합니다. af0, af의 기본값은 0.02이며 max_af의 기본값은 0.2입니다. long, short, af, and reversal 칼럼들로 구성된 DataFrame을 반환합니다. 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,5, 1) et=pd.Timestamp(2025, 5,10) trgnme="000660" trg=fdr.DataReader(trgnme, st, et)[["Open", "High", "Low", "Close", "Volume"]] psar=trg.ta.psar() psar.tail(3) ...

[stock]CMO(Chande Momentum Oscillator)

CMO(Chande Momentum Oscillator) 가격 모멘텀을 측정하는 지표로 특정 기간의 상승일의 가격폭의 합계와 하락일 가격폭의 합계 사이의 관계를 고려하여 [-100, 100] 사이의 값으로 나타냅니다. $$\begin{align}\Delta \text{diff} &= C_t-C_{t-i}\\ \text{Up_diff}:\;&\Delta \text{diff} > 0 \\ \text{Down_diff}:\;&\Delta \text{diff} \lt 0\\ \text{CMO}&=\frac{\sum^n_{i=1}\text{Up_diff}-\sum^n_{i=1}\text{Down_diff}}{\sum^n_{i=1}\text{Up_diff}+\sum^n_{i=1}\text{Down_diff}}\times 100\end{align}$$ n: 특정기간 (일반적으로 20일) C:가격이며 일반적으로 Close(종가) pandas_ta.cmo(close, length=None, scalar=None, talib=None, drift=None, offset=None, **kwargs) 함수를 사용합니다. 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,9) trgnme="000660" trg=fdr.DataReader(trgnme, st, et)[["Open", "High", "Low", "...

[stock]SONAR

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", "...

[stock]KAMA(Kaufman Adaptive Moving Average)

KAMA (Kaufman Adaptive Moving Average) 시장의 변동성이나 노이즈를 고려하여 설계된 이동평균선입니다. 일반적인 이동평균선과는 달리, KAMA는 시장 상황에 따라 평활화 계수를 자동으로 조정합니다. 계산 효율성 비율 (Efficiency Ratio, ER) 계산 ER은 특정 기간 동안의 가격 변화폭을 총 가격 변동폭으로 나눈 값입니다. 가격이 한 방향으로 꾸준히 움직일수록 ER은 1에 가까워지고, 가격 변동이 심할수록 0에 가까워집니다. $$\begin{align}&\text{ER} = \frac{|\text{Close}_t - \text{Close}_{t-n}|}{\sum_{i=1}^{n} |\text{Close}_i - \text{Close}_{i-1}|}\\ &\text{Close}_t: \text{현재 종가}\\&\text{Close}_{t-n}: \text{n일 전 종가} \end{align}$$ 평활 상수 (Smoothing Constant, SC) 계산 SC는 ER을 기반으로 계산되며, KAMA가 가격 변화에 얼마나 민감하게 반응할지를 결정합니다. 빠른 EMA 상수 (보통 2/(2+1))와 느린 EMA 상수 (보통 2/(30+1))를 사용하여 SC를 계산합니다. $$\text{SC} = [ER \times (\text{Fastest EMA Constant} - \text{Slowest EMA Constant}) + \text{Slowest EMA Constant}]^2$$ KAMA 계산 KAMA는 이전 KAMA 값과 현재 가격 사이의 차이에 SC를 곱한 값을 더하여 계산됩니다. $$\text{KAMA}_t = \text{KAMA}_{t-1} + SC_t \times (\text{Close}_t - \text{KAMA}_{t-1})$$ 초기 KAMA 값은 일반적으로 첫 n 기간의 단순 이...

[stock]엔트로피(entropy)

엔트로피(entropy) 가격변동성의 정도 또는 무작위성을 측정하는 비교적 덜 일반적인 지표로서 시장의 혼란도나 예측불사능성을 나타냅니다. 엔트로피 증가 → 무작위적이고 예측하기 어려움을 시사 엔트로피 감소 → 가격 움직임이 더 규칙적이고 명확할 가능성을 나타냄 엔트로피 측정의 기본개념은 다음과 같습니다. 가격변화 분포의 불확실성 측정: 가격변화가 특정값 근처에 집중될 수록 엔트로피는 낮아집니다. 상태 공간 복잡성 측정: 가격 변화의 복잡성을 엔트로피로 측정, 많은 고유한 상태 변화가 발생하고 예측하기 어려울수록 엔트로피는 높아짐 예측가능한 패턴이 많을수록 정보 콘텐츠는 낮아지고 엔트로피도 낮아짐 위 개념에 따른 표준된 단일한 공식은 없습니다. 대신 정보이론에서는 사용되는 새넌 엔트로피의 개념을 차용하여 계산합니다. $$H(x)=-\sum^N_{i=1}P(x_i)\log_2(P(x_i))$$ H(X): 확률변수 X(가격변화율)의 엔트로피 n: 가격변화율 구간의 개수 P(x i ): i번째 구간에 속할 확률 pandas_ta.entropy(close, length=None, base=None, offset=None, **kwargs) 로 계산할 수 있습니다. length의 기본값은 10이고 base는 로그의 밑수를 나타내는 것으로 기본값은 2입니다. 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,7) trgnme="000660" trg=fdr.DataReader(trgnme, st, et)[["Open...

[stock] Coppock Curve

Coppock Curve 장기 투자자들을 위해 개발된 기술적 분석 지표로, 특히 상당한 시장 하락 이후 주요 매수 기회를 포착하는 데 사용됩니다. sumRoc = RoC(14) + RoC(11) Coppock} = WMA(sumRoc, 10) WMA (Weighted Moving Average, 가중 이동 평균) RoC (Rate of Change, 가격 변화율) pandas_ta.coppock(close, length=None, fast=None, slow=None, offset=None, **kwargs) 함수로 계산합니다. length의 기본값은 10이며 ROC 계산을 위한 기간은 2가지입니다. fast, slow로서 각각의 기본값은 11, 14일 입니다. import numpy as np import pandas as pd import FinanceDataReader as fdr import pandas_ta as ta st=pd.Timestamp(2024,9, 1) et=pd.Timestamp(2025, 5,7) trgnme="000660" trg=fdr.DataReader(trgnme, st, et)[["Open", "High", "Low", "Close", "Volume"]] coppock=trg.ta.coppock(length=5) coppock.tail(3) Date 2025-04-30 4.708481 2025-05-02 5.860197 2025-05-07 8.467832 Name: COPC_11_14_5, dtype: float64 adf=[mpf.make_addplot(trg.ta.ema(5), panel=0, color="brown", label="sma_10"), mpf.make_addplot(trg.ta.ema(20), pane...

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

모멘텀지표(RSI, MOM, ROC) RSI (Relative Strength Index, 상대 강도 지수) CMO(Chande Momentum Oscillator) 모멘텀(momentum) Rate of Change(ROC) RSI (Relative Strength Index, 상대 강도 지수) 가격변동 속도와 규모를 측정하여 과매수 또는 과매도 상태를 파악하는데 사용되는 모멘텀 지표로서 [0, 100]값으로 표시되는 오실레이터 형태입니다. 특정기간에서의 가격이 상승한 날의 상승폭 합계와 하락한 날의 하락폭의 합계를 비교하여 상대적인 강도를 나타내는 지표로 일반적으로 기간 설정은 14일 입니다. Up, Down 상승한 날(Up): 당일종가 - 전일 종가(양수, 아니면 0) 하락한 날(Down): 전일종가 - 당일종가(양수, 아니면 0) 변동없는 날: 상승폭과 하락폭 모두 0 평균상승폭, 평균하락폭 : 초기평균값은 SMA, 이후의 평균은 EMA 사용 초기 평균 상승폭(Average Up, AU)=sma(Up, n) 초기 평균 하락폭(Average Down, AD)=sma(Down, n) 초기 이후 당일 AU=ema(Up, n) 초기 이후 당일 AD=ema(AD, n) RS(상대강도)계산 $\text{RS} =\frac{\text{AU}}{\text{AD}}$ RSI 계산 $\begin{align} \text{RSI}&=100-\frac{100}{1+\text{RS}}\\ \Leftrightarrow& \text{RSI}=\frac{\text{AU}}{\text{AU}+\text{AD}} \times 100\end{align}$ pandas_ta.rsi(close, length=None, scalar=None...

[time series]ARIMAX

ARIMAX 이 모형은 여러개의 독립변수에 대해 arima 모형을 적용한 것으로 ARIMAX(ARIMA with Exogenous Variables)모형이라고 합니다. arima 모형 의 이론적 배경을 가지고 단순히 다변수의 독립변수를 적용한 것입니다. import numpy as np import pandas as pd import FinanceDataReader as fdr import matplotlib.pyplot as plt from statsmodels.tsa.stattools import acf, pacf from statsmodels.graphics.tsaplots import plot_acf, plot_pacf from sklearn.metrics import mean_squared_error from statsmodels.tsa.seasonal import seasonal_decompose from statsmodels.tsa.stattools import adfuller, kpss #정상성 검정 from statsmodels.tsa.ar_model import AutoReg #AR모형 from statsmodels.graphics.tsaplots import plot_acf, plot_pacf from statsmodels.tsa.arima.model import ARIMA from pmdarima import auto_arima from statsmodels.stats.diagnostic import acorr_ljungbox #잔차의 자기상관 검정 st=pd.Timestamp(2024,9, 1) et=pd.Timestamp(2025, 5,7) trgnme="000660" trg=fdr.DataReader(trgnme, st, et)[["Open", "High", "Low", "Close", "Volume"]] df=tr...