검색결과 리스트
차트그리기에 해당되는 글 1건
- 2020.07.22 차트 그릴 때 진입 위치를 표시하는 방법 2
글
차트 그릴 때 진입 위치를 표시하는 방법
개발한 로직으로 시뮬레이션을 하면서 가장 필요한 부분 중의 하나가 진입/탈출한 시점을 그래프로 쉽게 보는 것입니다. candle 차트는 쉽게 그릴 수 있지나 진입 위치를 text로 표기하는 방법은 어렵더군요.
그러던 중 지인의 소개로 좋은 패키지를 발견했습니다.
오늘 소개드릴 내용은 진입/청산 한 위치를 차트에 표시하는 방법입니다.
사용할 패키지는 mplfinance 입니다. 파이썬 3.7 이전에서는 mpl_finance 이름으로 설치하시면 됩니다.
파이썬 3.7이상 사용하시는 분은 아래 방식으로
pip install --upgrade mplfinance
파이썬 3.6 이하 사용하시는 분은 아래 방식으로 설치하시면 됩니다.
pip install --upgrade mpl_finance
일단 결론부터 말씀드리겠습니다. 차트를 그리면서 원하는 캔들의 임의의 위치(위, 아래)에 text 혹은 화살표를 그릴 수 있습니다.
글자를 쓰는 경우 (주석달기)
ohlc.values는 [날짜, 시가, 고가, 저가, 종가, ...] 이렇게 구성되어 있습니다.
첫 번째 캔들
ohlc.values[0][0] : 첫 번째 캔들의 날짜
ohlc.values[0][1] : 첫 번째 캔들의 시가
ohlc.values[0][2] : 첫 번째 캔들의 고가
ohlc.values[0][3] : 첫 번째 캔들의 저가
ohlc.values[0][4] : 첫 번째 캔들의 종가
4번째 캔들이 진입 시점이라고 가정하고 표기해보도록 하겠습니다.
글자를 쓸 x,y 위치를 결정합니다.
4번째 캔들이므로 x 값은 ohlc.values[3][0]으로 정합니다.
y값은 원하는 위치를 정하면 됩니다. 진입이므로 저가 밑에 표기하는 것이 좋을 것 같습니다.
4번째 캔들의 저가는 ohlc.values[3][3]입니다.
xy=(ohlc.values[3][0],ohlc.values[3][3])
글자를 쓸 곳을 지정하는 방법입니다.
진입을 표시하는 경우에 통상 저가 밑에 표기합니다. 이 경우에도 글자를 쓰기 시작할 x,y 위치를 지정합니다.
x 값은 4번째 캔들의 날자 값인 ohlc.values[3][0]로 정합니다. 그런데 이렇게 x 좌표를 입력하면 오른쪽으로 치우져서 글자가 표기됩니다. 그래서 -0.5 정도 왼쪽으로 옮겨서 출력하게 합니다.
y 값은 저가 기준으로 -30 정도 위치에 표기하도록 합니다.
xytext=(ohlc.values[3][0]-0.5,ohlc.values[3][3]-30))
위에서 기술한 내용을 모아서 코딩을 하면 아래와 같이 됩니다.
ax.annotate('Enter',xy=(ohlc.values[3][0],ohlc.values[3][3]),
xytext=(ohlc.values[3][0]-0.5,ohlc.values[3][3]-30))
탈출의 경우에는 같은 방식으로 하되 y 값을 고가 기준으로 +20 정도가 적당합니다.
화살표와 단어를 쓰는 경우
화살표가 표시되면 뭔가 더 있어보이겠죠. 화살표를 사용하기 위해서는 arrowprops인자를 추가하면 됩니다. 화살표의 색과 두께도 설정가능합니다.화살표의 시작점은 xytext위치이고, 끝점은 xy에 표시한 곳입니다. 위 그림과 같이 진입시 위쪽을 향한 화살표를 그리는 코드는 아래와 같습니다.
ax.annotate('Enter',xy=(ohlc.values[1][0],ohlc.values[1][3]-10),
xytext=(ohlc.values[1][0]-0.5,ohlc.values[1][3]-100),
arrowprops=dict(facecolor='red', shrink=0.02))
진입/탈출 시점을 그래프 상에서 한눈에 볼 수 있어서 로직 검증하기에 참 편합니다.
소스코드는 아래 github에 공유되어 있습니다.
https://github.com/multizone-quant/system-trading/blob/master/drawing_chart_with_annotation
data.csv 파일도 함께 다운받으세요.
'시스템트레이딩' 카테고리의 다른 글
[시스템트레이딩] 전략 시뮬레이션(2) (0) | 2020.11.18 |
---|---|
[시스템트레이딩] 전략 시뮬레이션(1) (2) | 2020.11.16 |
웹크롤링으로 관리종목, 거래중지 종목 구하기 (0) | 2020.06.05 |
[파이썬] 요일 찾기에서 주말 건너뛰기 (0) | 2020.05.30 |
[파이썬] Dart 공시정보 API를 이용한 실시간 공시정보 활용 (2) | 2020.05.24 |