MACD in Python calculated from scratch
The algorithm (Multi-Exponential Moving Average Convergence Divergence) developed by J. Ross Cameron and George C. Lapp is a popular technical indicator that is used in various financial markets to analyze the trend and dynamics. In this article we will examine how the MACD values ββare calculated from scratch using Python.
What is MacD?
The MACD calculation includes two main components:
- The EMA (exponential sliding average) of the HMA (heavenly proportional moving average)
- The convergence line (C-line)
The formula for calculating MACD can be divided into several steps:
HMA calculation
In order to calculate the HMA, we have to carry out an exponential smoothing calculation for the closing course of the financial value.
`Python
Import nump as an NP
Def HMA (prices, alpha):
"" ""
Calculate the exponential moving average (EMA) of a list of prices.
Parameter:
Prices (list): List of final prices.
Alpha (Float): EMA smoothing factor.
Returns:
List: List of EMA values.
"" ""
n = len (prices)
Hma_values ββ= []
for i within reach (s):
Hma_values.append (alpha prices [i] + (1 - alpha) hma_values ββ[-1])
Return np.array (hma_values)
Def HMA smoothes (prices, alpha, Window_Size):
"" ""
Calculate the exponential sliding average (EMA) of a list of prices using a moving average.
Parameter:
Prices (list): List of final prices.
Alpha (Float): EMA smoothing factor.
Window_Size (Int): Size of the sliding average window.
Returns:
List: List of EMA values.
"" ""
n = len (prices)
Hma_values ββ= hma (prices, alpha)
hma_values ββ= np.convolve (hma_values, np.ones (Window_Size) / Window_Size, mode = 'equal')))
Gives HMA_Values ββback
MACD calculation
The MACD calculation includes the following steps:
- Calculate the EMA of the HMA.
- Calculate the C line by average the two EMA values.
“ Python
DEF MACD (prices, Window_Size):
“” “”
Calculate the multi-exponential gliding average convergence-diversity algorithm (MACD).
Parameter:
Prices (list): List of final prices.
Window_Size (Int): Size of the MacD signal.
Returns:
List: List of MacD values.
“” “”
Hma_values ββ= hma_smoothed (prices, 3, Window_Size)
Ema smoothed_hma_values ββ= hma_smoothed (hma_values, 12, window_size)
ema_values ββ= ema_smoothed (ema_smoothed_hma_values, 26, Window_Size)
macd_values ββ= []
For i within reach (len (eMa_values) – Wester_Size):
macd_values.append ((ema_values ββ[i] – ema smoothed_hma_values ββ[i]) / ema smoothed_hma_values ββ[i + Window_Size -1])
Return np.array (macd_values)
Def EMA smoothes (prices, alpha, Window_Size):
“” “”
Calculate the exponential sliding average (EMA) of a list of prices using a moving average.
Parameter:
Prices (list): List of final prices.
Alpha (Float): EMA smoothing factor.
Window_Size (Int): Size of the sliding average window.
Returns:
List: List of EMA values.
“” “”
n = len (prices)
Hma_values ββ= hma (prices, alpha)
hma_values ββ= np.convolve (hma_values, np.ones (Window_Size) / Window_Size, mode = ‘equal’)))
hma_values ββ= np.roll (hma_values, -window_size)
Gives HMA_Values ββback
DEF EMA_SMOOTED (EMA_Values, Alpha, Window_Size):
“” “”
Calculate the exponential sliding average (EMA) of a list of EMA values ββusing a sliding average.
Parameter:
EMA_Values ββ(list): List of EMA values.
Alpha (Float): EMA smoothing factor.
Window_Size (Int): Size of the sliding average window.
Returns:
List: List of the smoothed EMA values.
“” “”
n = len (ema_values)
Hma_values ββ= hma_smoothed (EMA_Values, 3, Window_Size)
Hma_values ββ= np.convolve (hma_values, np.