재무제표는 기업 재무상태나 경영성과 등을 보여주는 문서입니다. 이러한 재무제표는 기업의 성과 등을 파악하기 위해 내부적인 목적으로 사용되기도 하나, 상장기업의 경우 상법상 재무제표를 작성하고 비치해야 하는 의무가 있습니다.

기업 공개에 따라 투자자를 유치하기 때문에 기업 회계의 투명성을 공시하는 것은 투자자에 대한 당연한 의무라고 봅니다. 재무제표의 확인은 우리가 마트에서 먹을 것을 사더라도 트랜스 지방, 칼로리, 가격, 성분, 유통기한 확인하는 것과 같이 필수적이지만 손이 잘 안가는 것이 사실입니다. 아무래도 상품에 적혀 있는 기본 정보와 달리 정보 접근성이 떨어지기 때문인 것 같습니다. 보는 법이야 자주 보다보면 알 수 있고, 용어야 인터넷 잠깐만 검색해보면 엄청나게 쏟아지지만 결국은 정보의 접근성이 문제인 것 같습니다.

fnguide라는 사이트를 통해 무료로 재무제표를 확인할 수 있습니다. 유료 회윈의 경우 FnResearch(300,000/월), FnConsensus(100,000/월), FnOwnership(100,000/월), FnDB Navigator(100,000/월), FnScreener(100,000/월), FnEMIS(300,000/월), FnDocument(100,000/월)등의 자료를 받아볼 수 있나봅니다.

 

재무제표에 쉽게 접근할 수 있는 Python 코드를 아래와 구현해봤습니다.

 

import pandas as pd
import requests
import time

def make_fs_dataframe(firm_code) :
    fs_url = "http://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&cID=&MenuYn=Y&ReportGB=&NewMenuID=103&stkGb=701&gicode=" + firm_code
    fs_page = requests.get(fs_url)
    fs_tables = pd.read_html(fs_page.text)

    temp_df1 = fs_tables[0]
    temp_df1 = temp_df1.set_index(temp_df1.columns[0])
    temp_df1 = temp_df1[temp_df1.columns[0:4]]
    temp_df1 = temp_df1.loc[['매출액', '영업이익', '당기순이익']]

    temp_df2 = fs_tables[2]
    temp_df2 = temp_df2.set_index(temp_df2.columns[0])
    temp_df2 = temp_df2.loc[['자산', '부채', '자본']]

    temp_df3 = fs_tables[4]
    temp_df3 = temp_df3.set_index(temp_df3.columns[0])
    temp_df3 = temp_df3.loc[['영업활동으로인한현금흐름']]

    fs_df = pd.concat([temp_df1, temp_df2, temp_df3])
    return fs_df

temp_df1 = temp_df1.loc[['매출액', '영업이익', '당기순이익']]

temp_df2 = temp_df2.loc[['자산', '부채', '자본']]

temp_df3 = temp_df3.loc[['영업활동으로인한현금흐름']]

관심있는 항목을 추가하여 코드를 구현할 수 있습니다.

 

def make_fr_dataframe(firm_code) :
    fr_url = 'http://comp.fnguide.com/SVO2/ASP/SVD_FinanceRatio.asp?pGB=1&cID=&MenuYn=Y&ReportGB=&NewMenuID=104&stkGb=701&gicode=' + firm_code
    fr_page = requests.get(fr_url)
    fr_tables = pd.read_html(fr_page.text)

    temp_df = fr_tables[0]
    temp_df = temp_df.set_index(temp_df.columns[0])
    temp_df = temp_df.loc[['유동비율계산에 참여한 계정 펼치기', '부채비율계산에 참여한 계정 펼치기', '영업이익률계산에 참여한 계정 펼치기',
                           'ROA계산에 참여한 계정 펼치기', 'ROIC계산에 참여한 계정 펼치기']]
    temp_df.index = ['유동비율', '부채비율', '영업이익률', 'ROA', 'ROIC']
    return temp_df

추가로 투자지표도 확인할 수 있습니다.

참고가 되셨으면 좋겠습니다.

'파이썬(PYTHON)' 카테고리의 다른 글

fbprophet 설치 오류 해결  (0) 2021.10.01
SELENIUM을 이용한 KRX 주식 종목 코드 크롤링  (0) 2021.09.20
RPA를 위한 Python 활용  (0) 2021.08.21
Demark 지표의 Python 코드 구현  (2) 2021.08.19
TALIB Library 모듈  (0) 2021.07.01

파이썬으로 윈도용 프로그램을 자동 제어하는 방법으로는 몇가지 있는데 대표적으로 아래와 같습니다.

 - pywinauto

 - UiAutomation

 - pyautogui

 

python에서 윈도용 프로그램을 제어하려면 win32com 프로그램을 설치합니다.

https://sourceforge.net/projects/pywin32/files/?source=navbar 

 

Python for Windows Extensions - Browse Files at SourceForge.net

×

sourceforge.net

상기 폴더중 가장 download 횟수가 높은 것으로 다운로드 받습니다. (안정성이 보증된 것이므로)

 

위의 내용은 python으로 제어하는 방법입니다. 윈도용 프로그램의 동작을 보여줘야 python을 통해 제어할 수 있습니다. 이에 윈도용 프로그램 제어 정보를 얻을 수 있는 프로그램을 다운로드 받아야 합니다.

Accessibility insights라는 프로그램인데 아래의 링크에서 다운받을 수 있습니다.

https://accessibilityinsights.io/en/downloads/

 

Accessibility Insights

Solve accessibility issues before they reach your customers.

accessibilityinsights.io

바탕화면에 아래와 같은 아이콘이 생성됩니다.

상기 프로그램 실행시 아래와 같은 메인 페이지가 실행됩니다.

상기와 같은 프로그램 실행 후 notepad나 계산기등을 실행시키면 프로그램 실행에 따른 제어 화면 정보가 보여집니다. 이를 토대로 python에서 코드를 구현할 수 있는 정보를 제공해줍니다. 각 python 모듈 사용법을 참고하여 해당 제어 정보를 이용하여 윈도용 자동화 프로그램 제작을 할 수 있습니다.

참고하시길..

Demark 지수라고해서 전날 일봉데이터를 토대로 오늘의 주가 범위를 판단하는 지표인 것 같습니다. 당일 매매에서 유용할 것 같습니다. 현재의 주가가 저평가인지, 고평가인지 판단할 수 있는 지표인 것 같습니다. 지표 하단에서 매수한다고 저가이고, 지표 상단에서 매수한다고 고가인 것은 아니지만 그나마 판단 근거를 주니까 참고용으로 사용할 수 있을 것 같습니다.

이를 Python 코드로 간단히 구현해 봤습니다.

저는 sqlite를 사용하고 있어서 DB에 저장된 일봉 데이터 OHLCV를 읽어오는 것으로 시작합니다. 전날 양봉인 경우 OHLCV에서 H에 가중치를, 음봉인 경우 L에 가중치를 주어서 계산을 합니다. 다른 블로그를 참고해보면 "시가 + 종가 + 고가 + 저가"에 대한 정의가 잘못되어 키움 영웅문에서 확인한 수치와 달라서 애먹었는데 아래의 식으로 적용해보니 키움 영웅문과 동일하게 값이 나오네요. 혹시나 시스템 매매에 참고하시어 도움이 되시기 바랍니다.

 

def Calculation_Demark(stockCode) :
stockcode = stockCode
d_low = 0
d_high = 0

isDayStockChart = os.path.isfile('source\Candle_DataBase_Day.db')
if isDayStockChart :
   conn = sqlite3.connect('source\Candle_DataBase_Day.db')
   sqlCode = "SELECT * From '%s'" % str(stockcode)
   Day_Data_df = pd.read_sql(sqlCode, conn, index_col=None)
else :
   return d_low, d_high

Day_Data_df = Day_Data_df.sort_values(by=['date'], axis=0, ascending=True)
if Day_Data_df['open'].iloc[-2] > Day_Data_df['close'].iloc[-2] :
   x = (Day_Data_df['low'].iloc[-2] + Day_Data_df['high'].iloc[-2] + Day_Data_df['close'].iloc[-2] +
   Day_Data_df['low'].iloc[-2]) / 2
elif Day_Data_df['open'].iloc[-2] < Day_Data_df['close'].iloc[-2] :
   x = (Day_Data_df['low'].iloc[-2] + Day_Data_df['high'].iloc[-2] + Day_Data_df['close'].iloc[-2] +
   Day_Data_df['high'].iloc[-2]) / 2
else :
   x = (Day_Data_df['low'].iloc[-2] + Day_Data_df['high'].iloc[-2] + Day_Data_df['close'].iloc[-2] +
   Day_Data_df['close'].iloc[-2]) / 2
d_high = x - Day_Data_df['low'].iloc[-2]
d_low = x - Day_Data_df['high'].iloc[-2]
return d_low, d_high

'파이썬(PYTHON)' 카테고리의 다른 글

재무제표, 투자지표의 Python 코드 구현  (0) 2021.08.27
RPA를 위한 Python 활용  (0) 2021.08.21
TALIB Library 모듈  (0) 2021.07.01
KRX VIX 지수 웹크롤링  (0) 2021.06.29
python 문자열 응용  (0) 2021.02.16

+ Recent posts