퀀트투자 - 환율데이터 DB에 저장하기, KOSPI와 상관관계 확인해 보기 그리고 사기꾼과 욕심에 관한 내 생각
본문 바로가기
파이썬으로 만든 것들/퀀트투자

퀀트투자 - 환율데이터 DB에 저장하기, KOSPI와 상관관계 확인해 보기 그리고 사기꾼과 욕심에 관한 내 생각

by Squat Lee 2022. 9. 29.

환율데이터를 받아서 DB에 저장했다.

pykrx 모듈처럼 자동으로 불러 오는 방법을 찾아 봤지만, 엑셀로 받아서 DB에 저장했다. 매번 Data를 업데이트 할 필요도 없고, 한번 DB에 저장하면 그걸로 백테스트만 하면 되니깐 굳이 힘들게 라이브러리를 찾을 필요가 없다고 판단했다.
https://spot.wooribank.com/pot/Dream?withyou=FXXRT0014

기간별환율조회 - 우리은행

통화 USD(미국) JPY(일본(100)) EUR(유럽연합) AED(U.A.E) ARS(아르헨티나) AUD(호주) BDT(방글라데시) BHD(바레인) BND(브루나이) BRL(브라질) CAD(캐나다) CHF(스위스) CNY(중국) CZK(체코) DKK(덴마크) EGP(이집트) FJD(

spot.wooribank.com

우리은행 기간별 환율조회 사이트에 들어가면 친절하게 기간별로 환율조회 후 엑셀로 다운로드 받을 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd
import matplotlib.pyplot as plt
import sqlite3
 
df = pd.read_excel('환율.xlsx', index_col=0)
df = df.dropna()
df.index = pd.to_datetime(df.index)
df['기준환율'= df['기준환율'].apply(lambda x : x.replace(','''))
df['기준환율'= df['기준환율'].apply(lambda x : float(x))
df = df[['기준환율']]
 
# plt.figure(figsize=(16, 9))
# plt.plot(df['기준환율'])
# plt.show()
 
con = sqlite3.connect('krx_data.db')
df.to_sql('exchange', con=con, if_exists='replace')
cs

이렇게 간단한 코드로 DB에 저장할 수 있다.
df = df.dropna()
빈 칸은 날려버리고

df.index = pd.to_datetime(df.index)
인덱스로 설정한 날짜의 데이터 타입을 날짜형으로 변경했다.

df['기준환율'= df['기준환율'].apply(lambda x : x.replace(','''))
df['기준환율'= df['기준환율'].apply(lambda x : float(x))

다운받은 엑셀 파일의 환율은 String 타입으로 되어 있다. 일일이 엑셀에서 문자형을 바꿀 수도 있지만, 혹시나 나중에 또 다운받을때 번거로운 작업을 피하기 위해서 실수형으로 바꿔주는 코드를 넣어 주었다.

con = sqlite3.connect('krx_data.db')
df.to_sql('exchange', con=con, if_exists='replace')

기존에 만든 'krx_data.db'에 'exchage'라는 테이블을 만들어서 if_exists 옵션을 'replace'로 설정했다.
어차피 데이터 가져오는데 얼마 걸리지 않으니 교체하는 개념으로 했다.


장난삼아 matplotlib으로 그림을 그려보았다.

요롷게 이쁘게 그려진다.

이렇게 데이터를 DB에 저장하면서, 환율이 1500원이 넘어간 적이 있었다는 사실을 알게되었다(1573.6원). 이 당시에는 모두들 환율이 계속 오르기만 할 거라고 생각했을것이다. 하지만 환율이 다시 1,100원을 지나서 1,000원때까지 떨어졌다. 그때는 또 다시 사람들이 환율은 영원히 낮을거라 생각하고, 수출기업들은 환차손 때문에 매출이 좋지 않다는 뉴스기사가 매일 같이 쏟아졌을 것이다.(데이터 기간 중 2008년은 902.2원까지 떨어짐)

갑자기 코스피와 환율의 연관성이 궁금해졌다.


출근하기 전 집에서 급하게 코딩을 하는 바람에 결국 회사에 3분 지각했다. 시간관념이 철저한 나지만, 마무리를 못하고 도저히 컴퓨터 앞에서 일어나기가 힘들었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import pandas as pd
import matplotlib.pyplot as plt
import sqlite3
 
con = sqlite3.connect('krx_data.db'#데이터베이스에 연결
df_ex = pd.read_sql('SELECT * FROM exchange', con) #환율데이터 가져오기
df_kos = pd. read_sql('SELECT 날짜, 종가 FROM kospi_index', con) #코스피지수 가져오기
df_kos['날짜'= pd.to_datetime(df_kos['날짜']) #날짜를 str 에서 날짜형태로 변환
df_ex['일자'= pd.to_datetime(df_ex['일자']) #날짜를 str 에서 날짜형태로 변환
 
df_ex = df_ex.set_index('일자'#날짜를 인덱스로 지정
df_kos = df_kos.set_index('날짜'#날짜를 인덱스로 지정
 
 
df_t = df_kos.merge(df_ex, left_index=True, right_index=True)
df_t.columns = ['KOSPI''Exchange'#컬럼명 변경
 
# df_t = df_t.dropna
 
plt.rcParams['figure.figsize'= (169)
 
fig, ax1 = plt.subplots()
ax1.set_xlabel('DATE')
ax1.set_ylabel('KOSPI')
ax1.plot(df_t.index, df_t['KOSPI'], color='blue', label='KOSPI INDEX')
ax1.legend(loc='upper right')
 
ax2 = ax1.twinx()
ax2.set_ylabel('Exchange')
ax2.plot(df_t.index, df_t['Exchange'], color='red', label='Exchange')
ax2.legend(loc='lower right')
 
plt.show()
 
print(df_t)
cs

KOSPI Index와 환율 데이터의 날짜 데이터형이 달라서 merge를 할때 뭔가 잘 되지 않았다. 사실 출근때문에 마음이 급해서 급하게 서두른 탓일 것이다.

둘다 데이터 범위가 다르니 축을 2개로 설정했다.

KOSPI Index vs 환율

재미있는 사실은 코스피지수와 환율이 반대로 움직인 다는 것이다. 요즘에 이렇게 환율이 높으니 주가가맥을 못 추는 게 어쩌면 당연할 수 있겠다는 생각이 든다.

하지만, 항상 그래왔듯이 환율은 다시 떨어지고, 주가는 다시 올라간다.


1
2
3
4
5
6
# KOSPI지수와 환율간 산점도 분석
plt.figure(figsize=(167))
plt.scatter(df_t['KOSPI'], df_t['Exchange'], marker='.')
plt.xlabel('KOSPI Index')
plt.ylabel('Exchange Rate')
plt.show()
cs

 

산점도로 분석해 봤다.

KOSPI VS 환율

산점도로 보면 대부분의 환율 구간은 1,000원 ~ 1,300원에 몰려있다. 사람이란 동물의 습성은 바뀌지 않으니 결국 다시 원래 구간대로 돌아오리라 생각이 된다.


이제 scipy 라이브러리를 사용해서 kospi 와 환율간 상관관계를 분석해 보겠다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import pandas as pd
import matplotlib.pyplot as plt
import sqlite3
from scipy import stats
 
con = sqlite3.connect('krx_data.db'#데이터베이스에 연결
df_ex = pd.read_sql('SELECT * FROM exchange', con) #환율데이터 가져오기
df_kos = pd. read_sql('SELECT 날짜, 종가 FROM kospi_index', con) #코스피지수 가져오기
df_kos['날짜'= pd.to_datetime(df_kos['날짜']) #날짜를 str 에서 날짜형태로 변환
df_ex['일자'= pd.to_datetime(df_ex['일자']) #날짜를 str 에서 날짜형태로 변환
 
df_ex = df_ex.set_index('일자'#날짜를 인덱스로 지정
df_kos = df_kos.set_index('날짜'#날짜를 인덱스로 지정
 
 
df_t = df_kos.merge(df_ex, left_index=True, right_index=True)
df_t.columns = ['KOSPI''Exchange'#컬럼명 변경
 
regr = stats.linregress(df_t['KOSPI'], df_t['Exchange'])
regr_line = f'Y = {regr.slope: .2f} * X + {regr.intercept:.2f}' #범례에 회귀식을 표현
 
plt.figure(figsize=(9,9))
plt.plot(df_t['KOSPI'], df_t['Exchange'], '.'# 산점도를 점으로 표현
plt.plot(df_t['KOSPI'], regr.slope * df_t['KOSPI'+ regr.intercept, 'r'# 회귀선을 붉은색으로 표현
plt.legend(['KOSPI x Exchange', regr_line])
plt.title(f'KOSPI x Exchange (R = {regr.rvalue:.2f})')
plt.xlabel('KOSPI INDEX')
plt.ylabel('Exchange Rate')
plt.show()
 
cs


이 쪽에 지식이 별로 없어서 대충 만들었다. 그래프로 표시해 보겠다.

KOSPI와 환율의 상관관계 분석

여기 그래프에서 주목할 만한 2가지 항목이 있다. 첫 번째는 R계수고, 2번째는 회귀식이다.

첫번째 R계수(상관관계)에 대해서 설명하겠다.

노벨경제학상을 수상한 해리 마코위츠 박사가 체계화한 현대 포트폴리오 이론을 빌어서 설명하자면, 투자에 대한 수익과 위험은 평균과 분산으로 나타낼 수 있으며, 상관관계가 낮은 자산을 대상으로 분산 투자하면 위험을 줄일 수 있다는 얘기다.

이런 얘기는 유튜브를 보다보면 수 없이 많이 나온다. 예전에 홍춘욱 이코노미스트의 유튜브를 봤는데 미국 ETF와 미국채권, 국내 채권 포트폴리오를 설명하면서 이런 얘기를 한 것이 기억난다.

KOSPI와 환율은 상관계수(R) 이 0.11이다.

이게 무슨 말이냐 하면 1 이상은 두 개의 자산 사이에 리스크 완화 효과가 없고, 0.5는 조금의 리스크 완화효과를 기대 할 수 있으며, 0은 상당한 리스크 완화 효과가 있다는 얘기다.

상관계수(R) 리스크 완화 효과
1 이상 리스크 완화 효과가 없음
0.5 이상 중간 정도의 리스크 완화 효과가 있음
0 상당한 리스크 완화 효과가 있음
0.5이하 대부분의 리스크를 제거함
-1 이하 모든 리스크를 제거함


KOSPI 지수와 환율은 0.11이며 0에 근접하기에 상당한 리스크 완화 효과를 기대해 볼 수 있다. 이 말은, 서로 반대로 움직이기에 분산해서 Risk를 줄일 수 있다는 말이다.

두번째로는 회귀식이다. 저 식을 사용하면 대략적으로 환율대비 주가를 추측할 수 있다. 반대도 가능하다. 정말 세상이 좋아졌지 않은가? 이런 좋은 세상에 태어나 살고 있는것에 감사한다.


예전에 인터넷 카페에서 어떤 분이 달러에 관련해서 얘기한 글을 읽은적이 있다.(자칭 경제적 자유를 이루고 안정된 직장을 그만 두셨다고 한다.) 그 카페에서 왜그리 이분의 글에 열광하는지 궁금했다. 이게 합리적일까 하는 생각이 들었다.

그 분은 달러의 가치는 원화보다 더 높고 안정적이니깐, 앞으로도 계속 달러는 가치가 올라갈 것이고, (환율이 많이 올라간 지금에도) 지금 미국주식을 구입해도 된다는 주장이다.

나는 말도 안되는 소리라고 생각한다. 환율은 말 그대로 화폐의 교환 비율이다. 예전 일본이 환율이 높아서 미국에 물건을 많이 팔아서 무역흑자를 이룬적이 있었다. 그리고 그때 일본은 세계 경제규모 2위를 달성했다. 하지만, 결국 플라자 합의를 통해 환율을 조정했고 결국 그 여파로 잃어버린 10년을 지나 30년까지 오고있다.

우리나라도 환율이 높으면 분명 수출기업들은 이득을 보게된다. 당연히 원자재 가격도 올라 갈 것이다. 하지만 우리나라 태생적인 특성상 수출물량은 더욱 늘어날 것이고, 역사적으로 한민족이 항상 어려움을 이겨냈듯이 원자재 가격문제도 어떻게든 해결할 것이다.

그러면, 바이든이 인플레금지법으로 현대차에 보조금을 1,000만원 주지 않는다고 하더라도 현대차는 미국에 더 싼 값에 차를 팔수가 있을 것이다. 현대차 뿐만 아니라 수출기업 대부분 매출과 순이익이 엄청나게 늘어 날 것이다. 상식적으로 이런 상황이 계속해서 일어나겠는가?

요즘 정보는 방대해지고 접근성도 편해졌다. 누구나 정보를 손쉽게 구할 수 있다. 하지만, 이 정보를 지식으로 만들기 위해서는 본인의 노력이 필요하다.

어떤 사람이 돈을 벌었다고 해서 그 사람 방법이 무조건 옳다는게 아니다라는 얘기를 하고 싶다.

'블랙스완'으로 유명한 '나심 니콜라스 탈렙의 '행운의 속지마라'라는 책에 이런 내용이 있다.

수 만마리의 침팬치 앞에 타자기를 두면, 그 중에 몇 몇은 단어를 우연히 칠 것이고, 정말 소수의 몇 몇은 우연히 문장도 만들것이다. 하지만 문장을 만든 그 침팬치가 과연 천재라고 얘기할 수 있겠는가?

사람들은 '사후편향'에 취약하다. 뭔가를 이룬 사람이면 의심없이 믿어버린다. 이 사람이 운으로 이룬건지, 사기를 친건지 생각해보지도 않고, 그 사람을 따른다.

세상에는 쉽게 얻을 수 있는것은 단 하나도 없다. 누군가 합리적인 수익률을 넘어서는 방법이나 상품을 들이밀면 100% 사기다. 그런 좋은 상품이 있으면 혼자서 몰래 하는게 더욱 논리적이며, 합리적이다.

다시 그 경제적자유를 이룬 분 얘기로 넘어가서 그 분이 그 카페에서 쓰신 글이 과연 합리적인지 그 카페의 회원들은 고민했을까하는 의구심이 든다.

내 욕심과 사기꾼이 만나면 사기피해가 발생한다. 이건 모두에게 통하는 진리다. 그 분이 사기꾼인지, 한 마리의 운 좋은 침팬치인지는 잘 모르겠다. 하지만, 그 분 글을 맹목적으로 비판없이 받아 들일 필요는 없다고 생각한다. 왜냐하면 자기 자신을 스스로 지킬 권리는 누구에게나 있기 때문이다.

대한민국 모든 사람이 합리적인 투자를 하기는 불가능하다.(왜냐하면 욕심이 많고, 게으른 사람이 안 그런 사람보다 훨씬 많기 때문이다.)

대신, 최소한 내 포스트를 우현히 본 사람 만이라도 욕심을 조금만 자제하고 합리적인 수익으로 복리를 통해 경제적 자유를 이루길 희망한다.

728x90
반응형

댓글