def ichimoku(price_objs):
"""
computes the ichimoku cloud for price_objs
"""
dates = [pd.to_datetime(str(obj.created_on)) for obj in price_objs]
prices = [obj.price for obj in price_objs]
d = {'date': dates,
'price': prices}
_prices = pd.DataFrame(d)
# Tenkan-sen (Conversion Line): (9-period high + 9-period low)/2))
period9_high = pd.rolling_max(_prices['price'], window=9)
period9_low = pd.rolling_min(_prices['price'], window=9)
tenkan_sen = (period9_high + period9_low) / 2
# Kijun-sen (Base Line): (26-period high + 26-period low)/2))
period26_high = pd.rolling_max(_prices['price'], window=26)
period26_low = pd.rolling_min(_prices['price'], window=26)
kijun_sen = (period26_high + period26_low) / 2
# Senkou Span A (Leading Span A): (Conversion Line + Base Line)/2))
senkou_span_a = ((tenkan_sen + kijun_sen) / 2).shift(26)
# Senkou Span B (Leading Span B): (52-period high + 52-period low)/2))
period52_high = pd.rolling_max(_prices['price'], window=52)
period52_low = pd.rolling_min(_prices['price'], window=52)
senkou_span_b = ((period52_high + period52_low) / 2).shift(26)
# The most current closing price plotted 22 time periods behind (optional)
chikou_span = _prices.shift(-22) # 22 according to investopedia
return {
'tenkan_sen': tenkan_sen,
'kijun_sen': kijun_sen,
'senkou_span_a': senkou_span_a,
'senkou_span_b': senkou_span_b,
'chikou_span': chikou_span,
}
评论列表
文章目录