INVESTAR / StockAnalysisInPython

456 stars 412 forks source link

ch06_09_FirstScreen에서 차트 그래프 mplfinance 신버전으로 못만드나요? #16

Open ttub opened 3 years ago

ttub commented 3 years ago

제가 코드를 수정하려고 했는데 차트가 창이 여러개로 나뉘어져서 표시됩니다. 캔들은 창1, ema는 창2 이렇게요.

INVESTAR commented 3 years ago

최근에 오탈자 업데이트 및 웹 스크레이핑 차단 이슈가 있어서 좀 바쁘네요. 여유가 생기면 mplfinance 버전으로 작성해서 깃헙에 공유하겠습니다.

INVESTAR commented 3 years ago

mplfinance는 동일한 시간 x 축을 공유하는 패널을 0부터 9까지 최대 10개까지 사용할 수 있습니다. 제일 위의 패널이 0번 패널이 되고, 그 이후부터 1, 2, 3, ... 9번까지 번호가 붙습니다. 자세한 사용법은 아래 mplfinance의 공식 예제를 참고하시기 바랍니다. https://github.com/matplotlib/mplfinance/blob/master/examples/panels.ipynb

아쉽게도 mplfinance에서는 범례(legend) 기능이 아직 완전히 개발되지 않은 것 같습니다. 기존에 mpl_finance로 작성했던 코드를 최대한 유사하게 mplfinance로 포팅한 코드는 아래와 같습니다.

mplfinance_example https://github.com/INVESTAR/StockAnalysisInPython/blob/master/06_Trading_Strategy/ch06_09_FirstScreenEx.py

import pandas as pd
import mplfinance as mpf
from Investar import Analyzer

mk = Analyzer.MarketDB()
df = mk.get_daily_price('엔씨소프트', '2017-01-01', '2019-12-31')
df.index = pd.to_datetime(df.date)
df = df[['open', 'high', 'low', 'close', 'volume']] 

ema60 = df.close.ewm(span=60).mean()   # ① 종가의 12주 지수 이동평균
ema130 = df.close.ewm(span=130).mean() # ② 종가의 26주 지수 이동평균
macd = ema60 - ema130                  # ③ MACD선
signal = macd.ewm(span=45).mean()      # ④ 신호선(MACD의 9주 지수 이동평균)
macdhist = macd - signal               # ⑤ MACD 히스토그램

apds = [mpf.make_addplot(ema130, color='c'),
    mpf.make_addplot(macdhist, type='bar', panel=1, color='m'),
    mpf.make_addplot(macd, panel=1, color='b'),
    mpf.make_addplot(signal, panel=1, color='g'),
    ]
mc = mpf.make_marketcolors(up='r', down='b', inherit=True) 
stl = mpf.make_mpf_style(marketcolors=mc) 
mpf.plot(df, title='Triple Screen Trading - First Screen (NCSOFT)', type='candle',
    addplot=apds, figsize=(9,7), panel_ratios=(1,1), style=stl)
GoodRaymond commented 3 years ago

mplfinance 신버전에서 label은 어떻게 구현하나요?

INVESTAR commented 3 years ago

mplfinance의 깃허브에서 확인을 해봤는데 label이나 legend 관련 기능은 아직까지 완벽히 지원되지 않는 것 같습니다.