728x90
728x90

볼린저 밴드 Bollinger Bands

- 이동평균선 ( 볼린저 밴드에서는 단순 이동 평균선)을 기준으로 일정한 표준편차 번위 안에 드는 밴드를 설정한 그래프

- 시장의 높고 낮음 및 과매수 또는 과매도 여부를 나타냅니다.

TA-LIB을 이용한  볼린저 밴드 구하기

TA-LIB에서 볼린저 밴드를 구하는 함수 

- talib.BBANDS()

upperband, middleband, lowerband = BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
http://mrjbq7.github.io/ta-lib/func_groups/overlap_studies.html

- talib의 BBANDS() 함수는 볼린저 밴드의 상한선 / 중간선 / 하한선에 대한 값을 반환합니다.

- 간단한 예제를 통해 볼린저 밴드값을 구해보고 차트를 그려보겠습니다.

 

예제

- 사용한 데이터는 종목코드 - 000020 입니다. 

- 최근 기간중 주말과 휴장일을 제외한 100일간의 데이터입니다.

- 간단한 봉 차트를 그려보겠습니다.

- talib의 BBANDS() 함수를 사용해 기간은 20일로 지정하고, 볼린저 밴드 값을 구합니다.

df['BBAND_UPPER'],df['BBAND_MIDDLE'],df['BBAND_LOWER'] = ta.BBANDS(df['close'],20,2)

- 대신증권 HTS 에서 그려진 볼린저 밴드와 비교해 보면 똑같이 그려졌네요.

 

728x90
728x90

넘파이 (Numpy) Numpy.c_

- Translates slice objects to concatenation along the second axis.

- 2개의 배열을 붙여 2차원 배열로 만들기

 

>>> np.c_[np.array([1,2,3]), np.array([4,5,6])]
array([[1, 4],
       [2, 5],
       [3, 6]])
>>> np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])]
array([[1, 2, 3, 0, 0, 4, 5, 6]])

 

https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.c_.html?highlight=numpy%20c_#numpy.c_
728x90
728x90

넘파이 난수 생성

import numpy as np

numpy.random.rand(d0,d1,...)

>>> a = np.random.rand()
>>> a

0.8265127132486283

>>> b = np.random.rand(10)
>>> b

array([0.52378504, 0.35727214, 0.35869626, 0.58862312, 0.39184057,
       0.49020887, 0.64360582, 0.08130151, 0.12713493, 0.42913997])
       

numpy.random.randn(d0, d1, ..., dn)

>>> c = np.random.randn()
>>> c
0.21423335992324902


>>> d = np.random.randn(10)
>>> d
array([-1.28840094, -2.03541272, -1.08534621, -0.3659988 ,  2.13054496,
       -0.37173855,  0.19194732,  0.91521406, -0.85081639, -0.68821558])

>>> e = np.random.randn(10,1)
>>> e
array([[-0.17924635],
       [ 1.09098268],
       [ 1.10546769],
       [-0.78903644],
       [ 1.29073505],
       [-1.08213603],
       [-1.08580595],
       [-0.34082787],
       [ 0.10444354],
       [ 0.08724687]])

 

numpy.random.randint(low, high=None, size=None, dtype='l')

>>> np.random.randint(5, size=(2, 4))
array([[4, 0, 2, 1],
       [3, 2, 2, 0]])

- 0,1로 이루어진 난수 생성

>>> np.random.randint(2, size=10)
array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])

 

https://docs.scipy.org/doc/numpy-1.15.0/index.html
728x90
728x90

플라스크 디버깅 (Flask Debuging)

 

- 플라스크 서버를 실행해서 웹 사이트에 접속을 하게 됩니다.

- 이때 특정 코드를 수정 하면 기본설정의 플라스크 서버가 실행되는 중에는 바로 반영되지 않고, 재시작을 해줘야합니다.

- 개발 과정에서 수정 - > 중지 -> 재시작 단계를 계속 거치는 것은 만족스럽지않습니다.

- 플라스크에서는 디버깅 모드를 통해서 코드를 수정하고 서버 재시작 없이 웹사이트를 새로고침 하거나 재접속 하면 바로 반영됩니다. 

 

디버깅 모드 설정

- 플라스크에서 디버깅 모드를 실행하는 것은 아주 간단합니다.

- 아래의 명령어를 추가하는 것만으로 실행 할 수 있습니다.

app.run(debug=True)

- 이제 플라스크 서버를 실행 하고 앞서 만들어 놓았던 index.html 코드를 수정해 보겠습니다.

 

서버 실행

- 서버를 실행하게 되면, Debug mode 가 On으로 바뀐 것을 볼 수 있습니다.

웹사이트 접속

- 서버를 실행하고 나서 웹사이트에 접속해 보면 앞서 만들어둔 index.html을 통해 만들어진 페이지가 나타나는 것을 볼 수 있습니다.

 

 

index.html 수정

- 이제 코드를 수정하고 바로 반영해 보겠습니다.

- 기존의 index.html 파일에 '수정사항 반영' 이라는 텍스트를 추가 해보겠습니다.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
<h1>안녕하세요.</h1>
<h2>웹사이트에 방문해 주셔서 감사합니다.</h2>
<h3>수정사항 반영</h3>

</body>
</html>

 

웹사이트 반영

- 수정한 코드를 저장하고 브라우저에 띄어진 웹사이트를 새로고침 해보면 수정사항이 바로 반영 된 것을 볼 수 있습니다.

728x90
728x90

  render_template  

- 플라스크 코드 내에서 hmtl 마크업 언어를 사용해서 웹사이트를 제작하여 나타낼 수 있습니다.

- html 코드들을 플라스크내에 사용하는 것보다 .html 파일을 만들어서 라우팅하는 방법이 좀 더 깔끔하고, 관리하기에도 편합니다.

- 플라스크는 render_template 모듈을 통해서 .html파일을 렌더링 하여 브라우저를 통해 보여 줄 수 있습니다.

- 앞의 포스팅을 통해 만들어 놓은 app.py에 이어서 진행해 보겠습니다.

 

  templates 디렉토리 생성  

- 먼저 render_template 를 사용하기 위해서는 templates 디렉토리가 필요합니다.

- flask_server 하위에 templates 디렉토리를 만들어 줍니다.

 

 

 

 

  index.html 생성  

- 이제 templates 디렉토리 안에 index.html 을 생성해 줍니다.

- 파이참의 파일 생성에서는 .py 뿐만 아니라 html 파일도 생성할 수 있습니다.

 

 

- html 생성을 선택하면 파일 이름을 입력하는 항목과 html 버전을 선택할수 있습니다.

- 저는 html5를 선택 하겠습니다.

 

- index.html 파일을 생성하면 기본적인 Tag(태그)들이 입력되어 만들어 집니다.

 

 

  index.html 수정 

 

- index.html 파일 내용을 간단하게 수정해 보겠습니다.

- head 태그안에 있는 title 태그의 텍스트를 Hello로 수정합니다.

- body 태그 안에 h1태그를 추가 하고 , '안녕하세요'를 텍스트로 추가합니다.

- 그 아래에 h2태그를 추가 하고, '웹사이트에 방문해 주셔서 감사합니다.'를 추가합니다.

 

   Tip     

태그 입력시 태그 네임만 입력후 Tab키를 누르면 자동으로 <></>씌어져 생성됩니다.

ex) div-> tab -> <div></div>

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
<h1>안녕하세요.</h1>
<h2>웹사이트에 방문해 주셔서 감사합니다.</h2>
</body>
</html>

 

  모듈 Import  

 

- 이제 app.py로 이동합니다.

- import 임포트 해놓은 Flask에 추가적으로 render_tamplate 를 import 해 주겠습니다.

 

from flask import Flask,render_template

 

 

  hello 함수 수정  

 

- app.py에 작성되어 있는 hello함수를 수정하겠습니다.

- return 뒷 부분을 render_template('index.html')으로 수정합니다.

 

- 변경전

return "Hello World!"

- 변경후

return render_template('index.html')

 

from flask import Flask,render_template
app = Flask(__name__)

@app.route("/")
def hello():
    return render_template('index.html')

if __name__ == '__main__':
    app.run()

 

  플라스크 실행  

- 파이참 run을 이용해 플라스크 서버를 실행해 줍니다.

- 실행 후 표시되는 url링크를 클릭하여 접속합니다.

- index.html이 잘 표시되어 나타나는 것을 확인할 수 있습니다.

 

728x90
728x90
728x90

+ Recent posts