Untitled
unknown
plain_text
3 years ago
2.5 kB
8
Indexable
# import necessary packages import numpy as np import pandas as pd import matplotlib.pyplot as plt # set parameters order = 5 K = 2 # define function to detect higher highs def getHigherHighs(data: np.array, order=5, K=2): ''' Finds consecutive higher highs in price pattern. Must not be exceeded within the number of periods indicated by the width parameter for the value to be confirmed. K determines how many consecutive highs need to be higher. ''' # Get highs high_idx = argrelextrema(data, np.greater, order=order)[0] highs = data[high_idx] # Ensure consecutive highs are higher than previous highs extrema = [] ex_deque = deque(maxlen=K) for i, idx in enumerate(high_idx): if i == 0: ex_deque.append(idx) continue if highs[i] < highs[i-1]: ex_deque.clear() ex_deque.append(idx) if len(ex_deque) == K: extrema.append(ex_deque.copy()) return extrema # detect divergences hh = getHigherHighs(price, order) lh = getLowerHighs(price, order) ll = getLowerLows(price, order) hl = getHigherLows(price, order) # get confirmation indices hh_idx = np.array([i[1] + order for i in hh]) lh_idx = np.array([i[1] + order for i in lh]) ll_idx = np.array([i[1] + order for i in ll]) hl_idx = np.array([i[1] + order for i in hl]) # plot results plt.figure(figsize=(12, 8)) plt.plot(data['Close']) plt.scatter(dates[hh_idx], price[hh_idx-order], marker='^', c=colors[1]) plt.scatter(dates[lh_idx], price[lh_idx-order], marker='v', c=colors[2]) plt.scatter(dates[ll_idx], price[ll_idx-order], marker='v', c=colors[3]) plt.scatter(dates[hl_idx], price[hl_idx-order], marker='^', c=colors[4]) _ = [plt.plot(dates[i], price[i], c=colors[1]) for i in hh] _ = [plt.plot(dates[i], price[i], c=colors[2]) for i in lh] _ = [plt.plot(dates[i], price[i], c=colors[3]) for i in ll] _ = [plt.plot(dates[i], price[i], c=colors[4]) for i in hl] plt.xlabel('Date') plt.ylabel('Price ($)') plt.title(f'Potential Divergence Points for {ticker} Closing Price') legend_elements = [ Line2D([0], [0], color=colors[0], label='Close'), Line2D([0], [0], color=colors[1], label='Higher Highs'), Line2D([0], [0], color='w', marker='^', markersize=10, markerfacecolor=colors[1], label='Higher High Confirmation'), Line2D([0], [0], color=colors[2], label='Higher Lows'), Line2D([0], [0], color='w', marker='^', markersize=10, markerfacecolor=colors[2], label='Higher Lows Confirmation'), Line2D([0], [0], color=colors[3], label='Lower Lows'), Line2D([0],.
Editor is loading...