본문 바로가기

코딩/퀀트 투자

파이썬으로 S&P 500 지수 투자 분석하기(TIGER ETF 편)

728x90
반응형

1. 목표

 

저번 포스팅에 이어서 한국에 상장되어 있는 S&P 500 지수 투자를 할 수 있는 TIGER ETF의 매수 타이밍과 주가 수익률 간의 관계를 분석하는 것이다.

 

저번과 마찬가지로 매수 타이밍을 등락률을 기준으로 설정하고, 매수 타이밍으로부터 1~12개월 후의 수익률을 등락률에 따라 비교했다. (저번과 달리 1년 후의 수익률까지만 비교한 이유는 TIGER ETF가 상장된 지 1년 남짓이기 때문이다.)

 

분석에 사용된 자료는 investing.com의 TIGER ETF의 2020.08.10부터 2021.08.23까지의 자료를 사용해서 분석했다. 

 

분석을 하게 된 자세한 이유와 분석 결과에 대해서 궁금하다면 아래의 블로그를 참조하면 된다.

 

 

[주식 공부] 퀀팅으로 매수 타이밍과 주가 수익률 관계성 평가 (국내 S&P 500 ETF) - 2편

이 글은 상단의 글에 이어지는 포스팅입니다. 이해를 위해 위 포스팅부터 읽고 오는 걸 추천드립니다! 미국...

blog.naver.com

 

 

 

2. 내용

 

저번에 포스팅했던 VOO ETF를 분석할 때 사용했던 함수와 거의 동일하다.

 

함수에 대해 간략하게 설명하면, 기준이 되는 등락률인 change, 몇 개월 후의 수익률을 계산할지를 설정하는 months 두 개의 parameter를 받아,

 

등락률이 change 미만인 모든 날짜를 매수 타이밍으로 설정해서 그 날짜들로부터 months 개월이 지난 후의 수익률을 포함하는 dataframe의 형태로 return 하는 함수이다. 

 

함수에 대한 좀 더 자세한 내용이 궁금하다면 저번 포스팅을 참조하면 된다.

 

 

파이썬으로 S&P 500 지수 투자 분석하기 (VOO ETF 편)

1. 목표 S&P 500 지수에 투자를 하는 VOO ETF의 매수 타이밍과 주가 수익률 간의 관계를 분석하는 것이다. 이때 매수 타이밍은 등락률을 기준으로 설정하고, 매수 타이밍으로부터 1~36개월 후의 수익

coding-gongbu.tistory.com

import pandas as pd
from dateutil.relativedelta import *
from datetime import datetime, timedelta

def TIGER_analysis(change, months):
    df = pd.read_excel('360750 Historical Data.xlsx', index_col='Date', engine='openpyxl')
    df.index = pd.to_datetime(df.index).strftime('%Y-%m-%d')
    df = df.sort_index()

    df_comp = df[['Price', 'Change %']]

    buy_date = []

    for i in range(len(df_comp)):
        if (df_comp.iloc[i, 1]*100) < change:
            buy_date.append(df_comp.index[i])

    month_index = f'{months}-month'
    result = pd.DataFrame(index=buy_date, columns=['present', month_index, 'Change %'])

    for date in buy_date:
        result.loc[date, 'present'] = df_comp.loc[date, 'Price']
        comp_date = (datetime.strptime(date, '%Y-%m-%d') + relativedelta(months=months)).strftime('%Y-%m-%d')
        if comp_date in df_comp.index.tolist():
            result.loc[date, month_index] = df_comp.loc[comp_date, 'Price']
        else:
            while pd.to_datetime(comp_date) < pd.to_datetime('2021-08-20'):
                comp_date = (datetime.strptime(comp_date, '%Y-%m-%d') + timedelta(days=1)).strftime('%Y-%m-%d')
                if comp_date in df_comp.index.tolist():
                    result.loc[date, month_index] = df_comp.loc[comp_date, 'Price']
                    break

    for i in range(len(result)):
        result.iloc[i, 2] = (result.iloc[i, 1] - result.iloc[i, 0]) / result.iloc[i, 0] * 100

    result = result.dropna()

    return result

 

 

 

3. 결과

 

위 함수를 이용해서 매수 타이밍을 각각 무작위, 0% 미만, -1% 미만, -1.5% 미만, -2% 미만으로 했을 때 1~12개월 후의 수익률을 계산해보면 다음과 같은 결과가 나온다.

 

(이때 100% 미만은 주어진 기간 내의 모든 데이터를 매수 타이밍으로 설정한 결과를 확인하기 위해서 change를 100으로 설정한 것이다.)

 

(빈칸은 1년간의 데이터만 존재하기 때문에, 기준을 만족하는 매도 타이밍으로부터 12개월 후의 데이터가 존재하지 않는 경우이다.)

 

 

TIGER ETF의 경우에는 VOO ETF와 달리 적은 양의 데이터로 분석해서 그런지 매수 타이밍과 수익률의 큰 관계가 없는 것으로 나타났다. 

 

 

 

 

728x90
반응형