patern harmoni110

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)
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.
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.