본문 바로가기

코딩 갤러리/데이터분석

[파이썬] 20일 이평선을 돌파한 주식종목 찾기

728x90
반응형

read_stock_lists는 이전 글의 py파일 이름입니다

import pandas as pd 
import read_stock_lits as rsl 
import pandas_datareader.data as web 
import datetime from datetime 
import timedelta 

# 데이터를 가져올 날짜 설정 
today = datetime.date.today() # 오늘 날짜 불러오기 
start = today - timedelta(days=21) # 21일 이전 날짜 설정 

# 코스피와 코스닥 종목코드 데이터 합치기 
ks_code = rsl.kospi_code['종목코드'] 
kq_code = rsl.kosdaq_code['종목코드'] 
kr_code = pd.concat([ks_code, kq_code]) 

# 당일 종가가 20일 이동평균선을 돌파한 종목을 구분하는 코드 
def filter(code): 
	# 야후 파이낸스에서 데이터 불러오기 
	df = web.get_data_yahoo(code, start, today, interval='d') 
	# df 파일이 위에서부터 과거 데이터부터 최근 데이터이기때문에 이를 뒤집는다 
	# 즉 과거 데이터가 데이터프레임의 행 가장 밑에 오도록 만들기 
	df_reverse = df['Close'].loc[::-1].reset_index(drop = True) 
	# 상장 21일 이내 종목 제거(20일 평균을 구하기 위해선 21일치가 필요) 
	if len(df_reverse) <= 21: 
		return False 
first_price = 0 
second_price = 0 
first_sum = 0 
second_sum = 0 

# 당일 가격과 전일 가격 구하기 
for i, price in enumerate(df_reverse): 
	if i == 0: 
		first_price = price 
	if i <= 19: 
    	first_sum += price 
	if i == 1: 
    	second_price = price
	if 1 <= i <= 20: 
    	second_sum += price 

# 당일과 전일 20일 평균 구하기 
first_avg = first_sum / 20 
second_avg = second_sum / 20 

	if first_price > first_avg : 
		if second_price < second_avg: 
			return True 

# 추천종목들을 텍스트 파일로 정리하고 저장하기 
def update_buy_list(buy_list): 
	f = open("C:/Users/USER/Desktop/buy_list_test.txt", "wt") # USER는 개인 컴퓨터마다 다른 이름입니다 
	for code in buy_list: 
		f.writelines("추천종목: %s\n" % (code)) 
		f.close() buy_list = [] 

# 20일 이평선을 돌파한 종목 찾기 
for i, code in enumerate(kr_code): 
	try: 
		# 이거는 그냥 얼마만큼 실행되고 있는 지 확인하기 위해 넣은 코드입니다. 
		print(i) 
		if filter(code): 
			buy_list.append(code) 
	# 예외 발생 시 프로그램이 종료되지 않고 계속 진행시키기 위해 넣음(그리고 무슨 오류인지 확인) 
	except Exception as e: 
		print(e, " : " , i , " : " , code) 

update_buy_list(buy_list)

잘 작동함

728x90
반응형