촛대 다리, 고도 차트, 이동 평균선을 그리기

개발 환경


  • python==3.7.9
  • pandas==1.1.4
  • matplotlib==3.3.3
  • numpy==1.19.2

  • 개요



    사이트 에서 주가 데이터를 다운로드했습니다.
    이번에는 소프트 뱅크를 사용했습니다. 사용기간은 1998년~2019년입니다.
    - prg
        - main.py
    - Graph
        - 9984_1998.png
        ・・
        ・・
        - 9984_2018.png
    - csv
        - 9984_1998.csv
            ・・
        ・・
        - 9984_2018.csv
    

    소스 코드



    main.py
    import pandas as pd
    import matplotlib.pyplot as plt
    from mpl_finance import candlestick2_ohlc,volume_overlay
    import numpy as np
    
    def SMA(signal):#移動平均線
        k = 0
        SMA = []
        for rp in range(signal):
            SMA.append(0)
        while True:
            sma = []
            for r in range(signal):
                s = df.loc[k+r,4]
                sma.append(s)
            sma5 = sum(sma)/len(sma)
            k += 1
            if k == len(df)-(signal-1):
                break
            SMA.append(sma5)
        return SMA
    
    f = 1998
    for f in range(1998,2020,1):
        df = pd.read_csv('../csv/9984_'+str(f)+'.csv',header=None)
        df['SMA5'] = SMA(5)
        df['SMA25'] = SMA(25)
        df['SMA75'] = SMA(75)
        df = df.replace(0, np.nan)
    
        plt.rcParams['figure.figsize'] = 30,7
        fig = plt.figure(figsize=(18, 9))
        ax = plt.subplot(1, 1, 1)
        candlestick2_ohlc(ax, df[1],df[2],df[3],df[4],width=0.9,colorup="b",colordown="r")
        plt.tick_params(labelbottom = False,bottom = False)
        plt.title('SoftBank_'+str(f)+'_Chart')
        plt.plot(df['SMA5'],label = 'SMA5',color = 'dodgerblue')
        plt.plot(df['SMA25'],label = 'SMA25',color = 'brown')
        plt.plot(df['SMA75'],label = 'SMA75',color = 'darkgreen')
        ax.set_xlim([0, df.shape[0]]) 
        ax.set_ylabel("Price")
        bottom,top = ax.get_ylim()
        ax.set_ylim(bottom-(top-bottom)/4,top)
        ax2 = ax.twinx()
        volume_overlay(ax2,df[1], df[6], df[5], width=1, colorup="g", colordown="g")
        ax2.set_xlim([0, df.shape[0]])
        ax2.set_ylim([0,df[5].max()*4])
        ax2.set_ylabel("Volume")
        plt.tight_layout()
        plt.savefig('..//Graph//9984_'+str(f)+'.png')
        plt.close()
    
    

    이미지는 다음과 같은 느낌입니다.

    출력 결과



    좋은 웹페이지 즐겨찾기