Git Product home page Git Product logo

stockanalysisinpython's Introduction

파이썬 증권 데이터 분석 (Stock Analysis in Python)

본 깃허브에서는 『파이썬 증권 데이터 분석』(한빛출판사, 2020) 서적과 관련된 소스 코드와 추가 자료를 공유합니다.

  • 소스 코드는 각 장별 디렉터리에 존재하며, 이미지 파일들은 각 장별로 imgs 디렉터리에 존재합니다.

  • 114 페이지 소스코드의 이미지 파일 URL은 http://bit.ly/2JnsHnThttp://bit.ly/3ZZyeXQ 변경됐습니다.

  • 지면 관계 상 싣지 못한 파이썬 내장함수표와 AES-256 암복호화 실습은 10_Appendix_(Python_Built-in_Functions_and_AES-256_Encryption).pdf 파일을 참고하시기 바랍니다.

  • 서적에 삽입된 그림의 PPT 원본은 PowerPoint_Materials.pptx 파일에 있습니다.

시세조회 DB 업데이트 및 시세조회 API 빠른 사용법

책이 출간된지 제법 시간이 흘렀고 파이썬 라이브러리에도 변경된 내용이 많아서 최신 라이브러리 간 호환성이 확보되지 않을 수 있습니다. 시세조회 DB를 빠르게 구축해서 시세조회 API를 사용하고자 하시는 분은 아래처럼 requirements.txt에 명시된 라이브러리 버전으로 설치하시 바랍니다. (2024-03-03 기준)

  1. Python 설치
    ① Win+R키를 눌러서 실행창이 나오면 appwiz.cpl를 입력한 후 '프로그램 변경 및 제거' 창에서 기존에 설치된 Python을 전부 제거
    https://www.python.org/ftp/python/3.8.1/python-3.8.1-amd64.exe 다운로드
    ③ 설치 프로그램을 실행한 후 'Add Python 3.8 to PATH' 체크박스에 체크한 후 'Install Now'로 설치
    ④ Python 설치가 완료되면 명령창을 새로 실행해서 python --version 명령으로 Python 3.8.1이 설치됐는지 확인
  2. Python 라이브러리 설치
    https://github.com/INVESTAR/StockAnalysisInPython/blob/master/02_Python_Programming/requirements.txt 다운로드
    ② c:\Users\hwang\Downloads>python -m pip install --upgrade pip
    ③ c:\Users\hwang\Downloads>pip install -r requirements.txt
  3. Investar 데이터베이스 생성
    https://mariadb.com/downloads/ 접속
    ② MariaDB Community -> Windows 64bit -> 10.5.24GA 다운로드해서 실행
    ③ 바탕화면에 생성된 HediSQL 아이콘을 더블 클릭하여 실행한 후 Investar DB를 utf8_general_ci 로 생성 HeidiSQL
    ④ 쿼리 탭을 클릭해서 테이블 생성 쿼리를 실행
    CREATE TABLE IF NOT EXISTS company_info ( code VARCHAR(20), company VARCHAR(40), last_update DATE, PRIMARY KEY (code) ); CREATE TABLE IF NOT EXISTS daily_price ( code VARCHAR(20), date DATE, open BIGINT(20), high BIGINT(20), low BIGINT(20), close BIGINT(20), diff BIGINT(20), volume BIGINT(20), PRIMARY KEY (code, date) );
  4. myPackage 생성 및 API 호출
    ① c:\myPackage\Investar 폴더를 생성
    https://github.com/INVESTAR/StockAnalysisInPython/tree/master/05_Stock_Price_API/Investar 폴더로부터 Analyzer.py, DBUpdaterEx.py, MarketDB.py를 다운로드 받아서 c:\myPackage\Investar 폴더로 복사
    ③ c:\myPackage\Investar>python DBUpdaterEx.py 실행해서 데이터베이스를 업데이트 DBUpdaterEx2024-03-03
    ④ IDLE에서 c:\myPackage\Invesat\Analyzer.py 파일을 실행한 뒤 아래처럼 API 호출 GetDailyPrice

네이버 금융의 웹 스크레이핑 차단에 대한 안내

아래 내용은 2021년 10월 11일에 발행된 5쇄 서적부터 반영되어 있으며, 기존에 발행된 1쇄~4쇄 서적을 구매하신 분들은 아래 내용을 참고하시기 바랍니다.

2021년 1월 7일 저녁부터 네이버 금융에서 웹 크롤러의 스크레이핑을 차단하기 시작했습니다. 따라서 기존 방식대로 urllib.request.urlopen()이나 pandas.read_html()를 사용할 경우, 더 이상 네이버 금융의 웹 페이지를 읽어올 수 없습니다.

네이버 금융 서버에서 http 패킷 헤더의 웹 브라우저 정보(User-Agent)를 체크하기 때문에, 웹 스크레이핑을 하려면 requests 라이브러리를 이용해 웹 브라우저 정보를 보내야 합니다. 변경된 코드는 아래와 같으며 DBUpdaterEx.py로 깃헙에 올려두었습니다.

DBUpdaterEx

http://httpbin.org/user-agent 사이트에 접속하시면 현재 본인이 사용하는 웹 브라우저에 대한 정보를 확인할 수 있습니다. 샘플 코드의 "Mozilla/5.0"를 실제로 본인이 사용하는 웹 브라우저 정보로 변경하면 네이버 금융 페이지에서 차단될 가능성을 조금 더 줄일 수 있습니다.

stockanalysisinpython's People

Contributors

investar avatar kimmsj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

stockanalysisinpython's Issues

mplfinance 신형에서 한글 폰트 사용 문제

mplfinance에서 아직 label 기능은 구현이 안되어 있는 것 같고, title만이라도 '삼성전자 캔들 차트' 처럼 한글로 넣어보려고 하는데 폰트 문제가 있다고 warning이 뜨네요.
찾아보니 matplotlib에서 한글 폰트를 사용하려면 아래와 같이 폰트 설정을 해주면 된다고 해서 테스트 해보니, 일반적인 라인 그래프는 테스트 해보았을 때 title에 제대로 한글이 출력되어 나오는데, mplfinance로 그린 캔들챠트는 여전히 폰트 warning이 뜨면서 title에 한글이 제대로 나오지가 않네요.
무엇이 문제일까요?

from matplotlib import font_manager, rc
import platform

path = 'c:/Windows/Fonts/malgun.ttf'
font_name = font_manager.FontProperties(fname=path).get_name()
rc('font', family=font_name)

ch06_03_BollingerBand.py에서 import matplotlib.pyplot as plt 오류가 발생합니다

C:\myPackage>python c:\myPackage\ch06_03_BollingerBand.py
Traceback (most recent call last):
File "c:\myPackage\ch06_03_BollingerBand.py", line 1, in
import matplotlib.pyplot as plt
File "C:\Python38-32\lib\site-packages\matplotlib_init_.py", line 107, in
from . import _api, cbook, docstring, rcsetup
File "C:\Python38-32\lib\site-packages\matplotlib\rcsetup.py", line 26, in
from matplotlib.colors import Colormap, is_color_like
File "C:\Python38-32\lib\site-packages\matplotlib\colors.py", line 82, in
from matplotlib import _api, cbook, scale
File "C:\Python38-32\lib\site-packages\matplotlib\scale.py", line 18, in
from matplotlib.ticker import (
File "C:\Python38-32\lib\site-packages\matplotlib\ticker.py", line 179, in
from matplotlib import transforms as mtransforms
File "C:\Python38-32\lib\site-packages\matplotlib\transforms.py", line 46, in
from matplotlib._path import (
ImportError: DLL load failed while importing _path: 지정된 모듈을 찾을 수 없습니다.

8장 자동 매매 관련

자동 매매 사용한 지 1주일 안 되었습니다.

오늘이 월요일인데, 3월 1일이라 공휴일입니다.

Creon Plus는 잘 실행 되어 있는데 아래와 같은 오류 메세지를 슬랙으로 받았습니다.

get_target_price() -> exception! (-2147352567, '예외가 발생했습니다.', (0, None, 'DibRq 통신요청 실패하였습니다. 다시 요청하십시오.(RQID:-2)', None, 0, -2147467259), None)
11:11
get_movingavrg(5) -> exception! (-2147352567, '예외가 발생했습니다.', (0, None, 'DibRq 통신요청 실패하였습니다. 다시 요청하십시오.(RQID:-2)', None, 0, -2147467259), None)
11:11
get_movingavrg(10) -> exception! (-2147352567, '예외가 발생했습니다.', (0, None, 'DibRq 통신요청 실패하였습니다. 다시 요청하십시오.(RQID:0)', None, 0, -2147467259), None)

변동성이 파악되지 않아서 실행이 안 될 것이라 생각했는데

KRX 휴장일이라 증권사 시스템도 운영 안 하거나 기능 동작 안 할 가능성이 있으니

토요일이나 일요일이면 자동 종료 체크 외에

공휴일 체크 기능도 필요한 것 같습니다.

어떻게 처리해야 좋을 지 문의합니다.

chap4 질문 있습니다.

4.4.4장 전체 페이지 읽어오기에서

df = pd.DataFrame()
sise_url = 'https://finance.naver.com/item/sise_day.nhn?code=068270'  
for page in range(1, int(last_page)+1):
    page_url = '{}&page={}'.format(sise_url, page)  
    df = df.append(pd.read_html(page_url, header=0)[0])

이 부분에서 아래와 같은 오류가 뜹니다.

ValueError Traceback (most recent call last)
in
3 for page in range(1, int(last_page)+1):
4 page_url = '{}&page={}'.format(sise_url, page)
----> 5 df = df.append(pd.read_html(page_url, header=0)[0])

~\anaconda3\lib\site-packages\pandas\util_decorators.py in wrapper(*args, **kwargs)
294 )
295 warnings.warn(msg, FutureWarning, stacklevel=stacklevel)
--> 296 return func(*args, **kwargs)
297
298 return wrapper

~\anaconda3\lib\site-packages\pandas\io\html.py in read_html(io, match, flavor, header, index_col, skiprows, attrs, parse_dates, thousands, encoding, decimal, converters, na_values, keep_default_na, displayed_only)
1084 )
1085 validate_header_arg(header)
-> 1086 return _parse(
1087 flavor=flavor,
1088 io=io,

~\anaconda3\lib\site-packages\pandas\io\html.py in _parse(flavor, io, match, attrs, encoding, displayed_only, **kwargs)
915 break
916 else:
--> 917 raise retained
918
919 ret = []

~\anaconda3\lib\site-packages\pandas\io\html.py in _parse(flavor, io, match, attrs, encoding, displayed_only, **kwargs)
896
897 try:
--> 898 tables = p.parse_tables()
899 except ValueError as caught:
900 # if io is an io-like object, check if it's seekable

~\anaconda3\lib\site-packages\pandas\io\html.py in parse_tables(self)
215 list of parsed (header, body, footer) tuples from tables.
216 """
--> 217 tables = self._parse_tables(self._build_doc(), self.match, self.attrs)
218 return (self._parse_thead_tbody_tfoot(table) for table in tables)
219

~\anaconda3\lib\site-packages\pandas\io\html.py in _parse_tables(self, doc, match, attrs)
545
546 if not tables:
--> 547 raise ValueError("No tables found")
548
549 result = []

ValueError: No tables found

어떻게 해결하면 좋을까요?

네이버 주식불러오기

mk.get_daily_price('NAVER', '2019-09-30','2019.10.4') #cmd에서 실행
Empty DataFrame #결과
Columns: [code, date, open, high, low, close, diff, volume]
Index: []

           삼성전자  SK하이닉스   현대자동차 NAVER

date
2017-01-10 1862000 49750 152000 NaN
2017-01-11 1914000 51600 148500 NaN
2017-01-12 1940000 50600 148000 NaN
2017-01-13 1873000 50300 149000 NaN
2017-01-16 1833000 49300 150500 NaN
... ... ... ... ...
2018-04-23 2595000 84400 159500 NaN
2018-04-24 2523000 82100 162500 NaN
2018-04-25 2520000 82400 164000 NaN
2018-04-26 2607000 86500 156500 NaN
2018-04-27 2650000 87100 158000 NaN

로 결과가 나옵니다. 원래 네이버 주식 안나오는 것이 정상인가요?

질문 하나 드릴게요.

책 보고 열심히 따라하는 중인데, 중간 쯤 되서 질문을 좀 드릴게요

` def replace_into_db(self, df, num, code, company):

    """네이버에서 읽어온 주식 시세를 DB에 REPLACE"""
    with self.conn.cursor() as curs:
        for r in df.itertuples():
            sql = f"REPLACE INTO daily_price VALUES ('{code}', "\
                f"'{r.date}', {r.open}, {r.high}, {r.low}, {r.close}, "\
                f"{r.diff}, {r.volume})"
            curs.execute(sql)
        self.conn.commit()
        print('[{}] #{:04d} {} ({}) : {} rows > REPLACE INTO daily_'\
            'price [OK]'.format(datetime.now().strftime('%Y-%m-%d'\
            ' %H:%M'), num+1, company, code, len(df)))`

이 부분에서 책 설명에는 pandas 명령어인 to_sql 을 쓰는 방법도 있는데, 단순화를 위해서 위와 같이 사용한다고 했는데..
책에서 나온 설명처럼 db 안에 table 을 ticker 로 만들기 위해 to_sql 을 사용하고자 하는데.

TypeError: unhashable type: 'list'

가 계속 나옵니다. sqlite 을 사용시에는 잘 들어가는데, 마리아db 사용시 다른 방법이 필요한가요..?

챕터5 > Analyzer.py error

안녕하세요 하나하나 코드 작성하다가 에러가 발생해, 예제 코드를 사용해도 안돼, 질문올립니다.

262pg의 EfficientFrontier.py를 실행시켰는데,

mk=Analyzer.MarketDB
stocks=['삼성전자', 'SK하이닉스', '현대자동차', 'NAVER']
df=pd.DataFrame()
for s in stocks:
df[s] = mk.get_daily_price(s, '2016-05-05', '2018-04-27')['close']

에서

end_date is initialized to '2020-11-15'
File "c:/Users/skwjd/OneDrive/문서/myPackage/8_EfficientFrontier.py", line 10, in
df[s] = mk.get_daily_price(s, '2016-05-05', '2018-04-27')['close']
File "c:\Users\skwjd\OneDrive\문서\myPackage\Woo\Analyzer.py", line 78, in get_daily_price
codes_keys=list(self.codes.keys())
AttributeError: 'str' object has no attribute 'codes'

라고 터미널에서 출력되었습니다.

여기서 문제점은

  1. mk.get_daily_price(s, '2016-05-05', '2018-04-27')['close']에서
    analyzer.py 의 def get_daily_price(self, code, start_date=None, end_date=None)를 인식 잘못한 점.
    (터미널에서는 end_date를 none으로 인식했습니다.)

  2. 코드를 조금만 수정해서 get_daily_price함수 code인자에 code를 넣어도
    codes_keys=list(self.codes.keys())
    AttributeError: 'str' object has no attribute 'codes'
    라는 에러창이 뜬다는 점입니다.

문제점과 해결방안을 알수 있을까요?

CH4 페이지읽어오지 오류

`import pandas as pd
from urllib.request import urlopen
from bs4 import BeautifulSoup
import mplfinance as mpf

url = 'https://finance.naver.com/item/sise_day.nhn?code=068270&page=1'
with urlopen(url) as doc:
html = BeautifulSoup(doc, 'lxml')
pgrr = html.find('td', class_='pgRR')
s = str(pgrr.a['href']).split('=')
last_page = s[-1] `

을 실행하면 html이 없는 페이지를 가져와서 'NoneType' object has no attribute 'a'이 에러가 뜹니다 이런 경우는 어떤식으로 진행해야될까요?
requests를 이용해서 해봐야될까요?

6.1 효율적 투자선 구하기 코드 관련 p256

get_daily_price함수를 이용해 데이터프레임을 생성하는 코드에서 f5누르고 실행결과를 살펴보는데 에러사항이나 df결과값 그 어느것도 출력되지 않는데 어떻게 하는건가요? get_daily_price 함수에 회사명만 넣으면 데이터 출력이 되는 반면 일자를 지정하면 아예 나타나지 않는데 무엇이 문제인가요?

아래는 직접 작성한 코드입니다.

  1. get_daily_price함수에 일자 지정했을 때

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from Investar import Analyzer
mk = Analyzer.MarketDB()
stocks = ['삼성전자','SK하이닉스','현대자동차','NAVER']

df = pd.DataFrame()
for stock in stocks:
... df[stock] = mk.get_daily_price(stock, '2016-01-04','2018-04-27')['close']
...
df
Empty DataFrame
Columns: [삼성전자, SK하이닉스, 현대자동차, NAVER]
Index: []

  1. get_daily_price함수에 기본값으로 지정한 경우

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from Investar import Analyzer
mk = Analyzer.MarketDB()
stocks = ['삼성전자','SK하이닉스','현대자동차','NAVER']

df = pd.DataFrame()
for stock in stocks:
... df[stock] = mk.get_daily_price(stock)['close']
...
start_date is initialized to '2020-04-06'
end_date is initialized to '2021-04-06'
start_date is initialized to '2020-04-06'
end_date is initialized to '2021-04-06'
start_date is initialized to '2020-04-06'
end_date is initialized to '2021-04-06'
start_date is initialized to '2020-04-06'
end_date is initialized to '2021-04-06'
df
삼성전자 SK하이닉스 현대자동차 NAVER
date
2021-03-22 82000 138000 229000 396500
2021-03-23 81800 135000 226500 386000
2021-03-24 81000 133500 221000 387000
2021-03-25 81200 133000 218000 380000
2021-03-26 81500 135000 215500 383000
2021-03-29 81600 132000 215500 372000
2021-03-30 82200 134500 219500 376500
2021-03-31 81400 132500 218000 377000
2021-04-01 82900 140500 219000 378500
2021-04-02 84800 141000 233500 379500
2021-04-05 85400 143000 234000 377000

** 참고로 Visual Studio Code에서 작업을 진행하고 있는데 터미널에서 실행하는 것과 그렇지 않고 F5로 곧바로 실행할 때와 출력 결과가 다른데 정상적으로 진행되고 있는지도 잘 모르겠습니다.
f5 단축키로 실행했을 때 결과는 다음과 같이 데이터 프레임이 출력되지 않은 채로 나옵니다 기본값으로 지정해두고 실행해도 이렇게만 나오고 데이터프레임은 출력되지 않는건데 내부적으로 정상적으로 진행되는지 잘 모르겠습니다.
start_date is initialized to '2020-04-06'
end_date is initialized to '2021-04-06'
start_date is initialized to '2020-04-06'
end_date is initialized to '2021-04-06'
start_date is initialized to '2020-04-06'
end_date is initialized to '2021-04-06'
start_date is initialized to '2020-04-06'
end_date is initialized to '2021-04-06'

ch08 01 Autoconncect.py

DibServer에 대한 내용이 책에는 있었는데 github에는 나오지 않았네요.
확인부탁드립니다.^^

가상환경에서 pip

tensorflow는 파이썬 버전 3.5~3.8까지 호환이 된다고 tensorflow사이트에 표시가 되어있습니다.

그래서 저는 파이썬 버전 3.8.0을 설치한 후 가상환경을 만들어서 밑에와 같이 tensorflow를 설치하려 했으나 실패했습니다.
어떤 것을 고쳐야 할까요?

image

변동성돌파전략 매매 수정에 관한 질문입니다.

책에 나온것을 따라서 조금씩 배워보고 있습니다.

변동성 돌파전략에서 당일 전략 매도를 익일 시초가 매도로 바꾸려는데 넘 힘드네요.
ETF자동 매매에서 익일 시초가 일괄 매도로 변경 하려면 어떻게 코딩을 해야 할까요? ^^
도움을 주실 수 있을까 하고 여쭈어 봅니다.

챕터5 > DBUpdater.py

안녕하세요

DBUpdater.py에 문제가 있어 고민하다가 해결해 다른분들도 똑같은 문제가 있을 까봐 문제와 해결방법을 올립니다.

Traceback (most recent call last):
File "C:\Python\Python38\lib\site-packages\pandas\core\indexes\base.py", line 2889, in get_loc
return self._engine.get_loc(casted_key)
File "pandas_libs\index.pyx", line 70, in pandas._libs.index.IndexEngine.get_loc
File "pandas_libs\index.pyx", line 97, in pandas._libs.index.IndexEngine.get_loc
File "pandas_libs\hashtable_class_helper.pxi", line 1675, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas_libs\hashtable_class_helper.pxi", line 1683, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'code'

The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "c:/Users/skwjd/OneDrive/문서/myPackage/Woo/te.py", line 169, in
dbu.execute_daily()
File "c:/Users/skwjd/OneDrive/문서/myPackage/Woo/te.py", line 136, in execute_daily
self.update_comp_info()
File "c:/Users/skwjd/OneDrive/문서/myPackage/Woo/te.py", line 58, in update_comp_info
self.codes[df['code'].values[idx]] = df['company'].values[idx]
File "C:\Python\Python38\lib\site-packages\pandas\core\frame.py", line 2899, in getitem
indexer = self.columns.get_loc(key)
File "C:\Python\Python38\lib\site-packages\pandas\core\indexes\base.py", line 2891, in get_loc
raise KeyError(key) from err
KeyError: 'code'

이처럼 KeyError: 'code'가 뜰 경우
def update_comp_info(self):
"""종목코드를 company_info 테이블에 업데이트한 후 딕셔너리에 저장"""
부분에서

        self.codes[df['CODE'].values[idx]]=df['company'].values[idx] 로 하시면 됩니다.

책에서는 ['code']라고 소문자로 되어있지만 ["CODE"]라 해야 해결이 되더라구요 .
저만의 문제인지 다들 문제가 생길지는 모르겠지만 참고하세요!

아래 코드를 _test_.py 파일이라고 예를 들어서 설명을 드리겠습니다.

아래 코드를 _test_.py 파일이라고 예를 들어서 설명을 드리겠습니다.
(저는 Investar의 첫글자를 대문자 i로 사용했으니 참고하시기 바랍니다.)

from Investar import Analyzer
mk = Analyzer.MarketDB()
df = mk.get_daily_price('삼성전자', '2021-01-25', '2021-01-29')
print(df)

_test_.py 코드의 첫 줄에서 Investar 패키지의 Analyzer 모듈을 import 하고 있습니다.
따라서, _test_.py 파일이 존재하는 디렉터리에 Investar 디렉터리가 존재해야 하며,
Investar 디렉터리 안에는 Analyzer.py와 MarketDB.py 파일이 존재해야 합니다.
즉 아래와 같은 구조로 파일이 존재해야 합니다.

Investar

실제로 _test_.py를 실행해 보면 아래와 같이 실행됨을 확인할 수 있습니다.

MarketDB

Originally posted by @INVESTAR in #28 (comment)

챕터5 > DBUpdater.py

안녕하세요
DBUpdater.py를 책에 있는대로 경로와 깃헙에서 파일을 다운받아서 실행했는데 daily_price에 저장된 데이터가 종목 당 10일치만 저장이 됩니다.

DBUpadter.py 설명을 보면 처음 모든 데이터를 저장하고 나서 10일치씩 업데이트 되는 구조인데, 마지막 페이지부터 모든 데이터가 저장되는 부분이 실행이 안 된것 같아요.

DBUpdater.py 파일을 열어서 수정해야 하는 부분이 있을까요?


책에 나오는 내용대로 config.json 파일을 검색해서 메모장으로 열고 페이지수를 100으로 바꾸고 저장하니 100 page로 저장이 됩니다. 모든 종목별로 100 page 저장하고 나면 config 파일을 다시 수정하면 될 것 같습니다

DBUpdater를 FinanceDataReader 데이터로 불러올 때 오류 문의

일전에 한 번 문의 드린 적이 있는데, 네이버는 수정종가를 지원하지 않아서,
수정종가 데이터를 가져오기 위해, FinanceDataReader를 사용하기로 하고,
책의 DBUpdater 코드를 응용해서 일일시세를 FinanceDataReader에서 읽어오는 코드를
작성해 보았는데요...
실행을 해보면 에러 발생은 없는데, 몇 개 데이터를 불러와서 데이터베이스에 Replace 한 후에는
무작위로 멈춰서 버리네요...
중간 중간 프린트 문을 넣어 확인해 보니....
아래의 라인에서 멈추는 것 까지는 확인했습니다.
fdr.DataReader(code, start_date, end_date)

위의 메소드에 들어갈 종목코드와 시작일, 종료일 모두 제대로 들어오는 것도 확인을 했는데...
어느 순간 freeze가 되네요...
어떤 때는 10개 내외의 데이터를 읽어오고 멈추고, 어떤 때는 50~60개 까지 가져오고 멈추고는 합니다.
읽어 온 부분까지는 시세 데이터가 MariaDB에 제대로 저장이 된 것 까지도 확인은 했습니다.
이유를 찾을 수가 없어 문의를 드려 봅니다.
감사합니다.

아래는 작성한 코드입니다.

import matplotlib.pyplot as plt
import FinanceDataReader as fdr
import mplfinance as mpf
import pandas as pd
from bs4 import BeautifulSoup
import pymysql, calendar, time, json
import requests
from datetime import datetime
from threading import Timer

class DBUpdater:

def __init__(self):
    """생성자: MariaDB 연결 및 종목코드 딕셔너리 생성"""
    self.conn = pymysql.connect(host='localhost', user='root',
        password='******', db='fdr_data', charset='utf8')
    self.conn.commit()
    self.codes = dict()        #codes를 딕셔너리 형태로 정의


def execute_daily(self):
    """company_info와 daily_price 테이블 업데이트"""
    self.update_comp_info()
 
    start_date = '2011-01-01'   # 일일 주가를 불러올 시작일과 종료일을 지정
    end_date = '2021-03-26'  
    self.update_daily_price(start_date, end_date)


def update_comp_info(self):
    """종목코드를 company_info 테이블에 업데이트 한 후 딕셔너리에 저장"""
    sql = "SELECT * FROM company_info"
    df = pd.read_sql(sql, self.conn)
    for idx in range(len(df)):
        self.codes[df['code'].values[idx]] = df['company'].values[idx]
    with self.conn.cursor() as curs:
        today = datetime.today().strftime('%Y-%m-%d')
        krx = self.read_krx_code()
        for idx in range(len(krx)):
            code = krx.code.values[idx]
            company = krx.company.values[idx]             
            sql = f"REPLACE INTO company_info (code, company, last"\
                  f"_update) VALUES ('{code}', '{company}', '{today}')"
            curs.execute(sql)
            self.codes[code] = company
            tmnow = datetime.now().strftime('%Y-%m-%d %H:%M')
            print(f"[{tmnow}] #{idx+1:04d} REPLACE INTO company_info "\
                  f"VALUES ({code}, {company}, {today})")
        self.conn.commit()
        print('')           


def read_krx_code(self):
    """KRX로부터 상장기업 목록 파일을 읽어와서 데이터프레임으로 반환"""
    url = 'http://kind.krx.co.kr/corpgeneral/corpList.do?method='\
        'download&searchType=13'
    krx = pd.read_html(url, header=0)[0]
    krx = krx[['종목코드', '회사명']]
    krx = krx.rename(columns={'종목코드': 'code', '회사명': 'company'})
    krx.code = krx.code.map('{:06d}'.format)
    return krx


def update_daily_price(self, start_date, end_date):
    """KRX 상장법인의 주식 시세를 FDR로부터 읽어서 DB에 업데이트"""
    for idx, code in enumerate(self.codes):
        df = self.read_fdr(code, self.codes[code], start_date, end_date)
        if df is None:
            continue
        self.replace_into_db(df, idx, code, self.codes[code])
       

def read_fdr(self, code, company, start_date, end_date):
    """FinanceDataReader에서 주식 시세를 읽어서 데이터프레임으로 반환"""

    try:
        df = pd.DataFrame()
        print(code, company, start_date, end_date)
        df = df.append(fdr.DataReader(code, start_date, end_date))   # 여기서 항상 freeze가 되어 넘어가지를 않습니다.
        print('{}({}) is downloading |'.format(company, code), end="\r")
        print('====================================================')
        df = df.reset_index()      # FinanceDataReader로 읽어오면 Date값이 인덱스로 설정되므로, 인덱스를 칼럼으로 변경
        df = df.rename(columns={'Date':'date','Close':'close','Change':'change'
            ,'Open':'open','High':'high','Low':'low','Volume':'volume'})
        df = df.dropna()
        df[['close', 'open', 'high', 'low', 'volume']] = df[['close',
            'open', 'high', 'low', 'volume']].astype(int)
        df = df[['date', 'open', 'high', 'low', 'close', 'change', 'volume']]
    except Exception as e:
        print('Exception occured :', str(e))
        return None
    return df


def replace_into_db(self, df, num, code, company):
    """FinanceDataReader에서 읽어서 만든 주식 시세를 DB에 REPLACE"""
    with self.conn.cursor() as curs:
        for r in df.itertuples():
            sql = f"REPLACE INTO daily_price VALUES ('{code}','{r.date}', {r.open}, {r.high}, {r.low}, {r.close}, {r.change}, {r.volume})"
            curs.execute(sql)
        self.conn.commit()
        print('[{}] #{:04d} {}({}) : {} rows > REPLACE INTO daily_'\
              'price!'.format(datetime.now().strftime('%Y-%m-%d'\
              ' %H:%M'), num+1, company, code, len(df)))


def __del__(self):
    """소멸자: MariaDB 연결 해제"""
    self.conn.close()

if name == 'main':
dbu = DBUpdater()
dbu.execute_daily()

MariaDB의 테이블 구성은 아래와 같이 하였습니다.

company_info 테이블
daily_price 테이블

파이썬 가상환경

image

venv 가상환경 만든 후 파이썬 버전을 확인해보니 64비트 파이썬 버전이 표시됩니다. 어떻게 해결해야하나요?

7.6.3 Backtrader 라이브러리에 5장의 데이터 적용 방법

안녕하세요?
현재 교재의 7.6.3과 7.6.4절의 Backtrader 라이브러리 사용시, 아래와 같이 야후 파이낸스 데이터를 가져와서 테스트를 했는데요...

data = bt.feeds.YahooFinanceData(dataname='036570.KS',
fromdate=datetime(2017, 1, 1), todate=datetime(2019, 12, 1))

야후 파이낸스 데이터가 아닌, 5장에서 구축한 네이버 금융으로부터 스크레이핑한 데이터를 적용해서 백테스트를 하려면 어떻게 수정을 하면 될지 문의 드립니다.

감사합니다.

cp5 Analyzer.py

안녕하세요 .
본문 247-248쪽에 질문 드립니다.
일별 시세 조회 API 전체 소스코드를 실행하려 합니다. 가장 최근 수정본으로 헤더 추가 및 requests 라이브러리 추가 모두 완료하였고 코드는 복붙이라 수정한 것이 없습니다. 터미널으로 파이썬 쉘에 접속하여 다음과 같이 mk.get_daily_price('삼성전자','2019-09-30','2019.10.4') 라고 치면 결과값이 계속 아래와 같이 나옵니다.
Empty DataFrame
Columns: [code, date, open, high, low, close, diff, volume]
Index: []

>>> mk.codes['018260'] 라고 입력한 경우
'삼성에스디에스'
라고 잘만 뜨는데 무엇이 문제인지 궁금합니다.

챕터5 > DBUpdater.py + Analyzer.py + MarketDB.py Error

예제 코드로 진행해보았는데도 오류가 생겨 문의 남깁니다

DBUpdater error

Traceback (most recent call last):
File "C:\Users\Rayrobin.Lee\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\indexes\base.py", line 2897, in get_loc
return self._engine.get_loc(key)
File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas/_libs/hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'code'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "DBUpdater.py", line 175, in
dbu = DBUpdater()
File "DBUpdater.py", line 44, in init
self.update_comp_info()
File "DBUpdater.py", line 64, in update_comp_info
self.codes[df['code'].values[idx]] = df['company'].values[idx].encode('utf8')
File "C:\Users\Rayrobin.Lee\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\frame.py", line 2995, in getitem
indexer = self.columns.get_loc(key)
File "C:\Users\Rayrobin.Lee\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\indexes\base.py", line 2899, in get_loc
return self._engine.get_loc(self._maybe_cast_indexer(key))
File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas/_libs/hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'code'

위와 같이 키값 오류 가 발생

Analyzer error

mk = Analyzer.MarketDB()
Traceback (most recent call last):
File "", line 1, in
File "C:\Users\Rayrobin.Lee\AppData\Local\Programs\Python\Python38\lib\Investar\Analyzer.py", line 10, in init
self.conn = pymysql.connect(host='localhost', user='root',
File "C:\Users\Rayrobin.Lee\AppData\Local\Programs\Python\Python38\lib\site-packages\pymysql_init_.py", line 94, in Connect
return Connection(*args, **kwargs)
File "C:\Users\Rayrobin.Lee\AppData\Local\Programs\Python\Python38\lib\site-packages\pymysql\connections.py", line 327, in init
self.connect()
File "C:\Users\Rayrobin.Lee\AppData\Local\Programs\Python\Python38\lib\site-packages\pymysql\connections.py", line 588, in connect
self._request_authentication()
File "C:\Users\Rayrobin.Lee\AppData\Local\Programs\Python\Python38\lib\site-packages\pymysql\connections.py", line 853, in _request_authentication
auth_packet = self._read_packet()
File "C:\Users\Rayrobin.Lee\AppData\Local\Programs\Python\Python38\lib\site-packages\pymysql\connections.py", line 676, in _read_packet
packet.raise_for_error()
File "C:\Users\Rayrobin.Lee\AppData\Local\Programs\Python\Python38\lib\site-packages\pymysql\protocol.py", line 223, in raise_for_error
err.raise_mysql_exception(self._data)
File "C:\Users\Rayrobin.Lee\AppData\Local\Programs\Python\Python38\lib\site-packages\pymysql\err.py", line 107, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

=> DBUpdater의 self.conn 과 동일하게 작성하여 넣어두었는데, 이쪽에서만 오류가 발생

파이선 패키지 리스트 requirements.txt 업데이트 요청

파이선 3.9버전을 설치하고 사이트의 requirements.txt를 이용해서 설치하려는데 버전에러가 나는 것 같습니다.

ERROR: Command errored out with exit status 1:
command: 'c:\users\dad\appdata\local\programs\python\python39\python.exe' 'c:\users\dad\appdata\local\programs\python\python39\lib\site-packages\pip' install --ignore-installed --no-user --prefix 'C:\Users\dad\AppData\Local\Temp\pip-build-env-oeuzli7i\overlay' --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel 'Cython>=0.29.13' 'numpy==1.13.3; python_version=='"'"'3.6'"'"' and platform_system!='"'"'AIX'"'"'' 'numpy==1.14.5; python_version>='"'"'3.7'"'"' and platform_system!='"'"'AIX'"'"'' 'numpy==1.16.0; python_version=='"'"'3.6'"'"' and platform_system=='"'"'AIX'"'"'' 'numpy==1.16.0; python_version>='"'"'3.7'"'"' and platform_system=='"'"'AIX'"'"''
cwd: None
Complete output (294 lines):

이렇게 에러가 시작하는데 Pandas버전을 1.22로 수정을하니까 진행을 하다가
scipy==1.4.1
Installing build dependencies ... error
하고 다시 멈춤니다

09장_삼성주가예측 Analyzer.MarketDB()

09장 삼성주가예측중에 Analyzer.MarketDB()를 못 받아오는지
데이터 프레임에 Empty라고 뜹니다.
print(raw_df)를 실행 시켰을 때

Colmun Non-Null Count Dtype

0 open 0 non-null object
1 high 0 non-null object
2 low 0 non-null object
3 volume0 non-null object
4 close 0 non-null object
dtype:object(5)
memory usage:0.0_bytes

라고 뜨는데 어떻게 해결해야 될까요? 무슨문제일까요?

8장에 대해서 질문이 있습니다.

크레온 api를 이용해서 주식프로그램 매매를 진행중입니다. 투자하고 있는 여러 ETF들 중에서 유독 한 종목의 ETF에 대해서

"xx종목명" "주문가능한 수량"EA : "현재가격" meets the buy condition!

이라는 문구가 출력은 되고 있는데 실제로 구매로 이뤄지지는 않고 있습니다.

원인을 스스로 생각해봤을때 현재 구매가능한 수량이 98EA라고 나오는데, 구매방식이 FOK방식이기 때문에 한번에 물량을 구매하지 못하고 따라서 주문을 취소하고 있다고 생각을 합니다. 여기서 첫번째 궁금한 점이 과연 이 추측이 맞는지를 궁금합니다.

그리고 두번째로는 만일 추측이 맞다면 여러 종목들 중에서 코드 수정을 통해서 특정 종목들은 구매방식을 IOC방식으로 변경할수 있는지가 궁금합니다.

예를 들어서 #최유리 FOK 매수 주문의 마지막줄에

if str(code) = 특정 종목:
cpOrder.SetInputValue(0, "2")
cpOrder.SetInputValue(1, acc)
cpOrder.SetInputValue(2, accFlag[0])
cpOrder.SetInputValue(3, code)
cpOrder.SetInputValue(4, buy_qty)
cpOrder.SetInputValue(7, "1") 이 부분을 바꾸는 방법으로 수정이 가능한지를 묻고 싶습니다.
cpOrder.SetInputValue(8, "12")

Investar 모듈오류

from investar import Analyzer

ModuleNotFoundError: No module named 'investar'

investar 파일에 DBUpdater, Analyzer, MarketDB 복사해서 .py형식으로 넣어두었는데, 이런 문구가 뜨네요.
어떻게 하면 해결할 수 있을까요?

(참고로 파이썬 3.3 이후 버전입니다.)

저도 DBUpdater.py 에서 네이버 정보를 못 가져 옵니다.

저도 동일하게 오류가 발생하고 있어 원인을 찾다가 이곳에 와서 보니 다른 분들도 동일한 현상으로 이슈를 올렸네요.

html = BeautifulSoup(doc, "lxml")

이 부분에서 html 내용을 보면 아래와 같은 메시지가 나옵니다.

"방문하시려는 페이지의 주소가 잘못 입력되었거나,
페이지의 주소가 변경 혹은 삭제되어 요청하신 페이지를 찾을 수 없습니다.
입력하신 주소가 정확한지 다시 한번 확인해 주시기 바랍니다.

관련 문의사항은 고객센터에 알려주시면 친절히 안내해드리겠습니다. 감사합니다."

처리 방법이 나오면 공유를 부탁드립니다.

DBUpdater.py 실행 시 오류

안녕하세요. 파이썬을 전혀 모르는 독자입니다.
선생님 책을 보고 따라하는 중인데요.

DBUpdter.py 실행 시 다음 그림과 같이 오류가 발생하고 있어요.
Screen Shot 2021-02-21 at 5 04 55 PM

몇번을 다시 확인해봐도 책과 다른 부분은 없었구요.
해당 오류로 구글링 해봐도 해결이 안되네요.

확인 한번 부탁 드립니다.

네이버 금융 vs 야후 파이낸스 vs FinanceDataReader ?

안녕하세요?

책에서 사용한 네이버 금융에서 제공하는 데이터는, 책에서도 언급하신 것처럼 종가 데이터가 수정 종가가 아니다 보니, 액면분할 전의 날짜까지 포함해서 백 테스팅을 한다든지, 장기 이동평균선을 그리는데 액면분할 시점이 걸쳐 있는 경우 문제가 발생하네요...
그리고, 책에서 Yahoo Finance의 경우는 데이터가 비는 구간도 있고, 수정종가가 맞지 않아 사용을 못한다고 하셨고요....

해서, 다른 이슈에서 김황후 님이 언급하셨던 FinanceDataReader의 데이터를 확인해 보니, 종가도 수정 종가로 구성되어 있고,
Yahoo Finance에서 비어 있는 구간도 확인해 보니 데이터가 비는 곳도 없는 것 같습니다.

정리해 보면, 위의 3가지 데이터를 비교해 보았을 때 액면분할주식의 백 테스팅이나 기타 분석을 위해서는 FinanceDataReader의 데이터가 가장 적합할 듯해 보이는데, 책에서 네이버 금융의 데이터를 사용하신 이유가 궁금합니다...
깊이 있는 내용을 잘 모르는 초보라서 뭔가 제가 알지 못하는 이유가 있을 듯 싶어 문의를 드려 봅니다.
감사합니다.

7.5.5 슬랙으로 메시지 보내기 에러 질문드립니다.

안녕하세요 책보고 따라하는 코딩 초보입니다. 슬랙 메시지 보내기 부분에서, 분명 똑같이 따라한 것 같은데 이러한 에러가 생겼습니다. ch07_07_Slack_SendMessage.py를 실행했을 때도 같은 에러가 생깁니다. 원인이 무엇인지 알려주시면 감사하겠습니다. 파이썬 버전은 3.8.1입니다.

from slacker import Slacker
slack = Slacker('xoxb-1779311309207-1791005363445-bsjbUr5aGKl8QlB3sJreZHKA')
slack.chat.post_message('#trading', 'hello')
Traceback (most recent call last):
File "", line 1, in
File "C:\Users\82104\AppData\Local\Programs\Python\Python38\lib\site-packages\slacker_init_.py", line 498, in post_message
return self.post('chat.postMessage',
File "C:\Users\82104\AppData\Local\Programs\Python\Python38\lib\site-packages\slacker_init_.py", line 124, in post
return self.request(
File "C:\Users\82104\AppData\Local\Programs\Python\Python38\lib\site-packages\slacker_init
.py", line 102, in _request
raise Error(response.error)
slacker.Error: invalid_auth

TypeError: __init__() got an unexpected keyword argument 'df'

import pymysql

connection=pymysql.connect(host='localhost', port=3306,df='INVESTAR',
user='root', passwd='********', autocommit=True)

cursor=connection.cursor()
cursor.execute('SELECT VERSION();')
result=cursor.fetchone()

print('MariaDB version :{}'.format(result))
connection.close()

여기서
Traceback (most recent call last):
File "C:\myPackage_test_.py", line 4, in
user='root', passwd='1217chea', autocommit=True)
TypeError: init() got an unexpected keyword argument 'df'

라고 나오네요

인터넷에 검색해보니까
autocommit=True 제거하라는 것 같아서 없앴는데도 효과가 없습니다.
어떻게 해야하는 지 알려주시면 안될까요?

(참고로 어제까지는 오류가 뜨지 않았습니다. heidisql에 접속하려할때도 Access denied for user 'root'@'localhost' (using password: YES) 라고 뜨네요)

이전까지는 괜찮았는데 파이썬데이터 응용부분 들어가면서 앞으로 나아갈 수 없는 벽을 느끼는 것 같습니다. 아마 기본기가 부족해서 그런 듯 한데 무엇부터 해야할지도 모르겠습니다. 조언부탁드립니다.

DBupdater.py 네이버에서 막은 거 같은데요 방법이 없을까요?

안녕하세요 책 보고 열심히 이것저것 만들어서 투자 자동화에 많은 도움 받았습니다.
2021/1/7 저녁부터 업데이터가 작동하지 않아 확인해보니, 네이버 크롤링이 막힌 거 같습니다.
https://finance.naver.com/item/sise_day.nhn?code={code}
헤더를 넣어주면 에러는 뜨지 않지만, 표를 가져 오지는 못하는데, 어떻게 코드를 바꿔야 할까요? 이 책을 제대로 이용하려면, 네이버금융에서 시세정보를 가져와서 DB화해야 하는데 난감하네요. 대처방법 부탁드립니다.

Select 쿼리문 작성시 오류

connection =pymysql.connect(host='localhost', port=3306, db='INVESTAR', user='root', passwd='********', autocommit=True)
에서 문제가 발생되었는데

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 99] Cannot assign requested address)")

라고 뜨네요 어떤 문제가 있는건가요?

denied for user

질문 계속 드려 번거로우실텐데 답변 성실히 해주셔서 감사합니다.
이거 하나 더 물어보겠습니다.

import pymysql

connection=pymysql.connect(host='localhost', port=3306,db='INVESTAR',
user='root', passwd='********', autocommit=True)

cursor=connection.cursor()
cursor.execute('SELECT VERSION();')
result=cursor.fetchone()

print('MariaDB version :{}'.format(result))
connection.close()

결과는
pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")로 나옵니다.

또한
heidisql로 접속하려할 시 Access denied for user 'root'@'localhost' (using password: YES)로 똑같이 표시됩니다.
혹시 방법이 없을까요?

웹 스크랩 관련 문의

안녕하세요, 저자님 책으로 파이썬을 공부중인 독자입니다. 웹 스크랩핑 관련해서, 책 188쪽 4.4.3의 코드를 실습하였는데

AttributeError: 'NoneType' object has no attribute 'a'

와 같은 에러가 계속 발생했습니다. 철자나 페이지 소스 등은 다 확인했는데 코드를 실행하면 자꾸 에러가 발생해서.. 앞선 글을 보니
웹 스크래핑 차단 이슈가 있다고 하셨는데 그것과 관련이 있는것인지, 아니면 다른 해결방법이 있는 것인지 문의드립니다.

좋은 책 써주셔서 다시 한번 감사드리고, 날이 추운데 항상 건강 유의하시길 바랍니다.
감사합니다.

장고 개발환경설정 오류

7.2.5 부분에서 소스코드를 그대로 받아적고 실행을 시켰을 때 hello라는 모듈은 없다고 오류가 나오네요... 그래서 C:\mySite\Investar에 있는 hello 파일을 C:\mySite\Investar\Investar로 옮기니
File "c:/mySite/Investar/Investar/urls.py", line 21, in
path('admin/', admin.site.urls),
File "C:\Users\user.conda\envs\minsung\lib\site-packages\django\utils\functional.py", line 240, in inner
self._setup()
File "C:\Users\user.conda\envs\minsung\lib\site-packages\django\contrib\admin\sites.py", line 540, in setup
AdminSiteClass = import_string(apps.get_app_config('admin').default_site)
File "C:\Users\user.conda\envs\minsung\lib\site-packages\django\apps\registry.py", line 154, in get_app_config
self.check_apps_ready()
File "C:\Users\user.conda\envs\minsung\lib\site-packages\django\apps\registry.py", line 135, in check_apps_ready
settings.INSTALLED_APPS
File "C:\Users\user.conda\envs\minsung\lib\site-packages\django\conf_init
.py", line 82, in getattr
self.setup(name)
File "C:\Users\user.conda\envs\minsung\lib\site-packages\django\conf_init
.py", line 67, in _setup
% (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment varnt variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

이런 오류가 발생하네요.. 어떤 것이 문제일지 알 수 있을까요?

챕터 8장 질문입니다.

안녕하세요. 이번에 책을 사서 8장에 auto trade 부분을 공부하고 있는 학생입니다.

ch08_03_EtfAlgoTrader.py 253줄에 있는 target_buy_count = 5 # 매수할 종목 수를 지정하면, print될 때, 변수에 입력한 값이 아닌 0으로 나옵니다. (종목수: 0)

이러한 원인이 무엇인지 알지 못해서 연락드립니다.
답변주시면 공부에 도움이 될것같습니다.

chap 5 질문있습니다 (mysql 관련)

5.1.2 네이버 금융 데이터로 시세 데이터베이스 구축하기에서

mk = Analyzer.MarketDB()
df = mk.get_daily_price('005930', '2017-07-10', '2018-06-30')

이러한 코드를 쳤을 때


OperationalError Traceback (most recent call last)
in
----> 1 mk = Analyzer.MarketDB()
2 df = mk.get_daily_price('005930', '2017-07-10', '2018-06-30')

~\Desktop\파이썬 증권 데이터 분석\chap5\Investar\Analyzer.py in init(self)
8 def init(self):
9 """생성자: MariaDB 연결 및 종목코드 딕셔너리 생성"""
---> 10 self.conn = pymysql.connect(host='localhost', user='root',
11 password='snake.land.', db='INVESTAR', charset='utf8')
12 self.codes = {}

~\anaconda3\lib\site-packages\pymysql\connections.py in init(self, user, password, host, database, unix_socket, port, charset, sql_mode, read_default_file, conv, use_unicode, client_flag, cursorclass, init_command, connect_timeout, read_default_group, autocommit, local_infile, max_allowed_packet, defer_connect, auth_plugin_map, read_timeout, write_timeout, bind_address, binary_prefix, program_name, server_public_key, ssl, ssl_ca, ssl_cert, ssl_disabled, ssl_key, ssl_verify_cert, ssl_verify_identity, compress, named_pipe, passwd, db)
351 self._sock = None
352 else:
--> 353 self.connect()
354
355 def enter(self):

~\anaconda3\lib\site-packages\pymysql\connections.py in connect(self, sock)
631
632 self._get_server_information()
--> 633 self._request_authentication()
634
635 if self.sql_mode is not None:

~\anaconda3\lib\site-packages\pymysql\connections.py in _request_authentication(self)
930 # https://dev.mysql.com/doc/internals/en/successful-authentication.html
931 if self._auth_plugin_name == "caching_sha2_password":
--> 932 auth_packet = _auth.caching_sha2_password_auth(self, auth_packet)
933 elif self._auth_plugin_name == "sha256_password":
934 auth_packet = _auth.sha256_password_auth(self, auth_packet)

~\anaconda3\lib\site-packages\pymysql_auth.py in caching_sha2_password_auth(conn, pkt)
264
265 data = sha2_rsa_encrypt(conn.password, conn.salt, conn.server_public_key)
--> 266 pkt = _roundtrip(conn, data)

~\anaconda3\lib\site-packages\pymysql_auth.py in _roundtrip(conn, send_data)
118 def _roundtrip(conn, send_data):
119 conn.write_packet(send_data)
--> 120 pkt = conn._read_packet()
121 pkt.check_error()
122 return pkt

~\anaconda3\lib\site-packages\pymysql\connections.py in _read_packet(self, packet_type)
723 if self._result is not None and self._result.unbuffered_active is True:
724 self._result.unbuffered_active = False
--> 725 packet.raise_for_error()
726 return packet
727

~\anaconda3\lib\site-packages\pymysql\protocol.py in raise_for_error(self)
219 if DEBUG:
220 print("errno =", errno)
--> 221 err.raise_mysql_exception(self._data)
222
223 def dump(self):

~\anaconda3\lib\site-packages\pymysql\err.py in raise_mysql_exception(data)
141 if errorclass is None:
142 errorclass = InternalError if errno < 1000 else OperationalError
--> 143 raise errorclass(errno, errval)

OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

이러한 에러가 발생합니다.

찾아보니 MySQL 비밀번호와 관련한 에러인 것 같은데 해결 방법을 도저히 모르겠습니다 ㅠㅠ

안녕하세요. DBUpdater.py 실행 시 갑자기 멈춰있습니다

기존엔 업데이트가 잘 되었는데,
다른 파이썬 파일에서 db에 접속하게끔 했다가
다시 DBUpdater.py 파일을
cmd창에서 경로를 c:\myPackage\Investar 로 설정한 후 python DBUpdater.py 실행하니

C:\Python38-32\lib\site-packages\pymysql\cursors.py:170: Warning: (1050, "Table 'company_info' already exists")
result = self._query(query)
C:\Python38-32\lib\site-packages\pymysql\cursors.py:170: Warning: (1050, "Table 'daily_price' already exists")
result = self._query(query)

여기에서 멈춰 있다가
Waiting for next update (2021-01-13 17:00) ...
위와 같은 문장이 나오고 멈춰 있습니다

코드 상에는 IF NOT EXISTS company_info 이니까 존재하면 다음으로 넘어가야 하는데 왜 업데이트하지 않고 종료되는지
궁금해서 질문 드립니다

데이터 읽어올때 DB사용하지 않고 CSV파일을 불러와서 이용하려고 하는 도중에 오류해결 문의드립니다.

안녕하세요. 책 구매해서 공부중인 학생입니다.

raw_df = pd.read_csv('ohlcv데이터파일.csv')
raw_df.head()
이런식으로 불러오려하는데
코드를 작성하다가

  1. dfx = raw_df[['Open','High','Low', 'Close', 'Volume']]
  2. dfx = MinMaxScaler(dfx)
  3. dfy = dfx[['Close']]
    위 구문 중 2번 구문에서

TypeError Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/pandas/core/ops/array_ops.py in na_arithmetic_op(left, right, op, is_cmp)
142 try:
--> 143 result = expressions.evaluate(op, left, right)
144 except TypeError:

12 frames
TypeError: unsupported operand type(s) for -: 'str' and 'str'

During handling of the above exception, another exception occurred:

TypeError Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/pandas/core/ops/array_ops.py in masked_arith_op(x, y, op)
90 if mask.any():
91 with np.errstate(all="ignore"):
---> 92 result[mask] = op(xrav[mask], yrav[mask])
93
94 else:

TypeError: unsupported operand type(s) for -: 'str' and 'str'

이런오류가 생기네요.. 도와주세요.ㅠㅠ!!

09장 삼성주가예측 print(_x,”->”,_y)에러

주식가격 리스트를 받아오는 x[-6:]까지는 실행이 잘되나 데이터 셋 준비하는 과정에서 print(_x,”->”,_y) 에서 에러가 납니다..

찾아본결과//
for문 이후 print(_x) 를해도 빈 리스트만 존재하며, print(data_x)도 마찬가지로 비어있습니다.

raise ValueError('Expect x to be a non-empty array or dataset.')
ValueError: Expect x to be a non-empty array or dataset.

for 문안에 지역변수로 선언되어있어서 그런지 변수의 위치가 다르며, 변수의 선언위치가 달라서 빈리스트만 반환합니다..(전역변수로 바꿔줘도 안됨..)

x값은 잘 받아오지만 for문을 통해 _x ,data_x값을 받아오는 게 안되는 이유가 뭘까요? (_y, data_y도 동일)

깃허브 코드를 복붙했는데도 실수가 나니 찾기가 힘드네요ㅠ

DBupdater.py pgrr return none

dbupdater가 동작하지 않습니다
def read_naver 에서 pgrr이 none을 반환하면서 막히기 시작합니다
네이버에서 일별 시세 페이지를 제대로 받아오지 못하는 것 같은데 무슨 문제인지 알고싶습니다.
어제까지는 잘 작동했습니다.
doc은 <http.client.HTTPResponse object at 0x05C34D30>를 반환하고
html은 페이지를 찾을 수 없다는 내용들이 뜨네요

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.