다음 금융의 테마별 토픽에서는 테마별 1일/1주/1개월/3개월 상승률을 확인할 수 있습니다:
https://m.finance.daum.net/domestic/sectors/theme
다음 금융
m.finance.daum.net
최근 이를 이용해서 TOP 10 테마를 뽑고, 테마별 Top Pick 은 테마 내 종목을 직접 살펴보는 식의 하이브리드한 방법으로 포트폴리오를 만들고 있습니다. 테마주라는게 모멘텀으로 먹고사는 건데 최근의 시장 모멘텀이 너무 강해서 수익률은 잘 나오고 있습니다.
어쨌든 다음 테마별 토픽에 접근해서 기간별로 전체 수익률을 뽑을 수 있는 함수를 다음과 같이 작성합니다:
import requests
import pandas as pd
def __fetch(page=1, srt='1_WEEKS'):
url = f'https://finance.daum.net/api/themes/topics?perPage=20&page={page}&sort={srt}'
headers = {
'accept': 'application/json, text/plain, */*',
'origin': 'https://m.finance.daum.net',
'referer': 'https://m.finance.daum.net/domestic/sectors/theme',
'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36',
}
result = requests.get(url, headers=headers).json()
total_pages = result['totalPages']
data = []
for it in result['data']:
data.append({
'topic_id': str(it['topicId']),
'name': it['name'],
'change': it['changeRate']
})
return total_pages, data
def load(srt):
pages, data = __fetch(srt=srt)
for pg in range(2,pages+1):
_, dt = __fetch(pg, srt)
data += dt
return pd.DataFrame(data)
이제 1주, 1개월, 3개월 수익률의 평균을 구하고 TOP 15 를 구하는 코드를 작성합니다:
df_3M = load('3_MONTHS')
df_1M = load('1_MONTHS')
df_1W = load('1_WEEKS')
df = df_1M.merge(df_3M,on=['topic_id','name'],suffixes=('_1M','_3M'))
df = df_1W.merge(df, on=['topic_id','name'])
df['rate'] = (df['change']+df['change_1M']+df['change_3M'])/3
top_15 = df.sort_values(by='rate',ascending=False)[:15]
top_15
이제 핫한 테마를 찾았으니 각 테마별 좋은 주식을 찾아 나서면 됩니다.
'투자론 > 퀀트' 카테고리의 다른 글
논문 번역 - Qlib : AI 지향 계량 투자 플랫폼 (0) | 2021.06.13 |
---|---|
우선주 괴리율 시각화 (2) (0) | 2020.11.01 |
우선주 괴리율 시각화 (1) (0) | 2020.10.29 |