MACD Crossover Signal
Moving Average Convergence Divergence crossover detection algorithm
MomentumTechnical AnalysisReal-time
MACD Crossover is one of the most reliable momentum indicators for identifying trend changes. It generates buy signals when the MACD line crosses above the signal line and sell signals when it crosses below.
Trend Detection
Identifies market trend changes through MACD and signal line crossovers
Early Signals
Detects momentum shifts before price movements become obvious
Histogram Analysis
Uses histogram divergence to confirm signal strength
Multi-Timeframe
Supports analysis across multiple timeframes for better accuracy
Performance Metrics
68%
Win Rate
+5%2.3%
Avg Return
+0.8%1.85
Sharpe Ratio
+0.15-8.2%
Max Drawdown
-1.2%Python Implementation
import pandas as pd
import numpy as np
from typing import Dict, List, Optional, Tuple
from dataclasses import dataclass
from datetime import datetime
import talib
@dataclass
class MACDSignal:
"""MACD Crossover Signal Data Class"""
timestamp: datetime
symbol: str
signal_type: str # 'golden_cross' or 'death_cross'
macd_value: float
signal_value: float
histogram: float
price: float
confidence: float
strength: str # 'weak', 'moderate', 'strong'
class MACDCrossoverDetector:
"""MACD Crossover Detection and Analysis Algorithm"""
def __init__(self, fast_period: int = 12, slow_period: int = 26, signal_period: int = 9):
self.fast_period = fast_period
self.slow_period = slow_period
self.signal_period = signal_period
self.histogram_threshold = 0.001
def calculate_macd(self, prices: pd.Series) -> Tuple[pd.Series, pd.Series, pd.Series]:
"""Calculate MACD indicators"""
macd, signal, histogram = talib.MACD(
prices,
fastperiod=self.fast_period,
slowperiod=self.slow_period,
signalperiod=self.signal_period
)
return macd, signal, histogram
def detect_crossover(self, macd: pd.Series, signal: pd.Series) -> List[MACDSignal]:
"""Detect MACD crossover signals"""
signals = []
for i in range(1, len(macd)):
if pd.notna(macd[i]) and pd.notna(signal[i]):
# Golden Cross (MACD crosses above signal)
if macd[i-1] <= signal[i-1] and macd[i] > signal[i]:
strength = self._calculate_strength(macd[i], signal[i])
signals.append(MACDSignal(
timestamp=macd.index[i],
symbol=self.symbol,
signal_type='golden_cross',
macd_value=macd[i],
signal_value=signal[i],
histogram=macd[i] - signal[i],
price=self.prices[i],
confidence=self._calculate_confidence(i),
strength=strength
))
# Death Cross (MACD crosses below signal)
elif macd[i-1] >= signal[i-1] and macd[i] < signal[i]:
strength = self._calculate_strength(macd[i], signal[i])
signals.append(MACDSignal(
timestamp=macd.index[i],
symbol=self.symbol,
signal_type='death_cross',
macd_value=macd[i],
signal_value=signal[i],
histogram=macd[i] - signal[i],
price=self.prices[i],
confidence=self._calculate_confidence(i),
strength=strength
))
return signals
Risk Warning: MACD crossovers can produce false signals in ranging markets. Always use additional confirmation indicators and proper risk management.