[Python] Flask - 주식차트 그리기 및 삽입 - 파이썬은 날먹

[Python] Flask - 주식차트 그리기 및 삽입 - 파이썬은 날먹

반응형

0. 들어가기

-. 구글 차트 API라는 아주 좋은, 손쉬운, 날먹이 가능한 툴을 발견해서 이를 이용한 주식 차트를 삽입하려 한다.

-. 앞 포스팅에선 차트 API를 다루는 기본적인 예제를 베껴봤고, 이번 포스팅에선 해당 차트를 사용하기 위해 Flask -> Chart로의 데이터 전달에 관해 쓴다.

1. 차트 데이터 구조

-. 우선, 주식에 맞게 캔들차트를 보자. 파이썬의 이중배열 구조로, Data = [[‘X축’, ‘Low’, ‘Close’, ‘Open’, ‘High’]] 형태를 취하는 것을 알 수 있다.

<구글 차트 API, CandlestickChart 데이터구조>

-. 그리고 키움증권에서 제공하는 OPEN API로 받아낸 데이터를 차트에 입력하기 위한 순서로 변경하는 작업이 필요하다.

2. Flask + jinja에 차트 삽입

-. 앞서의 캔들차트 예제를 jinja template으로 수정한다. 당장은 귀찮으니 var data 부분만 바꿔보겠다.

-. 기존의 이중배열을 {{chartData|safe}} 구문으로 변경하면 된다.

1) 코드

google.charts.load('current', {'packages':['corechart']}); google.charts.setOnLoadCallback(drawChart); function drawChart() { var data = google.visualization.arrayToDataTable({{chartData|safe}}, true); var options = { title: 'Company Performance', curveType: 'function', legend: { position: 'bottom' } }; var chart = new google.visualization.CandlestickChart(document.getElementById('chart_div')); chart.draw(data, options); }

-. 그리고 Flask route에 아래의 구문 삽입.

candleData = [ ['Mon', 20, 28, 38, 45], ['Tue', 31, 38, 55, 66], ['Wed', 50, 55, 77, 80], ['Thu', 77, 77, 66, 50], ['Fri', 68, 66, 22, 15]] @app.route("/jinja2/chart") def page_jinja2_CandleChart(): return render_template("chart_Candle.html", chartData = candleData)

2) 작동 결과

-. 앞서, 직접 데이터를 입력한 것과 동일한 그래프 출력되는 것이 확인된다.

3. 주식차트 그리기

-. 마지막으로 키움 OPEN API에서 긁어온 데이터를 차트로 그려본다.

<키움 API + Flask + jinja를 이용해 출력한 캔들차트>

-. 근데 X축이 new Date(~~~)로 표기되는 상황. 왜이럴까 html 구문을 보니 new Date(~~~)로 표기되어야 할 부분이 'new Date(~~~)로 표기되면서 각각을 명사로 받아버린 상황이다.

<차트 날짜 표기오류 원인>

-. '를 제거하는 코드 넣어야지 뭐..

template = Template("test {{data}}") _buf = template.render(data = _data) print(_buf) print(type(_buf)) _result = _buf.replace("'","") print(_result)

<날짜 표기오류 수정 / 월 틀려있음>

-. 근데 여전히 날짜가 이상하다. 난 2월 것을 넣었는데, 다음달 주가를 예측하고있네...

-. 찾아보니 JS 날짜 세는게 월을 0~11로 (보통 1~12잖아..?) 해서 문제가 발생한댄다. 월에 1을 빼자.

<(최종본) 날짜 표기오류 수정>

4. 요약하자면

-. 키움API에서 받은 데이터의 순서를 바꾸고 (Candlestick Chart형식에 맞게)

-. 받은 데이터의 날짜 중 '월'을 1씩 빼고

-. Flask -> jinja engin으로 투입 시 ' 를 제거하는 과정이 있다.

길다길어.

반응형

from http://givemethesocks.tistory.com/38 by ccl(A) rewrite - 2021-02-16 15:26:35