반응형

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) 코드

<html>
  <head>

    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      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);
  }

    </script>
  </head>
  <body>
    <div id="chart_div" style="width: 900px; height: 500px;"></div>
  </body>
</html>

-. 그리고 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) 작동 결과

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

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

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으로 투입 시 ' 를 제거하는 과정이 있다.

 

길다길어.

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기