import tkinter as tk
from tkinter import ttk
from tkinter import Menu

Main_win = tk.Tk()

Main_win.title('Stock BigData')
Main_win.geometry("800x400")
Main_win.resizable(False, False)

def _quit():
    Main_win.quit()
    Main_win.destroy()
    exit()

tab_Control = ttk.Notebook(Main_win)
tab1 = ttk.Frame(tab_Control)
tab_Control.add(tab1, text=" 주식 데이터 ")

tab_Control.pack(expand=1, fill='both')

menu_bar = Menu(Main_win)
Main_win.config(menu=menu_bar)

file_menu = Menu(menu_bar, tearoff=0)
file_menu.add_command(label="Save")
file_menu.add_separator()
file_menu.add_command(label="Exit", command=_quit)
menu_bar.add_cascade(label='File', menu=file_menu)

help_menu = Menu(menu_bar, tearoff=0)
help_menu.add_command(label="About", command=_quit)
menu_bar.add_cascade(label='Help', menu=help_menu)

Main_win.mainloop()

 


 

[결과]

 

 

 

 

 

 

지난 번에는 메인 화면과 메뉴를 만들었다.

이번에는 탭 안에 주식명을 입력하면 입력된 시작과 끝의 기간의 당일 종가를 조회할 수 있는 텍스트 입력창과 실행 버튼을 만들었다.

 

 

결과를 보면 Tab에 종목을 조회할 수 있는 항목들이 나타났다.

 

 

 

 

 

 


GUI를 만들어 삼성전자 외 다른 주식들도 쉽게 조회할 수 있게 하자.

tkinter를 사용하여 GUI를 만들 것이다.

메인 화면을 만들고, 메뉴창과 탭을 만들 것이다.

메뉴창은 File 과 Help 를 만들고, File 메뉴에는 추후에 결과를 저장할 수 있도록 Save 항목과 프로그램 종료할 수 있는 Exit 항목을 만들었다. Help 메뉴에는 프로그램 정보를 알 수 있는 About 항목을 만들었다.

프로그램 윈도우 제목을 Stock BigData라고 해주었고, 사이즈는 800x400으로 만들고 사이즈를 고정하는 코드를 넣었다.

프로그램을 종료 하는 Function 명령어를 넣어 주었고, File 메뉴의 Exit 를 선택하면 이 명령어에 의하여 프로그램이 종료된다.

탭을 하나 만들었고, 제목을 '주식 데이터'라고 해주었다.


실행하면 다음과 같은 윈도우 창이 실행 된다.


File 메뉴창은 다음과 같다.


Help 메뉴창은 다음과 같다.






불러온 삼성전자 주식 데이터에서 주 종가 데이터만 추출하였다.

데이터가 가시화 하기 위하여 matplotlib을 사용한다.

삼성전자의 주 종가와 RSI 차트를 하나로 표현하기 위한 코드는 다음과 같다.


RSI의 매수 매도 지표인 30선, 70선을 추가하였다.

차트를 불러오면 다음과 같은 그래프를 얻을 수 있다.





 

[이전]


df = pd.read_csv('stock.csv')
df['Date'] = pd.to_datetime(df['Date'], errors='raise') # datetime64[ns] 으로 data type 변환
df['Dayofweek'] = df['Date'].dt.day_name() # 'Date'에 해당하는 날짜의 요일 생성

df1 = []

for i in range(df.shape[0]): # 월 1, 화 2, 수 3, 목 4, 금 5로 정의하여 리스트화
    week = df.iloc[i, -1]
    if week == 'Monday':
        df1.append(1)
    else:
        if week == 'Tuesday':
            df1.append(2)
        else:
            if week == 'Wednesday':
                df1.append(3)
            else:
                if week == 'Thursday':
                    df1.append(4)
                else:
                    if week == 'Friday':
                        df1.append(5)
                    else:
                        df1.append(0)

df['Num'] = df1

df2 = []

for i in range(df.shape[0]-1): # 금요일이 휴일 인 경우를 찾아 종가를 전날로 하기 위한 방법 적용
    if df.iloc[i+1, -1] - df.iloc[i, -1] < 0: # 일주일의 마지막 날이면 1, 아니면 0
        df2.append(1)
    else:
        df2.append(0)

df2.append(0)
df['WeekClose'] = df2

weekclose = df['WeekClose'] == 1 # 1인 경우만 필터링하면 일주일의 마지막 날만 필터링
weekclose = df[weekclose]
weekclose.set_index('Date', inplace=True)

print(weekclose['Close']) # 주 종가 리스트

 


[결과]

 

Date
2010-01-08    16420.0
2010-01-15    16840.0
2010-01-22    16500.0
2010-01-29    15680.0
2010-02-05    15000.0
               ...   
2020-11-27    68200.0
2020-12-04    71500.0
2020-12-11    73400.0
2020-12-18    73000.0
2020-12-24    77800.0
Name: Close, Length: 572, dtype: float64

 

 

 

 

+ Recent posts