이번 포스팅에서는 엑셀로 회귀분석 해보는 시간을 갖도록 하겠습니다.

 

회귀분석이란 간단히 말해 두 데이터의 상관관계를 알아보는 것입니다.

 

우선 아래 포스팅에서 파이썬을 이용해 S&P500 지수와 KOSPI200 지수를 불러와서 엑셀로 저장하였습니다.

 

2020/12/03 - [프로그래밍/┗ Pandas] - [Pandas] S&P500 지수와 KOSPI200 지수 불러와서 엑셀로 저장

 

[Pandas] S&P500 지수와 KOSPI200 지수 불러와서 엑셀로 저장

이번 포스팅에서는 S&P500 지수와 KOSPI200 지수의 상관관계를 알아보기에 앞서 각각의 데이터를 불러온 후 엑셀파일로 저장하는 과정을 설명드리겠습니다. 먼저 소스는 다음과 같습니다. import Finan

grand-unified-engine.tistory.com

파이썬 과정을 건너 뛰고 아래 첨부파일로 해보셔도 됩니다.

 

S&P500-KOSPI200.xlsx
0.02MB

엑셀 파일을 열고 A2 셀을 선택 후 Ctrl + Shift + 아래 방향키를 누르면 열을 일괄 선택할 수 있습니다. 

마우스 오른쪽 클릭하여 셀 서식을 누르거나 Ctrl + 1을 누르면 셀 서식이 나타납니다.

날짜만 표시되도록 형식을 yyyy-mm-dd로 변경해줍니다.

Ctrl + A를 눌러 전체 셀을 선택 하고 삽입 -> 차트 -> 2차원 꺾은선형을 클릭하면 다음과 같이 그래프가 표시됩니다.

그런데 S&P500에 비해 KOSPI200 지수가 작아서 비교하기가 쉽지 않습니다. 

이럴 때 값이 다른 것을 비교하기 위해 지수화 작업을 해줘야 합니다.

D2 셀을 클릭 후 =B2/B$2*100를 입력합니다.

E2 셀을 클릭후 =C2/C$2*100를 입력합니다.

 

D2와 E2셀을 선택하고 선택한 영역 오른쪽 아래 점을 클릭해 +모양으로 바뀌면 더블 클릭합니다.

그러면 마지막 행까지 수식이 반영되어 데이터가 채워집니다. 

 

지수화 한 데이터로 그래프를 그리기 위해 B열과 C열을 선택해서 숨김처리합니다.

Ctrl + A를 선택후 삽입 -> 차트 -> 2차원 꺾은선형을 클릭하면 다음과 같이 그래프가 표시됩니다.

이제 두 데이터 간 비교를 할 수 있게 되었으므로 회귀분석을 해보겠습니다.

 

엑셀에서 회귀분석을 하려면 엑셀 기능을 추가해야 합니다. 

1. 엑셀의 상단 메뉴에서 파일 -> 옵션 메뉴를 클릭합니다.

2. 'Excel 옵션'창이 열리면 추가 기능 옆에 이동 버튼을 누릅니다.

3. 추가 기능 팝업이 뜨면 분석 도구에 체크하고 확인 버튼을 누릅니다.

엑셀 상단 메뉴에 보면 '데이터 분석'이 활성화 되었습니다.

데이터 분석을 눌러 '회귀 분석'을 찾아 선택합니다.

회귀 분석 창에서 'Y축 입력 범위'에는 KOSPI200 데이터를 선택하고, 'X축 입력 범위'에는 S&P500 데이터를 선택합니다. 이 창에서는 Ctrl을 눌러 데이터 선택하는 기능이 작동하지 않으므로 마우스로 드레그 해야 합니다.

입력이 완료된 후 확인 버튼을 누릅니다.

Sheet2에 회귀분석한 결과가 표시됩니다.

추세선 방정식은 y = 0.033x + 97.31이고 결정계수는 0.002로, 거의 상관관계가 없다는 결과가 나왔습니다.

이번 포스팅에서는 S&P500 지수와 KOSPI200 지수의 상관관계를 알아보기에 앞서 각각의 데이터를 불러온 후 엑셀파일로 저장하는 과정을 설명드리겠습니다.

 

먼저 소스는 다음과 같습니다.

import FinanceDataReader as fdr
import pandas as pd

df500 = fdr.DataReader("US500", '2017-05-01')
df200 = fdr.DataReader("KS200", '2017-05-01')

df500 = df500['Close']
df200 = df200['Close']

concat = pd.concat([df500, df200], axis=1, keys=['S&P500','KOSPI200'])

final = concat.dropna()

print(final)
#final.to_excel('S&P500-KOSPI200.xlsx')

FinanceDataReader를 이용해서 S&P500 지수와 KOSPI200 지수를 불러옵니다. 

S&P500는 'US500', KOSPI200는 'KS200' 을 첫번째 파라미터로 넣어줍니다.

 

두번째 파라미터는 시작 날짜를 의미합니다. 

세번째 파라미터는 마지막 날짜인데 입력하지 않으면 오늘 날짜까지로 설정이 됩니다.

 

concat 를 이용하여 두 지수의 종가를 합칩니다.

print를 하면 다음과 같이 데이터가 콘솔창에 출력됩니다.

주석처리된 것을 풀고 실행하면 다음과 같이 엑셀 파일이 생성됩니다.

 

평균 회귀 전략 중 하나인 볼린저 밴드를 파이썬으로 구현해보자.

 

볼린저 밴드는 3개 선으로 구성되는데 추세를 판단할 수 있는 중심선, 상단선과 하단선의 표준편차 밴드로 구성된다. 

일반적인 볼린저 밴드 공식은 다음과 같다.

  • 상단 볼린저 밴드 = 중간 볼린저 밴드 + (표준편차 X 2)
  • 중간 볼린저 밴드 = 종가의 20 이동평균
  • 하단 볼린저 밴드 = 중간 볼린저 밴드 - (표준편차 X 2)
import FinanceDataReader as fdr
df = fdr.DataReader("057030", '2020') # YBM넷 2020년~현재
df = df[['Close']]
df['MA20'] = df['Close'].rolling(window=20).mean() # 중간 볼린저 밴드
df['stddev'] = df['Close'].rolling(window=20).std()
df['upper'] = df['MA20'] + (df['stddev'] * 2) # 상단 볼린저 밴드
df['lower'] = df['MA20'] - (df['stddev'] * 2) # 하단 볼린저 밴드
print(df.tail(10))

위와 같이 결과가 나온다.

MA20이 중간 볼린저 밴드, upper가 상단 볼린저 밴드, lower가 하단 볼린저 밴드이다.

 

참고로 볼린저 밴드를 수식으로 표현하면 다음과 같다.

중간 볼린저 밴드는 다음과 같다.

$$ \bar{X} = {\sum_{j=1}^N X_j \over N} $$

 

상단, 하단 볼린저 밴드에 들어가는 표준편차는 다음과 같이 표현한다.

$$ \sigma = \sqrt{\sum_{j=1}^N (X_j - \bar{X})^2 \over N} $$

 

이제 이 데이터를 이용하여 자신만의 멋진 투자 전략을 만들어보자.

키움 api에 접속이 잘 되던것이 갑자기 "타인계좌는 사용할 수 없습니다"라고 알림창이 뜰 때가 있다.

이번 시간에는 뜬금없이 나를 타인계좌를 이용하려는 범죄자로 만드는 이 메시지의 해결방법을 알아보자.

윈도우 화면 오른쪽 아래에 있는 api 아이콘을 선택 후 마우스 오른쪽 클릭해서 계좌비밀번호 저장을 클릭하면 계좌비밀번호를 입력할 수 있는 팝업창이 뜬다.

그런데 다음과 같이 자신의 계좌번호에 아무것도 표시가 되지 않을 때가 있다. 이럴 경우 "타인계좌는 사용할 수 없습니다."라고 뜨는 것이다. 

기존에 비밀번호까지 다 등록해서 정상적으로 접속하던 것인데 이렇게 갑자기 계좌번호가 사라진다.

이를 해결하기 위해서는 버전처리라는 것을 해야 한다.

 

이럴 때 API를 테스트할 수 있는 KOA StudioSA를 실행한 후 Open API 접속을 한다. 

로그인을 하면

버전처리를 받으라고 메시지가 나온다. 이 때 확인 버튼을 바로 누르지 말고 반드시 KOA StudioSA를 먼저 종료 후 버전처리 메시지의 확인 버튼을 눌러야 한다!!!

그리고 다시 윈도우 화면 오른쪽 아래에 있는 api 아이콘을 선택 후 마우스 오른쪽 클릭해서 계좌비밀번호 저장을 클릭한다.

그러면 자신의 계좌가 다시 나오는 것을 볼 수 있다.

이 때 비밀번호를 등록하고 다시 api 접속을 하면 정상적으로 접속되는 것을 볼 수 있다.

 

그런데 이렇게 버전처리를 받았는데도 안 될 경우가 있다.

그럼 최후의 방법으로 open api를 삭제하고 다시 설치해보기 바란다.

 

주식의 종가(Close) 데이터를 이용하여 기술적지표 중 가장 기본이 되는 이동평균선을 만들어보자.

 

주가 데이터는 FinanceDataReader 라이브러리를 이용해서 가져오도록 하자.

설치시 pip install FinanceDataReader가 아니라 pip install -U finance-datareader 를 입력해서 설치하자.

 

예전에는 야후 파이낸스에서 제공하는 pandas_datareader api를 이용했는데 미국 주식 데이터는 정확하지만 국내 주식은 데이터가 빠져있는 등 데이터를 가공하기에 적합하지 않다.

 

참고로 FinanceDataReader는 네이버 증권에 있는 주가 데이터를 가져온다.

 

다음과 같이 주가 데이터를 가져와보자.

DataReader의 첫번째 파라미터에는 원하는 종목코드를, 두번째 파라미터에는 연도를 입력하자.

import FinanceDataReader as fdr
df = fdr.DataReader("019175", "2020")
print(df)

Jupyter Notebook을 이용해서 실행하면 다음과 같이 조회된다.

 

종가(Close)를 이용하여 이동평균선 값을 구해보자.

df = df[['Close']]
df['MA5'] = df['Close'].rolling(window=5).mean() # 5일선
df['MA10'] = df['Close'].rolling(window=10).mean() # 10일선
df['MA20'] = df['Close'].rolling(window=20).mean() # 20일선
df['MA60'] = df['Close'].rolling(window=60).mean() # 60일선
df['MA120'] = df['Close'].rolling(window=120).mean() #120일선
print(df)

이번에는 종가의 변화율을 만들어보자.

df['Close_dpc'] = (df['Close'] / df['Close'].shift(1) - 1) * 100  #종가 변화율 일반식
df['Close_pct_change'] = df['Close'].pct_change() * 100 #종가 변화율 pct_change함수 사용
print(df)

변화율은 간편하게 pct_change() 함수를 이용하면 된다. 

기본값은 하루전 종가와의 변화율이고 며칠 전 종가와의 변화율도 pct_change()를 이용하면 간단하게 구할 수 있다.

df = df[['Close']]
df['Close_pct_change5'] = df['Close'].pct_change(5) * 100 #5일 전 종가와 당일종가의 변화율
print(df.tail(10))

2020-11-13 종가(138,500)와 5일전인 2020-11-06 종가(143,500)의 변화율을 구하면 -3.484321로 계산됨을 알 수 있다.

 

+ Recent posts