Python/Pandas calculate Ichimoku chart components

前端 未结 6 906
闹比i
闹比i 2021-02-03 15:02

I have Pandas DataFrame object with Date, Open, Close, Low and High daily stock data. I want to calculate components of Ichimoku chart. I can get my data using the following cod

6条回答
  •  被撕碎了的回忆
    2021-02-03 15:57

    I'm no financial expert or plotting expert but the following shows sample financial data and how to use rolling_max and rolling_min:

    In [60]:
    
    import pandas.io.data as web
    import datetime
    start = datetime.datetime(2010, 1, 1)
    end = datetime.datetime(2013, 1, 27)
    data=web.DataReader("F", 'yahoo', start, end)
    high_prices = data['High']
    close_prices = data['Close']
    low_prices = data['Low']
    dates = data.index
    nine_period_high = df['High'].rolling(window=9).max()
    nine_period_low = df['Low'].rolling(window=9).min()
    ichimoku = (nine_period_high + nine_period_low) /2
    ichimoku
    Out[60]:
    Date
    2010-01-04       NaN
    2010-01-05       NaN
    2010-01-06       NaN
    2010-01-07       NaN
    2010-01-08       NaN
    2010-01-11       NaN
    2010-01-12       NaN
    2010-01-13       NaN
    2010-01-14    11.095
    2010-01-15    11.270
    2010-01-19    11.635
    2010-01-20    11.730
    2010-01-21    11.575
    2010-01-22    11.275
    2010-01-25    11.220
    ...
    2013-01-04    12.585
    2013-01-07    12.685
    2013-01-08    13.005
    2013-01-09    13.030
    2013-01-10    13.230
    2013-01-11    13.415
    2013-01-14    13.540
    2013-01-15    13.675
    2013-01-16    13.750
    2013-01-17    13.750
    2013-01-18    13.750
    2013-01-22    13.845
    2013-01-23    13.990
    2013-01-24    14.045
    2013-01-25    13.970
    Length: 771
    

    Calling data[['High', 'Low', 'Close', 'ichimoku']].plot() results in the following plot:

    enter image description here

    update

    After @PedroLobito's comments pointing out the incomplete/incorrect formula I took @chilliq's answer and modified it for pandas versions 0.16.1 and above:

    import pandas as pd
    from pandas_datareader import data, wb
    import datetime
    start = datetime.datetime(2010, 1, 1)
    end = datetime.datetime(2013, 1, 27)
    d=data.DataReader("F", 'yahoo', start, end)
    high_prices = d['High']
    close_prices = d['Close']
    low_prices = d['Low']
    dates = d.index
    nine_period_high =  df['High'].rolling(window=9).max()
    nine_period_low = df['Low'].rolling(window=9).min()
    d['tenkan_sen'] = (nine_period_high + nine_period_low) /2
    
    # Kijun-sen (Base Line): (26-period high + 26-period low)/2))
    period26_high = high_prices.rolling(window=26).max()
    period26_low = low_prices.rolling(window=26).min()
    d['kijun_sen'] = (period26_high + period26_low) / 2
    
    # Senkou Span A (Leading Span A): (Conversion Line + Base Line)/2))
    d['senkou_span_a'] = ((d['tenkan_sen'] + d['kijun_sen']) / 2).shift(26)
    
    # Senkou Span B (Leading Span B): (52-period high + 52-period low)/2))
    period52_high = high_prices.rolling(window=52).max()
    period52_low = low_prices.rolling(window=52).min()
    d['senkou_span_b'] = ((period52_high + period52_low) / 2).shift(26)
    
    # The most current closing price plotted 22 time periods behind (optional)
    d['chikou_span'] = close_prices.shift(-22) # 22 according to investopedia
    d.plot()
    

    results in the following plot, unclear because as stated already I'm not a financial expert:

提交回复
热议问题