반응형

비트코인 가격과 공포탐욕지수
비트코인과 공포탐욕지수 ⓒ playground ai

비트코인 가격과 공포탐욕지수의 상관관계를 파악하고, 이를 통해 비트코인 투자에 대한 인사이트를 얻어보자.

최근 미국 등 선진국의 중앙은행이 대규모 양적완화정책을 시행하며 금리가 낮아지면서 비트코인 같은 대체투자자산에 대한 관심이 높아지고 있다. 이에 따라 비트코인 가격이 상승하며, 투자자들의 관심도가 높아지고 있다.

하지만, 이러한 비트코인 가격 상승에 따른 투자심리의 변화는 어떨까?

이를 분석하기 위해 이번 블로그에서는 비트코인 가격과 함께 공포탐욕지수(Fear & Greed Index)의 관계를 파악해보고자 한다.

공포탐욕지수란, 투자자들의 투자심리를 나타내는 지수로, 0 ~ 100 사이의 수치로 나타나며, 0에 가까울수록 투자자들의 공포심리가 높고, 100에 가까울수록 탐욕심리가 높다는 것을 의미한다.

이번 코드에서는, FinanceDataReader와 requests를 활용하여 비트코인 가격 데이터와 공포탐욕지수 데이터를 가져와 pandas를 이용하여 가공하였다. 그리고, matplotlib을 이용하여 그래프를 그리고 있다. 비트코인 가격은 y축(왼쪽)에, 공포탐욕지수는 y축(오른쪽)에 나타내고 있다.


Colab 실행한 파이썬 코드 클릭<= Colab 링크

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
pip install finance-datareader
 
 
import pandas as pd
import FinanceDataReader as fdr
import requests
 
# 비트코인 가격 데이터 가져오기
btc = fdr.DataReader('BTC/KRW''2018-01-01')
 
# 공포탐욕지수 데이터 가져오기
url = "https://api.alternative.me/fng/?limit=2000"
data = requests.get(url).json()
fng_data = data['data']
fng_df = pd.DataFrame(fng_data)
 
# 데이터프레임 가공하기
fng_df = fng_df.set_index('timestamp')
fng_df.index = pd.to_datetime(fng_df.index, unit='s')
fng_df = fng_df.rename(columns={'value''FNG'})
 
# 비트코인 가격 데이터와 공포탐욕지수 데이터 병합하기
df = pd.merge(btc, fng_df, left_index=True, right_index=True, how='outer')
 
# 그래프 그리기
import matplotlib.pyplot as plt
 
fig, ax1 = plt.subplots(figsize=(16,8))
plt.title('Bitcoin Close Price and Fear & Greed Index', fontsize=20)
 
# y축(왼쪽) 설정 - 비트코인 가격
color = 'tab:blue'
ax1.set_ylabel('BTC Price (KRW)', color=color, fontsize=14)
ax1.plot(df.index, df['Close'], color=color, linewidth=2)
ax1.set_yscale('log')  
ax1.set_yticks([10000000200000004000000080000000])
ax1.set_yticklabels(['10M''20M''40M''80M'])
ax1.tick_params(axis='y', labelcolor=color, labelsize=12)
ax1.grid(axis='y')
 
# y축(오른쪽) 설정 - 공포탐욕지수
ax2 = ax1.twinx()  
fng_numeric = pd.to_numeric(df['FNG'], errors='coerce'# 문자열 데이터를 숫자형으로 변환
for i in range(len(df)):
    if fng_numeric[i] >= 80# 조건문으로 공포탐욕지수가 80 이상인 경우 빨간색으로 설정
        color = 'red'
    elif fng_numeric[i] < 40# 조건문으로 공포탐욕지수가 40 미만인 경우 녹색으로 설정
        color = 'green'
    else:
        color = 'gray'
    if not pd.isna(fng_numeric[i]): # 공포탐욕지수가 NaN이 아닌 경우에만 선을 그림
        ax2.plot(df.index[i:i+2], fng_numeric[i:i+2], color=color, linewidth=0.5, alpha=0.7)
ax2.set_ylabel('Fear & Greed Index', color='tab:red', fontsize=14)
ax2.tick_params(axis='y', labelcolor='tab:red', labelsize=12)
 
plt.show()
 
cs

 

비트코인 그래프와 공포탐욕지수 그래프 분석

이 그래프는 2018년 1월 1일부터 현재까지의 비트코인 가격과 공포탐욕지수(Fear & Greed Index)를 나타냅니다.

왼쪽 y축은 비트코인의 가격(KRW)을 나타내고, 오른쪽 y축은 공포탐욕지수를 나타냅니다.

비트코인 가격과 공포탐욕지수는 대체로 반비례 관계를 보이는 것으로 보입니다. 즉, 공포탐욕지수가 높아질수록(매우 과도한 Greed 상태), 비트코인 가격이 하락할 가능성이 높아집니다.

특히, 2018년 말부터 2019년 초까지 공포탐욕지수가 큰 폭으로 증가하면서 비트코인 가격이 급락하는 모습을 볼 수 있습니다. 반대로, 2020년 초부터 공포탐욕지수가 큰 폭으로 하락하면서 비트코인 가격이 상승하는 모습도 관찰할 수 있습니다.

또한, 이 그래프에서는 공포탐욕지수가 80 이상인 경우 빨간색으로, 40 미만인 경우 녹색으로 설정되어 있습니다. 이를 보면, 공포탐욕지수가 80 이상인 경우 비트코인 가격이 하락할 가능성이 크고, 40 미만인 경우에는 상승할 가능성이 크다는 것을 확인할 수 있습니다.

하지만, 이 그래프에서는 상승/하락을 예측하는 명확한 규칙을 찾기는 어렵습니다. 과거 데이터를 기반으로 한 패턴 분석 등을 통해 트레이딩 전략을 세우는 것이 필요합니다. 또한, 비트코인 가격과 공포탐욕지수 외에도 다른 변수들을 고려하여 전략을 수립해야 합니다.

 

비트코인 가격과 공포탐욕지수를 가지고 트레이딩 전략을 구상

   비트코인 가격과 공포탐욕지수 모두 상승할 때 매수하고, 둘 다 하락할 때 매도하는 전략

    • 이 전략은 비트코인 시장이 상승장에 있는 경우에 유리합니다. 하락장에는 적합하지 않을 수 있습니다.
    • 매수/매도 포인트를 결정할 때, 양쪽 지표 모두 일정 기준값 이상일 때 매수/매도하는 것이 안전합니다

   비트코인 가격이 상승할 때만 매수하는 전략

  • 이 전략은 비트코인 시장이 상승장에 있는 경우에만 매수하므로 안전성이 높습니다.
  • 매수 포인트를 결정할 때, 비트코인 가격이 일정 기준값 이상 상승할 때 매수하는 것이 좋습니다.

   비트코인 가격과 공포탐욕지수 모두 고점을 찍을 때 매도하는 전략

  • 이 전략은 비트코인 시장이 하락장에 있는 경우에 유리합니다. 상승장에서는 적합하지 않을 수 있습니다.
  • 매도 포인트를 결정할 때, 양쪽 지표 모두 일정 기준값 이상일 때 매도하는 것이 안전합니다.

   비트코인 가격이 하락할 때만 매도하는 전략

  • 이 전략은 비트코인 시장이 하락장에 있는 경우에만 매도하므로 안전성이 높습니다.
  • 매도 포인트를 결정할 때, 비트코인 가격이 일정 기준값 이상 하락할 때 매도하는 것이 좋습니다.

비트코인 가격과 공포탐욕지수의 상관계수 계산

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
39
40
41
42
43
import pandas as pd
import FinanceDataReader as fdr
import requests
import json
import matplotlib.pyplot as plt
 
# 비트코인 가격 정보 가져오기
btc_df = fdr.DataReader('BTC/KRW''2015-01-01')
 
# 공포탐욕지수 데이터 가져오기
limit = len(btc_df)
url = f"https://api.alternative.me/fng/?limit={limit}"
response = requests.get(url)
data = json.loads(response.text)['data']
fng_data = pd.DataFrame(data, columns=['timestamp''value'])
fng_data['timestamp'= pd.to_datetime(fng_data['timestamp'], unit='s')
fng_data.set_index('timestamp', inplace=True)
fng_df = fng_data[['value']]
fng_df = fng_df.rename(columns={'value''FNG'})
fng_df['FNG'= pd.to_numeric(fng_df['FNG'], errors='coerce')
 
 
# 데이터프레임 결합하기
df = pd.concat([btc_df, fng_df], axis=1)
 
# NaN 값을 0으로 대체하기
df['FNG'].fillna(0, inplace=True)
 
# 'Close' 열을 float 유형으로 변환하기
df['Close'= df['Close'].astype(float)
 
# 피어슨 상관계수 계산
correlation = df['Close'].corr(df['FNG'], method='pearson')
print(f"상관계수: {correlation:.2f}")
 
# 비트코인 가격 정보 시각화하기
plt.figure(figsize=(12,6))
plt.plot(df.index, df['Close'])
plt.xlabel('Date')
plt.ylabel('BTC Price (KRW)')
plt.title('Bitcoin Price Chart')
plt.show()
 
cs

Colab에서 실행하면 상관계수는 0.54

위 코드는 비트코인 가격 정보와 공포탐욕지수 데이터를 가져와 데이터프레임으로 결합하고, 이를 시각화하는 코드입니다.

먼저, FinanceDataReader 패키지와 requests 패키지를 사용하여 2015년 1월 1일부터 현재까지의 비트코인 가격 정보를 가져오고, 알트코인 데이터와 함께 대표적으로 많이 사용되는 지표 중 하나인 공포탐욕지수(Fear & Greed Index) 데이터를 API를 통해 가져와 데이터프레임으로 변환합니다.

그 다음, Pandas의 concat 함수를 이용하여 데이터프레임을 결합합니다. 이때, 데이터프레임에는 비트코인 가격 정보와 공포탐욕지수(FNG) 데이터가 포함되며, 둘 중 하나라도 값이 없는 경우 NaN으로 표시됩니다. 이를 fillna 함수를 이용하여 0으로 대체합니다.

또한, 'Close' 열을 float 유형으로 변환하여 시각화합니다.

마지막으로, Pandas의 corr 함수를 사용하여 비트코인 가격 정보와 공포탐욕지수(FNG) 데이터의 피어슨 상관계수를 계산하여 출력합니다. 피어슨 상관계수는 -1에서 1 사이의 값을 가지며, 1에 가까울수록 양의 상관관계, -1에 가까울수록 음의 상관관계를 나타내고, 0에 가까울수록 상관관계가 없음을 나타냅니다.

 

 

반응형