Spaces:
Runtime error
Runtime error
implemented symbol getter, price candlestick, trend deviations from linear regressed prices, VWAP, bollinger bands, candle indicators and sector trends
46ebf5d
| # Defines candlestick indicators, and creates data-points for a dataset when an indicator is detected. | |
| import streamlit as st | |
| from collections import defaultdict | |
| def price_at_index(index, dates, dataset): | |
| price = defaultdict(float) | |
| opens = dataset['Open'] | |
| closes = dataset['Close'] | |
| highs = dataset['High'] | |
| lows = dataset['Low'] | |
| price['Date'] = dates[index] | |
| price['Open'] = opens[index] | |
| price['Close'] = closes[index] | |
| price['High'] = highs[index] | |
| price['Low'] = lows[index] | |
| return price | |
| def candle_is_green(current_price): | |
| return current_price['Open'] < current_price['Close'] | |
| def engulfing_candle(prev_price, current_price): | |
| prev_is_green = candle_is_green(prev_price) | |
| current_is_green = candle_is_green(current_price) | |
| from_negative_to_positive = not prev_is_green and current_is_green | |
| from_positive_to_negative = prev_is_green and not current_is_green | |
| is_bullish_engulfing = from_negative_to_positive and current_price['Close'] > prev_price['Open'] and current_price['Open'] < prev_price['Close'] | |
| is_bearish_engulfing = from_positive_to_negative and current_price['Close'] < prev_price['Open'] and current_price['Open'] > prev_price['Close'] | |
| return is_bullish_engulfing, is_bearish_engulfing | |
| def engulfing_candle_bullish(prev_price, current_price): | |
| prev_is_green = candle_is_green(prev_price) | |
| current_is_green = candle_is_green(current_price) | |
| from_negative_to_positive = not prev_is_green and current_is_green | |
| is_bullish_engulfing = from_negative_to_positive and current_price['Close'] > prev_price['Open'] and current_price['Open'] < prev_price['Close'] | |
| return is_bullish_engulfing | |
| def engulfing_candle_bearish(prev_price, current_price): | |
| prev_is_green = candle_is_green(prev_price) | |
| current_is_green = candle_is_green(current_price) | |
| from_positive_to_negative = prev_is_green and not current_is_green | |
| is_bearish_engulfing = from_positive_to_negative and current_price['Close'] < prev_price['Open'] and current_price['Open'] > prev_price['Close'] | |
| return is_bearish_engulfing | |
| def create_engulfing_candle_bullish_indicators(dates, dataset): | |
| indicator = defaultdict(list) | |
| indicator_timestamps = indicator['Date'] | |
| indicator_values = indicator['Values'] | |
| prev_price = price_at_index(0, dates, dataset) | |
| for index in range(1, len(dates)): | |
| price = price_at_index(index, dates, dataset) | |
| is_engulfing = engulfing_candle_bullish(prev_price, price) | |
| if is_engulfing: | |
| indicator_timestamps.append(dates[index]) | |
| offset = ((price['Close'] - price['Open']) - (prev_price['Open'] - prev_price['Close'])) * 5 | |
| value = price['Close'] + offset | |
| indicator_values.append(value) | |
| prev_price = price | |
| indicator_dict = dict(indicator) | |
| indicator_dict['IsBullish'] = True | |
| return indicator_dict | |
| def create_engulfing_candle_bearish_indicators(dates, dataset): | |
| indicator = defaultdict(list) | |
| indicator_timestamps = indicator['Date'] | |
| indicator_values = indicator['Values'] | |
| prev_price = price_at_index(0, dates, dataset) | |
| for index in range(1, len(dates)): | |
| price = price_at_index(index, dates, dataset) | |
| is_engulfing = engulfing_candle_bearish(prev_price, price) | |
| if is_engulfing: | |
| indicator_timestamps.append(dates[index]) | |
| offset = ((price['Open'] - price['Close']) - (prev_price['Close'] - prev_price['Open'])) * 5 | |
| value = price['Close'] - offset | |
| indicator_values.append(value) | |
| prev_price = price | |
| indicator_dict = dict(indicator) | |
| indicator_dict['IsBullish'] = False | |
| return indicator_dict | |
| def create_indicators(dates, dataset): | |
| indicators = defaultdict(dict) | |
| indicators['Engulfing Bullish'] = create_engulfing_candle_bullish_indicators(dates, dataset) | |
| indicators['Engulfing Bearish'] = create_engulfing_candle_bearish_indicators(dates, dataset) | |
| return indicators | |