patern harmoni110

153
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import ta


def load_data():
data = pd.read_csv('historical_data.csv')
data['Date'] = pd.to_datetime(data['Date'])
data.set_index('Date', inplace=True)
return data


def calculate_rsi(data, period=14):
data['RSI'] = ta.momentum.RSIIndicator(data['Close'], window=period).rsi()
return data

def detect_positive_divergence(data):
detected_patterns = []
for i in range(1, len(data) - 1):
if (data['Close'] < data['Close'][i-1] and
data['RSI'] > data['RSI'][i-1]):
detected_patterns.append((data.index, 'Positive Divergence'))
return detected_patterns


def detect_harmonic_patterns(data):
detected_patterns = []
fib_ratios = {
'Gartley': [0.618, 0.786],
'Bat': [0.5, 0.886],
'Butterfly': [0.786, 1.27],
'Crab': [0.382, 1.618]
}

for i in range(2, len(data) - 2):
for pattern, ratios in fib_ratios.items():
high1 = data['High'][i-2]
high2 = data['High']
low1 = data['Low'][i-2]
low2 = data['Low']

if high1 < high2 and low1 < low2:
retracement = (high2 - low1) / (high1 - low1)
if ratios[0] <= retracement <= ratios[1]:
detected_patterns.append((data.index, f'Bullish {pattern}'))
elif high1 > high2 and low1 > low2:
retracement = (low2 - high1) / (low1 - high1)
if ratios[0] <= retracement <= ratios[1]:
detected_patterns.append((data.index, f'Bearish {pattern}'))
return detected_patterns


def plot_patterns(data, patterns):
plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='Price')
plt.plot(data['RSI'], label='RSI')

for pattern in patterns:
if pattern[1] == 'Positive Divergence':
plt.scatter(pattern[0], data['Close'][pattern[0]], color='orange', label='Positive Divergence')
elif 'Bullish' in pattern[1]:
plt.scatter(pattern[0], data['Close'][pattern[0]], color='green', label=pattern[1])
elif 'Bearish' in pattern[1]:
plt.scatter(pattern[0], data['Close'][pattern[0]], color='red', label=pattern[1])

plt.legend()
plt.show()

data = load_data()
data = calculate_rsi(data)
patterns = detect_positive_divergence(data) + detect_harmonic_patterns(data)
plot_patterns(data, patterns)

Disclaimer

The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.